<?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>216667</bug_id>
          
          <creation_ts>2020-09-17 15:14:35 -0700</creation_ts>
          <short_desc>[JSC] BigInt should work with Map / Set</short_desc>
          <delta_ts>2020-09-26 12:52:22 -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>JavaScriptCore</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>macOS 10.15</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dwight House">dwighthouse</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1689605</commentid>
    <comment_count>0</comment_count>
      <attachid>409070</attachid>
    <who name="Dwight House">dwighthouse</who>
    <bug_when>2020-09-17 15:14:35 -0700</bug_when>
    <thetext>Created attachment 409070
Demonstration Script and Expected Output

# Feature Background

* BigInts store arbitrarily large integers as a primitive data type, where they may be constructed with a `BigInt` function or by using new syntax of appending an `n` to an integer number.
  - BigInt support just landed on Desktop Safari ( https://developer.apple.com/documentation/safari-release-notes/safari-14-beta-release-notes#JavaScript ).
  - My version: 14.0 (15610.1.28.1.9, 15610).
    - I did download the latest WebKit Build Archives version as of the writing of this ticket and found the issue to still be present, though it was hard to tell due to Catalina&apos;s aggressive attempts to prevent it from running.
* Maps store key-value pairs, where keys must be unique and their equality is judged by sameValueZero ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Description ).
* Sets store values, where values must be unique and their equality is judged by sameValueZero ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set ).



# Problem Discovery

I was working on my json-complete library and found an error in my tests that only appeared to affect Safari, which had just been updated this morning.
  - json-complete - https://github.com/cierelabs/json-complete
  - The library saves some space in the output encoded string by deduplicating equal values.
  - My deduplication tests failed on Safari when dealing with BigInt.
  - Tracking this down, I discovered that multiple &quot;equal&quot; BigInt values were not being treated as equal in my Map object, which forms the core of that part of the library.
  - This is unacceptable because it will allow for a situation where Safari browsers using my library can sometimes create a different output for the exact same data, even if the versions are identical.
  - To work around this, I would have to add an exception for BigInt types that requires either all data or just BigInt data to fall back to the slower methodology of checking value equality of every previous entry when trying to deduplicate items.



# Issue Description

* Safari 14 appears to sometimes treat function-constructed BigInt values as non-equal to equal BigInt values for the purposes of deduplication in Map keys and Set values.
* Additionally, the &quot;sometimes&quot; aspect of this non-equality appears to be a race-condition, as the way in which Safari will incorrectly store duplicate entries varies from page load to page load.
* In my testing, it is always wrong, but how wrong it is varies.
* Finally, the order of the incorrect insertions are also incorrect. Occasionally, the output will show entries out of order, even if BigInt values were not strictly value-equal to each other.
* This issue is not present in Google Chrome, Mozilla Firefox, and Brave.



# Expected Behavior

1. When adding a new key-value pair with the same BigInt value as the key as a previous entry, regardless of being constructed with a function or the new syntax, the Map should store only the last added key-value pair that uses that BigInt key. There should not be duplicates and the values of the same key entry should always be overwritten.
2. When adding a new value with the same BigInt value as a previous value, regardless of being constructed with a function or the new syntax, the Set should only store the last added BigInt of that value. There should not be duplicates.



# Actual Behavior

1. Some number of duplications of the same BigInt key will be stored in the Map. The times this occurs varies from page load to page load.
2. Some number of duplications of the same BigInt value will be stored in the Map. The times this occurs varies from page load to page load.



# Samples of Incorrect Output

As noted above, I get different incorrect results per page load. Here are some examples of different variants:

```
Map:
[
    0, zero 4
    0, BigInt zero 4
    1, BigInt one function 1
    1, BigInt one function 2
    1, BigInt one function 3
    1, BigInt one function 4
    1, BigInt one
]

Set:
[
    0
    0
    1
    1
]
```

```
Map:
[
    0, zero 4
    0, BigInt zero 4
    1, BigInt one function 1
    1, BigInt one
    1, BigInt one function 3
    1, BigInt one function 4
]

Set:
[
    0
    0
    1
    1
    1
]
```

```
Map:
[
    0, zero 4
    0, BigInt zero 4
    1, BigInt one function 1
    1, BigInt one function 2
    1, BigInt one function 3
    1, BigInt one
]

Set:
[
    0
    0
    1
    1
]
```



# Steps to Reproduce

* Please see sample code provided in the attached file, which demonstrates both problems.
* Reload the page multiple times in Safari to see the variances.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689659</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-17 17:18:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/69107221&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690152</commentid>
    <comment_count>2</comment_count>
      <attachid>409226</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-20 01:55:29 -0700</bug_when>
    <thetext>Created attachment 409226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690154</commentid>
    <comment_count>3</comment_count>
      <attachid>409227</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-20 02:19:12 -0700</bug_when>
    <thetext>Created attachment 409227
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690170</commentid>
    <comment_count>4</comment_count>
      <attachid>409227</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-09-20 09:35:22 -0700</bug_when>
    <thetext>Comment on attachment 409227
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:2381
&gt; +            else if (node-&gt;child2()-&gt;shouldSpeculateInt32())

typo: shouldSpeculateBigInt32</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690211</commentid>
    <comment_count>5</comment_count>
      <attachid>409227</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-20 13:15:44 -0700</bug_when>
    <thetext>Comment on attachment 409227
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:2381
&gt;&gt; +            else if (node-&gt;child2()-&gt;shouldSpeculateInt32())
&gt; 
&gt; typo: shouldSpeculateBigInt32

Oops. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690212</commentid>
    <comment_count>6</comment_count>
      <attachid>409246</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-20 13:16:32 -0700</bug_when>
    <thetext>Created attachment 409246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690347</commentid>
    <comment_count>7</comment_count>
      <attachid>409246</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-09-21 10:44:36 -0700</bug_when>
    <thetext>Comment on attachment 409246
Patch

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

r=me, thanks for this patch!

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1384
&gt; +        SpeculatedType typeMaybeNormalized = (SpecFullNumber &amp; ~SpecInt32Only) | SpecHeapBigInt;

This looks like it is fixing a different bug? Maybe worth mentioning in the Changelog.

&gt; Source/JavaScriptCore/dfg/DFGDoesGC.cpp:520
&gt; +#if USE(BIGINT32)

This is a small unrelated optimization, right? (since doesGC is conservative)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690363</commentid>
    <comment_count>8</comment_count>
      <attachid>409246</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-21 11:32:47 -0700</bug_when>
    <thetext>Comment on attachment 409246
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1384
&gt;&gt; +        SpeculatedType typeMaybeNormalized = (SpecFullNumber &amp; ~SpecInt32Only) | SpecHeapBigInt;
&gt; 
&gt; This looks like it is fixing a different bug? Maybe worth mentioning in the Changelog.

No. After this change, NormalizeMapKey needs to convert JSBigInt to BigInt32 if (1) BigInt32 is supported and (2) JSBigInt&apos;s value is in range of BigInt32.
So, NormalizeMapKey&apos;s AI conversion rule should care this case. This is part of (1) change in ChangeLog.

&gt;&gt; Source/JavaScriptCore/dfg/DFGDoesGC.cpp:520
&gt;&gt; +#if USE(BIGINT32)
&gt; 
&gt; This is a small unrelated optimization, right? (since doesGC is conservative)

I think this is good. Since we should maintain the rules of DoesGC when we changed the behavior. And after this patch, BigInts are supported in MapHash correctly. So this is good timing to list up here :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690498</commentid>
    <comment_count>9</comment_count>
      <attachid>409246</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-21 13:46:25 -0700</bug_when>
    <thetext>Comment on attachment 409246
Patch

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

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:3059
&gt; +unsigned JSBigInt::concurrentHash()
&gt; +{
&gt; +    Hasher hasher;
&gt; +    WTF::add(hasher, m_sign);
&gt; +    for (unsigned index = 0; index &lt; length(); ++index)
&gt; +        WTF::add(hasher, digit(index));
&gt; +    return hasher.hash();
&gt; +}

Temporary disable this (concurrentHash) since I&apos;m not sure about the story between storage data and concurrent compiler thread read. We should fix it. Add FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690537</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-21 15:10:30 -0700</bug_when>
    <thetext>Committed r267373: &lt;https://trac.webkit.org/changeset/267373&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690704</commentid>
    <comment_count>11</comment_count>
      <attachid>409246</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-09-22 08:33:42 -0700</bug_when>
    <thetext>Comment on attachment 409246
Patch

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

LGTM overall too, but I have some comments

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1384
&gt;&gt;&gt; +        SpeculatedType typeMaybeNormalized = (SpecFullNumber &amp; ~SpecInt32Only) | SpecHeapBigInt;
&gt;&gt; 
&gt;&gt; This looks like it is fixing a different bug? Maybe worth mentioning in the Changelog.
&gt; 
&gt; No. After this change, NormalizeMapKey needs to convert JSBigInt to BigInt32 if (1) BigInt32 is supported and (2) JSBigInt&apos;s value is in range of BigInt32.
&gt; So, NormalizeMapKey&apos;s AI conversion rule should care this case. This is part of (1) change in ChangeLog.

Yeah, this looks right to me.

But maybe this variable could be renamed to something like &quot;typesNeedingNormalization&quot; or &quot;typesThatNeedNormalization&quot; to be less confusing.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:12547
&gt; +    addSlowPathGenerator(slowPathCall(slowPath, this, operationNormalizeMapKey, resultRegs, &amp;vm(), keyRegs));

since this is just for heap big int, should we specialize  &quot;operationNormalizeMapKey&quot; to not have to do  type checks, etc (and to name it like &quot;operationNormalizeMapKeyHeapBigInt&quot;)?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4465
&gt; +            callOperation(operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node-&gt;origin.semantic)), inputGPR);

should we specialize operationMapHash to be over BigInt?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4466
&gt; +            m_jit.exceptionCheck();

can this throw for HeapBigInt?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4495
&gt; +                addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node-&gt;origin.semantic)), inputGPR));

ditto about specializing

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4549
&gt; +        addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node-&gt;origin.semantic)), inputGPR));

ditto about specializing it.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4641
&gt; +            auto isBucketString = m_jit.branchIfString(bucketGPR);

nit: I&apos;d have named this  &quot;bucketIsString&quot;

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4645
&gt; +            slowPathCases.append(m_jit.branchIfHeapBigInt(keyGPR));

why do we need the branch here? Isn&apos;t this guaranteed to be the case since we&apos;re the fall through from branchIfNotHeapBigInt

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4679
&gt; +            loopAround.append(m_jit.branchIfNotHeapBigInt(bucketGPR));
&gt; +            // bucket is HeapBigInt.
&gt; +            slowPathCases.append(m_jit.branchIfHeapBigInt(keyGPR));

isn&apos;t the second branch proven true by the first?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11270
&gt; +            LBasicBlock notStringHeapBigIntCase = m_out.newBlock();

nit: I&apos;d name this &quot;notStringNorHeapBigIntCase&quot;

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11286
&gt; +            ValueFromBlock heapBigIntResult = m_out.anchor(m_out.castToInt32(vmCall(Int64, operationMapHash, weakPointer(globalObject), value)));

ditto about specializing a call of operationMapHash for HeapBigInt

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11372
&gt; +        m_out.branch(isNotHeapBigInt(key), unsure(continuation), unsure(isHeapBigIntCase));

should  we use provenType in isNotHeapBigInt here?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11375
&gt; +        ValueFromBlock bigIntResult = m_out.anchor(vmCall(Int64, operationNormalizeMapKey, m_vmValue, key));

ditto about specializing

&gt;&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:3059
&gt;&gt; +}
&gt; 
&gt; Temporary disable this (concurrentHash) since I&apos;m not sure about the story between storage data and concurrent compiler thread read. We should fix it. Add FIXME.

Why wouldn&apos;t it work? Aren&apos;t BigInts immutable?

Also, do we have place to cache the result of the hash inline somewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690845</commentid>
    <comment_count>12</comment_count>
      <attachid>409246</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-22 13:33:41 -0700</bug_when>
    <thetext>Comment on attachment 409246
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:3059
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; Temporary disable this (concurrentHash) since I&apos;m not sure about the story between storage data and concurrent compiler thread read. We should fix it. Add FIXME.
&gt; 
&gt; Why wouldn&apos;t it work? Aren&apos;t BigInts immutable?
&gt; 
&gt; Also, do we have place to cache the result of the hash inline somewhere?

immutable, but we are not ensuring when this baking process is done when it is exposed to concurrent compilers. And I&apos;m not 100% confident. This should be done in a separate patch with careful investigation.
And m_hash is added in the landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692168</commentid>
    <comment_count>13</comment_count>
      <attachid>409246</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-26 01:33:24 -0700</bug_when>
    <thetext>Comment on attachment 409246
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1384
&gt;&gt;&gt;&gt; +        SpeculatedType typeMaybeNormalized = (SpecFullNumber &amp; ~SpecInt32Only) | SpecHeapBigInt;
&gt;&gt;&gt; 
&gt;&gt;&gt; This looks like it is fixing a different bug? Maybe worth mentioning in the Changelog.
&gt;&gt; 
&gt;&gt; No. After this change, NormalizeMapKey needs to convert JSBigInt to BigInt32 if (1) BigInt32 is supported and (2) JSBigInt&apos;s value is in range of BigInt32.
&gt;&gt; So, NormalizeMapKey&apos;s AI conversion rule should care this case. This is part of (1) change in ChangeLog.
&gt; 
&gt; Yeah, this looks right to me.
&gt; 
&gt; But maybe this variable could be renamed to something like &quot;typesNeedingNormalization&quot; or &quot;typesThatNeedNormalization&quot; to be less confusing.

Changed.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:12547
&gt;&gt; +    addSlowPathGenerator(slowPathCall(slowPath, this, operationNormalizeMapKey, resultRegs, &amp;vm(), keyRegs));
&gt; 
&gt; since this is just for heap big int, should we specialize  &quot;operationNormalizeMapKey&quot; to not have to do  type checks, etc (and to name it like &quot;operationNormalizeMapKeyHeapBigInt&quot;)?

Added operationNormalizeMapKeyHeapBigInt

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4465
&gt;&gt; +            callOperation(operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node-&gt;origin.semantic)), inputGPR);
&gt; 
&gt; should we specialize operationMapHash to be over BigInt?

Added operationMapHashHeapBigInt.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4466
&gt;&gt; +            m_jit.exceptionCheck();
&gt; 
&gt; can this throw for HeapBigInt?

If it is operationMapHash, we should insert check. We should not rely on the internal implementation detail.
If we specialize it to operationMapHashHeapBigInt, we can remove it.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4495
&gt;&gt; +                addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node-&gt;origin.semantic)), inputGPR));
&gt; 
&gt; ditto about specializing

Added.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4549
&gt;&gt; +        addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node-&gt;origin.semantic)), inputGPR));
&gt; 
&gt; ditto about specializing it.

Added.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4641
&gt;&gt; +            auto isBucketString = m_jit.branchIfString(bucketGPR);
&gt; 
&gt; nit: I&apos;d have named this  &quot;bucketIsString&quot;

Changed.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4645
&gt;&gt; +            slowPathCases.append(m_jit.branchIfHeapBigInt(keyGPR));
&gt; 
&gt; why do we need the branch here? Isn&apos;t this guaranteed to be the case since we&apos;re the fall through from branchIfNotHeapBigInt

No. We tested bucketGPR. This is testing keyGPR.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4679
&gt;&gt; +            slowPathCases.append(m_jit.branchIfHeapBigInt(keyGPR));
&gt; 
&gt; isn&apos;t the second branch proven true by the first?

No, this is for keyGPR. The first one is bucketGPR.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11270
&gt;&gt; +            LBasicBlock notStringHeapBigIntCase = m_out.newBlock();
&gt; 
&gt; nit: I&apos;d name this &quot;notStringNorHeapBigIntCase&quot;

Changed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11286
&gt;&gt; +            ValueFromBlock heapBigIntResult = m_out.anchor(m_out.castToInt32(vmCall(Int64, operationMapHash, weakPointer(globalObject), value)));
&gt; 
&gt; ditto about specializing a call of operationMapHash for HeapBigInt

Added.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11372
&gt;&gt; +        m_out.branch(isNotHeapBigInt(key), unsure(continuation), unsure(isHeapBigIntCase));
&gt; 
&gt; should  we use provenType in isNotHeapBigInt here?

provenType is added in the landed patch :)

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:11375
&gt;&gt; +        ValueFromBlock bigIntResult = m_out.anchor(vmCall(Int64, operationNormalizeMapKey, m_vmValue, key));
&gt; 
&gt; ditto about specializing

Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692169</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-26 01:47:57 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692170</commentid>
    <comment_count>15</comment_count>
      <attachid>409772</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-26 01:47:58 -0700</bug_when>
    <thetext>Created attachment 409772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692204</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-26 12:52:22 -0700</bug_when>
    <thetext>Committed r267624: &lt;https://trac.webkit.org/changeset/267624&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>409070</attachid>
            <date>2020-09-17 15:14:35 -0700</date>
            <delta_ts>2020-09-17 15:14:35 -0700</delta_ts>
            <desc>Demonstration Script and Expected Output</desc>
            <filename>safari14MapSetBigIntDuplications.html</filename>
            <type>text/html</type>
            <size>1527</size>
            <attacher name="Dwight House">dwighthouse</attacher>
            
              <data encoding="base64">PCFkb2N0eXBlIGh0bWw+Cjx0aXRsZT5TYWZhcmkgMTQgTWFwL1NldCBCaWdJbnQgRHVwbGljYXRp
b25zPC90aXRsZT4KCjxoMT5TYWZhcmkgMTQgTWFwL1NldCBCaWdJbnQgRHVwbGljYXRpb25zPC9o
MT4KCjxoMj5FeHBlY3RlZCBPdXRwdXQ6PC9oMj4KPHByZT5FcXVhbGl0eToKdHJ1ZQp0cnVlCgpN
YXA6ClsKICAgIDAsIHplcm8gNAogICAgMCwgQmlnSW50IHplcm8gNAogICAgMSwgQmlnSW50IG9u
ZQpdCgpTZXQ6ClsKICAgIDAKICAgIDAKICAgIDEKXTwvcHJlPgoKPGgyPk91dHB1dDo8L2gyPgo8
cHJlIGlkPSJvdXRwdXQiPjwvcHJlPgoKPHNjcmlwdD4KY29uc3QgdGV4dCA9IFtdOwoKdGV4dC5w
dXNoKCdFcXVhbGl0eTonKTsKdGV4dC5wdXNoKFN0cmluZyhCaWdJbnQoMSkgPT09IEJpZ0ludCgx
KSkpOwp0ZXh0LnB1c2goU3RyaW5nKDFuID09PSAxbikpOwoKY29uc3QgbXlNYXAgPSBuZXcgTWFw
KCk7CgpteU1hcC5zZXQoMCwgJ3plcm8gMScpOwpteU1hcC5zZXQoMCwgJ3plcm8gMicpOwpteU1h
cC5zZXQoMCwgJ3plcm8gMycpOwpteU1hcC5zZXQoMCwgJ3plcm8gNCcpOwoKbXlNYXAuc2V0KDBu
LCAnQmlnSW50IHplcm8gMScpOwpteU1hcC5zZXQoMG4sICdCaWdJbnQgemVybyAyJyk7Cm15TWFw
LnNldCgwbiwgJ0JpZ0ludCB6ZXJvIDMnKTsKbXlNYXAuc2V0KDBuLCAnQmlnSW50IHplcm8gNCcp
OwoKbXlNYXAuc2V0KEJpZ0ludCgxKSwgJ0JpZ0ludCBvbmUgZnVuY3Rpb24gMScpOwpteU1hcC5z
ZXQoQmlnSW50KDEpLCAnQmlnSW50IG9uZSBmdW5jdGlvbiAyJyk7Cm15TWFwLnNldChCaWdJbnQo
MSksICdCaWdJbnQgb25lIGZ1bmN0aW9uIDMnKTsKbXlNYXAuc2V0KEJpZ0ludCgxKSwgJ0JpZ0lu
dCBvbmUgZnVuY3Rpb24gNCcpOwoKbXlNYXAuc2V0KDFuLCAnQmlnSW50IG9uZScpOwoKdGV4dC5w
dXNoKCdcbk1hcDonKTsKdGV4dC5wdXNoKCdbJyk7CkFycmF5LmZyb20obXlNYXAuZW50cmllcygp
KS5mb3JFYWNoKChlbnRyeSkgPT4gewogICAgdGV4dC5wdXNoKGAgICAgJHtbU3RyaW5nKGVudHJ5
WzBdKSwgU3RyaW5nKGVudHJ5WzFdKV0uam9pbignLCAnKX1gKTsKfSk7CnRleHQucHVzaCgnXScp
OwoKY29uc3QgbXlTZXQgPSBuZXcgU2V0KCk7CgpteVNldC5hZGQoMCk7Cm15U2V0LmFkZCgwKTsK
bXlTZXQuYWRkKDApOwpteVNldC5hZGQoMCk7CgpteVNldC5hZGQoMG4pOwpteVNldC5hZGQoMG4p
OwpteVNldC5hZGQoMG4pOwpteVNldC5hZGQoMG4pOwoKbXlTZXQuYWRkKEJpZ0ludCgxKSk7Cm15
U2V0LmFkZChCaWdJbnQoMSkpOwpteVNldC5hZGQoQmlnSW50KDEpKTsKbXlTZXQuYWRkKEJpZ0lu
dCgxKSk7Cgp0ZXh0LnB1c2goJ1xuU2V0OicpOwp0ZXh0LnB1c2goJ1snKTsKQXJyYXkuZnJvbSht
eVNldCkuZm9yRWFjaCgodmFsdWUpID0+IHsKICAgIHRleHQucHVzaChgICAgICR7U3RyaW5nKHZh
bHVlKX1gKTsKfSk7CnRleHQucHVzaCgnXScpOwoKZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI291
dHB1dCcpLmlubmVySFRNTCA9IHRleHQuam9pbignXG4nKTsKPC9zY3JpcHQ+
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409226</attachid>
            <date>2020-09-20 01:55:29 -0700</date>
            <delta_ts>2020-09-20 02:19:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216667-20200920015529.patch</filename>
            <type>text/plain</type>
            <size>40696</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MTEzMzM5MGZlN2VhNWI0ZDBmMTlmMDI2MDcyZTc0OWVjYzE3MmU0Li42ZDhlMGRiNjkwNTUwODgy
NmRjNzFhOTU1ZWEyNDMzMzMzOWVjY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBCaWdJbnQgc3VwcG9ydGVkIGluIE1hcCAvIFNldC4KKworICAgICAgICAxLiBJbiBOb3Jt
YWxpemVNYXBLZXksIHdlIGFsd2F5cyBhdHRlbXB0IHRvIGNvbnZlcnQgSGVhcEJpZ0ludCB0byBC
aWdJbnQzMiAoaWYgc3VwcG9ydGVkKS4gU28gd2UgZW5zdXJlIHRoYXQsCisgICAgICAgICAgICBu
b3JtYWxpemVkIEJpZ0ludCBoYXMgb25lIHVuaXF1ZSBmb3JtIGZvciBCaWdJbnQzMiByYW5nZS4g
VGhpcyBhbGxvd3MgdXMgdG8gdXNlIGhhc2hpbmcgZm9yIEJpZ0ludDMyIGJpdCBwYXR0ZXJuIGRp
cmVjdGx5LgorICAgICAgICAyLiBJbiBNYXBIYXNoLCBmb3IgQmlnSW50MzIsIHdlIGRpcmVjdGx5
IGhhcyB0aGUgSlNWYWx1ZSBiaXRzLiBGb3IgSGVhcEJpZ0ludCwgd2UgY2FsY3VsYXRlIGhhc2gg
dmlhIEhhc2hlci4KKyAgICAgICAgMy4gSW4gR2V0TWFwQnVja2V0LCB3ZSBjb25zaWRlciBIZWFw
QmlnSW50IGNhc2UgY29ycmVjdGx5LgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGlu
Z1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9ybWFsaXplTWFwS2V5KToKKyAgICAgICAgKiBk
ZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTm9ybWFsaXplTWFwS2V5KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWFwSGFzaCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb3JtYWxpemVNYXBLZXkpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TWFwQnVja2V0KToK
KyAgICAgICAgKiBydW50aW1lL0hhc2hNYXBJbXBsLmg6CisgICAgICAgIChKU0M6Om5vcm1hbGl6
ZU1hcEtleSk6CisgICAgICAgIChKU0M6OmpzTWFwSGFzaCk6CisgICAgICAgIChKU0M6OmNvbmN1
cnJlbnRKU01hcEhhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6Y29uY3VycmVudEhhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvSlNC
aWdJbnQuaDoKKyAgICAgICAgKEpTQzo6dHJ5Q29udmVydFRvQmlnSW50MzIpOgorCiAyMDIwLTA5
LTE4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
R2VuZXJhdG9yIGRlY2xhcmF0aW9uIHNob3VsZCBub3QgYmUgYWxsb3dlZCBpbiBzaW5nbGUgc3Rh
dGVtZW50IGNvbnRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggNjBkMGY3MzQyYzJhNmFhYmM1MWU3ZDRhZGIyOGI1YTkyNzgy
YTYwMC4uNzk4NWUyNTFlNjI2ZWNmOTA2YThiNzUwYmJlZWY5OGJkNmVmOGUxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaGVy
Lmg6CisgICAgICAgIChXVEY6Okhhc2hlcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OmFk
ZCk6CisKIDIwMjAtMDktMTggIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4K
IAogICAgICAgICBbV2ViR1BVXSBBZGQgRU5BQkxFKFdITFNMX0NPTVBJTEVSKSBndWFyZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDc0ODQxOTExNGFmOWM2ZGFjYWI4MTExZWNhNjMwMTE0ZTA5M2IwZjUuLjg5MmQ2
ZWE2MzY5NWZkYjk4M2EzYjJmNTcxNGY1NTU0NDI1YmUzZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgor
CisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82OTEwNzIyMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTdHJvbmdseSBlbnN1cmUgdGhhdCBCaWdJbnQzMiBpcyBhbHdh
eXMgc2VsZWN0ZWQgc2luY2UgTWFwIC8gU2V0IGNvdWxkIHVzZSBpdCBhcyBhIGtleS4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEJpZ0ludCk6CisKIDIwMjAtMDktMTkgIEFu
ZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVu
dGF0aW9uIGZvciBBWElzb2xhdGVkT2JqZWN0OjpuZXh0U2libGluZyBhbmQgcHJldmlvdXNTaWJs
aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCmluZGV4IGQ5MDJmMjA3MmI2MTYzNmRhYWZjY2RkNmM0MzRl
NDFhM2IxNTNmZWQuLmNlNmExMzc4OWYyMTU1OGYzYjg1MGRkNGFlZjEzNTNhYWE4YWQ5NjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTEzODEsNyArMTM4MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2Ji
ZXJMaW1pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGVNYXliZU5vcm1hbGl6ZWQgPSAoU3BlY0Z1bGxOdW1iZXIgJiB+U3BlY0ludDMy
T25seSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGVNYXliZU5vcm1hbGl6ZWQgPSAoU3Bl
Y0Z1bGxOdW1iZXIgJiB+U3BlY0ludDMyT25seSkgfCBTcGVjSGVhcEJpZ0ludDsKICAgICAgICAg
aWYgKCEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgdHlwZU1heWJlTm9ybWFsaXpl
ZCkpIHsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3RhbnRGb2xkaW5nKHRy
dWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAppbmRleCA1ZTJiZDljOTVlMDgyYjI4MDNjZmI5ZDkwM2I5NTYyNzNkOGZlMzI5
Li45NjcwMmUwOWZjYzVhZjc4Y2QyNzQ5OTYwNTI0MTIwZGNkNDEwZTQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApA
QCAtOTk0LDcgKzk5NCw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBOb3JtYWxpemVNYXBLZXk6
IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlTWF5YmVOb3JtYWxpemVkID0g
KFNwZWNGdWxsTnVtYmVyICYgflNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHR5cGVNYXliZU5vcm1hbGl6ZWQgPSAoU3BlY0Z1bGxOdW1iZXIgJiB+U3BlY0lu
dDMyT25seSkgfCBTcGVjSGVhcEJpZ0ludDsKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB0eXBlTWF5YmVOb3JtYWxpemVkKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCmluZGV4IDE4Yjg4Mzk2OWI2OTBmMTNmNmZmYmZiN2Q3NTZiYjNjYTIyMDhjNzkuLjQy
NWRmYmU2ZjU4MTEzZjBiNmU4NmY4Zjc4MTExN2FhN2ViNTlkZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBib29sIGRvZXNHQyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTdXBlclNhbXBsZXJCZWdpbjoKICAg
ICBjYXNlIFN1cGVyU2FtcGxlckVuZDoKICAgICBjYXNlIENQVUludHJpbnNpYzoKLSAgICBjYXNl
IE5vcm1hbGl6ZU1hcEtleToKKyAgICBjYXNlIE5vcm1hbGl6ZU1hcEtleTogLy8gSGVhcEJpZ0lu
dCA9PiBCaWdJbnQzMiBjb252ZXJzaW9uIGRvZXMgbm90IGludm9sdmUgR0MuCiAgICAgY2FzZSBH
ZXRNYXBCdWNrZXRIZWFkOgogICAgIGNhc2UgR2V0TWFwQnVja2V0TmV4dDoKICAgICBjYXNlIExv
YWRLZXlGcm9tTWFwQnVja2V0OgpAQCAtNTE3LDYgKzUxNywxMCBAQCBib29sIGRvZXNHQyhHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgIGNh
c2UgU3ltYm9sVXNlOgogICAgICAgICBjYXNlIE9iamVjdFVzZToKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgICAgIGNhc2UgQmlnSW50MzJVc2U6CisjZW5kaWYKKyAgICAgICAgY2FzZSBIZWFwQmln
SW50VXNlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgLy8gV2UgbWlnaHQgcmVzb2x2ZSBhIHJvcGUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBiNmMwYmI4YmE5OTBmZmYzNWMwMDNjODYw
MTdlZTA2NzM0MTBlMDM4Li4wMjk2Yjc3Zjg5ZjIzZjQxNTRiODYzMTBlMzA5YzgwZTIwY2Q4MGM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTIz
NzcsMTIgKzIzNzcsMTggQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgICAgICAgICAgZml4RWRnZTxCb29sZWFuVXNlPihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSkKICAg
ICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisjaWYgVVNF
KEJJR0lOVDMyKQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZUludDMyKCkpCisgICAgICAgICAgICAgICAgZml4RWRnZTxCaWdJbnQzMlVzZT4obm9k
ZS0+Y2hpbGQyKCkpOworI2VuZGlmCiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlU3ltYm9sKCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxTeW1i
b2xVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPE9i
amVjdFVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hp
bGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8
U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSGVhcEJpZ0ludCgpKQorICAgICAgICAgICAgICAgIGZp
eEVkZ2U8SGVhcEJpZ0ludFVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKICAgICAgICAgICAgICAg
ICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGVsc2UKQEAg
LTI0MzYsNiArMjQ0MiwxOCBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorI2lmIFVTRShCSUdJTlQzMikK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQmlnSW50MzIo
KSkgeworICAgICAgICAgICAgICAgIGZpeEVkZ2U8QmlnSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUhlYXBCaWdJbnQoKSkg
eworICAgICAgICAgICAgICAgIGZpeEVkZ2U8SGVhcEJpZ0ludFVzZT4obm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkgewogICAgICAgICAgICAg
ICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzk5NiwxMSArNDAxNCwxMyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7Ci0gICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoKSkgeworICAgICAgICAg
ICAgZml4RWRnZTxCaWdJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
I2VuZGlmCiAKICAgICAgICAgZml4RWRnZTxVbnR5cGVkVXNlPihub2RlLT5jaGlsZDEoKSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXgg
MWRjNWI2NTljNmI0MWQxYmU3MDkzYTgzNzUzMTQ2YTMxZjYzNmU2OC4uZDRlOTI1MTMyYzFiNTJk
MGQ0ZWFiNjQ3N2ZhOWUwMTE2NzJhOGVkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCkBAIC0zMjEyLDYgKzMyMTIsMTQgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYXJOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwKICAgICByZXR1cm4gcHV0RHluYW1pY1ZhcihnbG9iYWxPYmplY3QsIHZtLCBzY29w
ZSwgdmFsdWUsIGltcGwsIGdldFB1dEluZm9CaXRzLCBpc1N0cmljdE1vZGUpOwogfQogCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleShWTSogdm1Q
b2ludGVyLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVy
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShub3JtYWxpemVNYXBLZXkoSlNWYWx1ZTo6
ZGVjb2RlKGlucHV0KSkpOworfQorCiBVQ1BVU3RyaWN0SW50MzIgSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYXBIYXNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGlucHV0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggZTI5YTRjZGJiZjljZDllYzU3YzM2
NDkzYzE5OTcxZTMyYmZiYWIyMC4uNTUxNzQ2MGE5NDM4MDhkZWZmYTYwZDlmMWMzYTE3ZmZhZGY1
N2E5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTI0
Myw2ICsyNDMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkludDMyVG9TdHJpbmdX
aXRoVmFsaWRSYWRpeChKU0dsb2JhbE9iamVjdCosIGludDMyXwogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25JbnQ1MlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgoSlNHbG9iYWxPYmplY3QqLCBp
bnQ2NF90LCBpbnQzMl90KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9T
dHJpbmdXaXRoVmFsaWRSYWRpeChKU0dsb2JhbE9iamVjdCosIGRvdWJsZSwgaW50MzJfdCk7CiAK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm9ybWFsaXplTWFwS2V5KFZN
KiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpIFdURl9JTlRFUk5BTDsKIFVDUFVTdHJpY3RJbnQzMiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSBpbnB1dCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVj
a2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggZTMwZDY2ZTA4MTlm
YzE0MTNlNmZjZDRhNjJiYzFkZTVlZDE1NWFjMC4uMDdkNzNiOWIxYjMxMTI4NzNkOGE5YTAzM2My
NDZkZTVkZWQwNjVlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKQEAgLTEyNTE3LDYgKzEyNTE3LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOb3JtYWxpemVNYXBLZXkoTm9kZSogbm9kZSkKICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHBhc3NUaHJvdWdoQ2FzZXM7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBk
b25lQ2FzZXM7CiAKKyAgICBhdXRvIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChr
ZXlSZWdzKTsKKyAgICBwYXNzVGhyb3VnaENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEhl
YXBCaWdJbnQoa2V5UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICBhdXRvIHNsb3dQYXRoID0gbV9q
aXQuanVtcCgpOworICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisKICAgICBwYXNzVGhyb3Vn
aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihrZXlSZWdzLCBzY3JhdGNoR1BS
KSk7CiAgICAgcGFzc1Rocm91Z2hDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihrZXlS
ZWdzKSk7CiAKQEAgLTEyNTM5LDYgKzEyNTQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU5vcm1hbGl6ZU1hcEtleShOb2RlKiBub2RlKQogCiAgICAgcGFzc1Rocm91Z2hDYXNlcy5s
aW5rKCZtX2ppdCk7CiAgICAgbV9qaXQubW92ZVZhbHVlUmVncyhrZXlSZWdzLCByZXN1bHRSZWdz
KTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleSwgcmVzdWx0UmVncywgJnZtKCksIGtleVJlZ3MpKTsK
IAogICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCmluZGV4IDAzOTMwN2YxMmQ5ZjU1MDFjZmI2M2EzYzNkMjNmMTEyYzYzNWQ5
NTMuLmYwOGY1NTIyMWNjYzgxN2RhMzQ2Y2ZlYzE5OTA5MjhlM2I4YzRiZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtNDQz
MSw2ICs0NDMxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
CiAgICAgY2FzZSBNYXBIYXNoOiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBjYXNlIEJpZ0ludDMyVXNlOgor
I2VuZGlmCiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2FzZSBJbnQzMlVzZToK
ICAgICAgICAgY2FzZSBTeW1ib2xVc2U6CkBAIC00NDUwLDYgKzQ0NTMsMjAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgc3RyaWN0SW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIGNhc2UgSGVhcEJpZ0ludFVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZUhlYXBCaWdJbnQo
bm9kZS0+Y2hpbGQxKCksIGlucHV0R1BSKTsKKworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKKyAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CisgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBj
YXNlIFN0cmluZ1VzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgaW5wdXQo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNDQ3Miw4ICs0NDg5LDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcobm9kZS0+Y2hpbGQxKCksIGlucHV0R1BSKTsKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBtX2ppdC5icmFuY2hJZlN0cmluZyhpbnB1dEdQ
Uik7CisgICAgICAgICAgICAgICAgYXV0byBpc0hlYXBCaWdJbnQgPSBtX2ppdC5icmFuY2hJZkhl
YXBCaWdJbnQoaW5wdXRHUFIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQud2FuZ3NJbnQ2NEhhc2gocmVzdWx0
R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbnB1dEdQUikpOwogICAgICAgICAgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgaXNTdHJpbmcubGlu
aygmbV9qaXQpOwogICAgICAgICAgICAgfQpAQCAtNDUxNSw2ICs0NTM0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZG9uZTsKICAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOworICAgICAgICBhdXRvIGlzSGVhcEJpZ0ludCA9IG1faml0LmJyYW5jaElmSGVhcEJp
Z0ludChpbnB1dEdQUik7CiAgICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RTdHJpbmcoaW5wdXRHUFIpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhpbnB1dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZlJvcGVTdHJpbmdJ
bXBsKHJlc3VsdEdQUikpOwpAQCAtNDUyNiw2ICs0NTQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBzdHJhaWdodEhhc2gubGluaygmbV9qaXQp
OwogICAgICAgICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2pp
dC53YW5nc0ludDY0SGFzaChyZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25NYXBI
YXNoLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbnB1dEdQUikpOwog
ICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCiAgICAgICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKQEAgLTQ1OTYsNiArNDYxNyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQogICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIEJvb2xl
YW5Vc2U6CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBjYXNlIEJpZ0ludDMyVXNlOgorI2Vu
ZGlmCiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgIGNhc2UgU3ltYm9sVXNlOgogICAg
ICAgICBjYXNlIE9iamVjdFVzZTogewpAQCAtNDYwNCwxMSArNDYyOCwyNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgIC8vIGlmIChidWNrZXQu
aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgLy8gICAgIGlmIChrZXkuaXNTdHJpbmcoKSkKKyAg
ICAgICAgICAgIC8vICAgICAgICAgPT4gc2xvdyBwYXRoCisgICAgICAgICAgICAvLyB9IGVsc2Ug
aWYgKGJ1Y2tldC5pc0hlYXBCaWdJbnQoKSkgeworICAgICAgICAgICAgLy8gICAgIGlmIChrZXku
aXNIZWFwQmlnSW50KCkpCisgICAgICAgICAgICAvLyAgICAgICAgID0+IHNsb3cgcGF0aAorICAg
ICAgICAgICAgLy8gfQogICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRHUFIsIGtleUdQUikpOwogICAgICAgICAgICAgbG9v
cEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGJ1Y2tldEdQ
UikpKTsKLSAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90U3Ry
aW5nKGJ1Y2tldEdQUikpOworCisgICAgICAgICAgICBhdXRvIGlzQnVja2V0U3RyaW5nID0gbV9q
aXQuYnJhbmNoSWZTdHJpbmcoYnVja2V0R1BSKTsKKyAgICAgICAgICAgIGxvb3BBcm91bmQuYXBw
ZW5kKG1faml0LmJyYW5jaElmTm90SGVhcEJpZ0ludChidWNrZXRHUFIpKTsKKworICAgICAgICAg
ICAgLy8gYnVja2V0IGlzIEhlYXBCaWdJbnQuCisgICAgICAgICAgICBzbG93UGF0aENhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkhlYXBCaWdJbnQoa2V5R1BSKSk7CisgICAgICAgICAgICBsb29w
QXJvdW5kLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgICAgICAvLyBidWNrZXQgaXMg
U3RyaW5nLgorICAgICAgICAgICAgaXNCdWNrZXRTdHJpbmcubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoa2V5R1BSKSk7
Ci0gICAgICAgICAgICAvLyBUaGV5J3JlIGJvdGggc3RyaW5ncy4KICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtNDYxOSw2ICs0NjU4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEhlYXBCaWdJ
bnRVc2U6IHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIpKTsgLy8gVGhleSdyZSBkZWZpbml0ZWx5
IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVja2V0IHdlIHdlcmUgbG9va2luZyBmb3Ih
CisgICAgICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNW
YWx1ZVJlZ3MoYnVja2V0R1BSKSkpOworICAgICAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9q
aXQuYnJhbmNoSWZOb3RIZWFwQmlnSW50KGJ1Y2tldEdQUikpOworICAgICAgICAgICAgc2xvd1Bh
dGhDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeyAKICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIp
KTsgLy8gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVj
a2V0IHdlIHdlcmUgbG9va2luZyBmb3IhCiAgICAgICAgICAgICAvLyBUaGUgaW5wdXQga2V5IGFu
ZCBidWNrZXQncyBrZXkgYXJlIGFscmVhZHkgbm9ybWFsaXplZC4gU28gaWYgNjQtYml0IGNvbXBh
cmUgZmFpbHMgYW5kIG9uZSBpcyBub3QgYSBjZWxsLCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVx
dWFsLgpAQCAtNDYyNiwxMSArNDY3MiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAvLyBmaXJzdCBpcyBhIGNlbGwgaGVyZS4KICAgICAg
ICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVn
cyhrZXlHUFIpKSk7CiAgICAgICAgICAgICAvLyBCb3RoIGFyZSBjZWxscyBoZXJlLgotICAgICAg
ICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoYnVja2V0R1BS
KSk7Ci0gICAgICAgICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcgaGVyZS4KLSAgICAgICAg
ICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmU3RyaW5nKGtleUdQUikpOwot
ICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGlzIGEgc3RyaW5nLCBidXQgdGhlIHNlY29uZCBpcyBu
b3QsIHdlIGNvbnRpbnVlIHRvIGxvb3AgYXJvdW5kLgorICAgICAgICAgICAgYXV0byBpc0J1Y2tl
dFN0cmluZyA9IG1faml0LmJyYW5jaElmU3RyaW5nKGJ1Y2tldEdQUik7CisgICAgICAgICAgICAv
LyBidWNrZXQgaXMgbm90IFN0cmluZy4KKyAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1f
aml0LmJyYW5jaElmTm90SGVhcEJpZ0ludChidWNrZXRHUFIpKTsKKyAgICAgICAgICAgIC8vIGJ1
Y2tldCBpcyBIZWFwQmlnSW50LgorICAgICAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoSWZIZWFwQmlnSW50KGtleUdQUikpOwogICAgICAgICAgICAgbG9vcEFyb3VuZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIC8vIGJ1Y2tldCBpcyBTdHJpbmcuCisg
ICAgICAgICAgICBpc0J1Y2tldFN0cmluZy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBsb29w
QXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhrZXlHUFIpKTsKKyAgICAgICAg
ICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGFjYTllNDRiZGFhODQ0OTg4NDQxYTlkNzk3
YTFkYzY5OGVlZDc5MGIuLmI4NjI0NThiMmEyOGQ0YmZhNmM1NDY0ZmM3NjM1YTczODliOTA4N2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAg
LTExMjQ0LDYgKzExMjQ0LDkgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGNhc2UgQmlnSW50MzJVc2U6Cisj
ZW5kaWYKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgICAgICBjYXNlIEludDMyVXNlOgog
ICAgICAgICBjYXNlIFN5bWJvbFVzZToKQEAgLTExMjU0LDkgKzExMjU3LDE3IEBAIGNsYXNzIExv
d2VyREZHVG9CMyB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBj
YXNlIEhlYXBCaWdJbnRVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBrZXkgPSBsb3dIZWFwQmln
SW50KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRv
SW50MzIodm1DYWxsKEludDY0LCBvcGVyYXRpb25NYXBIYXNoLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCBrZXkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAg
ICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0hlYXBCaWdJbnRDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZ0hlYXBC
aWdJbnRDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTI2OCwxMiArMTEyNzksMTkgQEAg
Y2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0cmluZ1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihtYXBIYXNoU3RyaW5nKHZhbHVlLCBtX25vZGUtPmNoaWxkMSgp
KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdFN0cmluZywgaXNIZWFwQmlnSW50Q2FzZSk7CisgICAgICAgICAgICBt
X291dC5icmFuY2goaXNIZWFwQmlnSW50KHZhbHVlLCAocHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MSgpKSAmIH5TcGVjU3RyaW5nKSksIHVuc3VyZShpc0hlYXBCaWdJbnRDYXNlKSwgdW5zdXJlKG5v
dFN0cmluZ0hlYXBCaWdJbnRDYXNlKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlz
SGVhcEJpZ0ludENhc2UsIG5vdFN0cmluZ0hlYXBCaWdJbnRDYXNlKTsKKyAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGhlYXBCaWdJbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY2FzdFRv
SW50MzIodm1DYWxsKEludDY0LCBvcGVyYXRpb25NYXBIYXNoLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCB2YWx1ZSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90U3RyaW5nSGVhcEJpZ0ludENhc2UsIGNv
bnRpbnVhdGlvbik7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RTdHJpbmdSZXN1bHQg
PSBtX291dC5hbmNob3Iod2FuZ3NJbnQ2NEhhc2godmFsdWUpKTsKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5waGkoSW50MzIs
IHN0cmluZ1Jlc3VsdCwgbm90U3RyaW5nUmVzdWx0KSk7CisgICAgICAgICAgICBzZXRJbnQzMiht
X291dC5waGkoSW50MzIsIHN0cmluZ1Jlc3VsdCwgaGVhcEJpZ0ludFJlc3VsdCwgbm90U3RyaW5n
UmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTEyOTQsMTYg
KzExMzEyLDIwIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRI
YXNoID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90U3RyaW5nQ2FzZSA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIG5vbkVtcHR5U3RyaW5nQ2Fz
ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAg
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2Vs
bENhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIG5vdFN0
cmluZ0Nhc2UpOwogICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5lcXVhbChtX291dC5s
b2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwgbV9vdXQu
Y29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkp
OworICAgICAgICAgICAgaXNTdHJpbmcsIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUobm90
U3RyaW5nQ2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZ0Nhc2UsIGlz
U3RyaW5nQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0hlYXBCaWdJbnQodmFsdWUsIChw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNTdHJpbmcpKSwgdW5zdXJlKHNsb3dD
YXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlz
U3RyaW5nQ2FzZSwgbm9uRW1wdHlTdHJpbmdDYXNlKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Um9wZVN0cmluZyh2YWx1ZSwgbV9ub2RlLT5jaGlsZDEoKSksIHJhcmVseShzbG93Q2FzZSksIHVz
dWFsbHkobm9uRW1wdHlTdHJpbmdDYXNlKSk7CkBAIC0xMTMzMSwxNiArMTEzNTMsMjkgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICB7CiAgICAgICAgIEFTU0VSVChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKIAorICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxD
YXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2Ug
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc0hlYXBCaWdJbnRDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbm90SW50MzJOdW1iZXJDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbm90TmFOQ2FzZSA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRpYmxlQ2FzZSA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoaXNOdW1iZXJDYXNlKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoaXNDZWxsQ2FzZSk7CiAKICAgICAg
ICAgTFZhbHVlIGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Ioa2V5KTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKGlzTm90Q2VsbChrZXksIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1
bnN1cmUobm90Q2VsbENhc2UpLCB1bnN1cmUoaXNDZWxsQ2FzZSkpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzSGVhcEJpZ0ludENhc2UpOworICAgICAgICBtX291dC5i
cmFuY2goaXNOb3RIZWFwQmlnSW50KGtleSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUo
aXNIZWFwQmlnSW50Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzSGVhcEJpZ0lu
dENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYmlnSW50UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTm9ybWFsaXplTWFwS2V5LCBt
X3ZtVmFsdWUsIGtleSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGlzTnVtYmVyQ2FzZSk7CiAgICAgICAg
IG1fb3V0LmJyYW5jaChpc05vdE51bWJlcihrZXkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKGlzTnVtYmVyQ2FzZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzTnVtYmVyQ2Fz
ZSwgbm90SW50MzJOdW1iZXJDYXNlKTsKQEAgLTExMzYyLDcgKzExMzk3LDcgQEAgY2xhc3MgTG93
ZXJERkdUb0IzIHsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgbm9ybWFsaXplZE5hTlJlc3VsdCwgZG91
YmxlUmVzdWx0LCBib3hlZEludFJlc3VsdCkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShJbnQ2NCwgZmFzdFJlc3VsdCwgYmlnSW50UmVzdWx0LCBub3JtYWxpemVkTmFOUmVzdWx0LCBk
b3VibGVSZXN1bHQsIGJveGVkSW50UmVzdWx0KSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxl
R2V0TWFwQnVja2V0KCkKQEAgLTExNDE4LDYgKzExNDUzLDkgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQogICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+Y2hpbGQyKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgICAgIGNhc2UgQmlnSW50MzJVc2U6CisjZW5kaWYKICAgICAgICAg
Y2FzZSBJbnQzMlVzZToKICAgICAgICAgY2FzZSBTeW1ib2xVc2U6CiAgICAgICAgIGNhc2UgT2Jq
ZWN0VXNlOiB7CkBAIC0xMTQ0MSwxMCArMTE0NzksMjggQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBIZWFwQmlnSW50VXNl
OiB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RCaXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc0NlbGwgPSBtX291dC5uZXdC
bG9jaygpOworCisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoa2V5LCBidWNr
ZXRLZXkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90
Qml0RXF1YWwpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Qml0RXF1YWwsIGJ1
Y2tldEtleUlzQ2VsbCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tldEtl
eSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzQ2VsbCksIHVuc3VyZShsb29w
QXJvdW5kKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzQ2VsbCwg
bG9vcEFyb3VuZCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaXNIZWFwQmlnSW50KGJ1Y2tl
dEtleSksCisgICAgICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91
bmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2VsbFVz
ZTogewogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Qml0RXF1YWwgPSBtX291dC5uZXdCbG9j
aygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNDZWxsID0gbV9vdXQubmV3
QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzU3RyaW5nID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzTm90U3Ry
aW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtl
eUlzSGVhcEJpZ0ludCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tldEtleSksCiAgICAgICAgICAgICAgICAgdW5zdXJl
KGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RCaXRFcXVhbCkpOwpAQCAtMTE0NTUsMTAgKzExNTEx
LDE4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGJ1Y2tldEtleUlzQ2VsbCwgYnVja2V0S2V5SXNTdHJpbmcpOwogICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzU3RyaW5nKGJ1Y2tldEtleSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGJ1Y2tl
dEtleUlzU3RyaW5nKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKyAgICAgICAgICAgICAgICB1bnN1
cmUoYnVja2V0S2V5SXNTdHJpbmcpLCB1bnN1cmUoYnVja2V0S2V5SXNOb3RTdHJpbmcpKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleUlz
Tm90U3RyaW5nKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZyhrZXksIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDIoKSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShzbG93UGF0
aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1
Y2tldEtleUlzTm90U3RyaW5nLCBidWNrZXRLZXlJc0hlYXBCaWdJbnQpOworICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKGlzSGVhcEJpZ0ludChidWNrZXRLZXkpLAorICAgICAgICAgICAgICAgIHVu
c3VyZShidWNrZXRLZXlJc0hlYXBCaWdJbnQpLCB1bnN1cmUobG9vcEFyb3VuZCkpOwogCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc1N0cmluZywgbG9vcEFyb3VuZCk7Ci0g
ICAgICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGJ1Y2tldEtleUlzSGVhcEJpZ0ludCwgbG9vcEFyb3VuZCk7CisgICAgICAgICAg
ICBtX291dC5icmFuY2goaXNIZWFwQmlnSW50KGtleSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MigpKSksCiAgICAgICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91
bmQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTQ2Nyw2ICsxMTUzMSw4
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRL
ZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgYm90
aEFyZUNlbGxzID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJ1
Y2tldEtleUlzU3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGJ1Y2tldEtleUlzTm90U3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzSGVhcEJpZ0ludCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAK
ICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tldEtleSksCiAg
ICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RCaXRFcXVhbCkp
OwpAQCAtMTE0ODEsMTAgKzExNTQ3LDE4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOwog
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKGJ1Y2tldEtleSksCi0gICAgICAgICAg
ICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzU3RyaW5nKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKyAg
ICAgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNTdHJpbmcpLCB1bnN1cmUoYnVja2V0S2V5
SXNOb3RTdHJpbmcpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNT
dHJpbmcsIGJ1Y2tldEtleUlzTm90U3RyaW5nKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c1N0cmluZyhrZXksIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDIoKSkpLAorICAgICAgICAgICAg
ICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzTm90U3RyaW5nLCBidWNrZXRLZXlJc0hlYXBCaWdJ
bnQpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzSGVhcEJpZ0ludChidWNrZXRLZXkpLAor
ICAgICAgICAgICAgICAgIHVuc3VyZShidWNrZXRLZXlJc0hlYXBCaWdJbnQpLCB1bnN1cmUobG9v
cEFyb3VuZCkpOwogCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc1N0cmlu
ZywgbG9vcEFyb3VuZCk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzSGVhcEJpZ0ludCwgbG9vcEFy
b3VuZCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaXNIZWFwQmlnSW50KGtleSwgcHJvdmVu
VHlwZShtX25vZGUtPmNoaWxkMigpKSksCiAgICAgICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRo
KSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAppbmRleCBlYzNmZWI2
ZTcwMzBmYTBjMGZlNjVhMzlhY2Q1YjI4NzdjZThkODA2Li5jOTc3Y2RjY2IyOTgzZmFjYTA3ZjA1
N2Q0YzgzNjUyODEzYjIzNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IYXNoTWFwSW1wbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmgKQEAgLTI0Myw4ICsyNDMsMTMgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9v
bCBhcmVLZXlzRXF1YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhLAog
Ly8gS2VlcCBpbiBzeW5jIHdpdGggdGhlIGltcGxlbWVudGF0aW9uIG9mIERGRyBhbmQgRlRMIG5v
cm1hbGl6YXRpb24uCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbm9ybWFsaXplTWFwS2V5KEpTVmFs
dWUga2V5KQogewotICAgIGlmICgha2V5LmlzTnVtYmVyKCkpCisgICAgaWYgKCFrZXkuaXNOdW1i
ZXIoKSkgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgaWYgKGtleS5pc0hlYXBCaWdJbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihrZXkuYXNIZWFwQmln
SW50KCkpOworI2VuZGlmCiAgICAgICAgIHJldHVybiBrZXk7CisgICAgfQogCiAgICAgaWYgKGtl
eS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBrZXk7CkBAIC0yODcsNiArMjkyLDkgQEAgQUxX
QVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVk0mIHZtLCBKU1ZhbHVlIHYKICAgICAgICAgcmV0dXJuIHd0ZlN0cmluZy5pbXBsKCktPmhh
c2goKTsKICAgICB9CiAKKyAgICBpZiAodmFsdWUuaXNIZWFwQmlnSW50KCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZS5hc0hlYXBCaWdJbnQoKS0+Y29uY3VycmVudEhhc2goKTsKKwogICAgIHJldHVy
biB3YW5nc0ludDY0SGFzaChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKIH0KIApAQCAtMzAzLDYg
KzMxMSw5IEBAIEFMV0FZU19JTkxJTkUgT3B0aW9uYWw8dWludDMyX3Q+IGNvbmN1cnJlbnRKU01h
cEhhc2goSlNWYWx1ZSBrZXkpCiAgICAgICAgIHJldHVybiBpbXBsLT5jb25jdXJyZW50SGFzaCgp
OwogICAgIH0KIAorICAgIGlmIChrZXkuaXNIZWFwQmlnSW50KCkpCisgICAgICAgIHJldHVybiBr
ZXkuYXNIZWFwQmlnSW50KCktPmNvbmN1cnJlbnRIYXNoKCk7CisKICAgICB1aW50NjRfdCByYXdW
YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShrZXkpOwogICAgIHJldHVybiB3YW5nc0ludDY0SGFzaChy
YXdWYWx1ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
aW5kZXggMzJhMzc1ZDk2ZGU5NDA3N2E2ZmUxNTllMTBjZjE4OGI4NWZmZTQxMi4uYTk4MzM5OWU3
ZDk1MmRlNjczYTI1YTI4YzRhZTdkYmUzN2VhMWE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQmlnSW50LmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIlBhcnNl
SW50LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MzAsMzEgKzQzMSw2IEBAIEFMV0FZU19JTkxJTkUgSlNC
aWdJbnQ6OkltcGxSZXN1bHQ6OkltcGxSZXN1bHQoSlNWYWx1ZSB2YWx1ZSkKICAgICA6IHBheWxv
YWQodmFsdWUpCiB7IH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252ZXJ0
VG9CaWdJbnQzMihKU0JpZ0ludCogYmlnSW50KQotewotI2lmIFVTRShCSUdJTlQzMikKLSAgICBp
ZiAoVU5MSUtFTFkoIWJpZ0ludCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0KLSAgICBp
ZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7Ci0gICAgICAgIGlmICghYmlnSW50LT5sZW5ndGgo
KSkKLSAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwotICAgICAgICBKU0JpZ0ludDo6
RGlnaXQgZGlnaXQgPSBiaWdJbnQtPmRpZ2l0KDApOwotICAgICAgICBpZiAoYmlnSW50LT5zaWdu
KCkpIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbWF4VmFsdWUgPSAt
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
OwotICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZhbHVlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KC1zdGF0aWNfY2FzdDxpbnQ2NF90
PihkaWdpdCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDY0X3QgbWF4VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOwotICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZh
bHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KGRpZ2l0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBiaWdJ
bnQ7Ci19Ci0KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdHJ5Q29udmVydFRvQmlnSW50
MzIoSlNCaWdJbnQ6OkltcGxSZXN1bHQgaW1wbFJlc3VsdCkKIHsKICAgICBpZiAoIWltcGxSZXN1
bHQucGF5bG9hZCkKQEAgLTMwNzMsNCArMzA0OSwxMyBAQCBKU1ZhbHVlIEpTQmlnSW50Ojphc1Vp
bnROKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IG4sIGludDMyX3QgYmln
SQogfQogI2VuZGlmCiAKK3Vuc2lnbmVkIEpTQmlnSW50Ojpjb25jdXJyZW50SGFzaCgpCit7Cisg
ICAgSGFzaGVyIGhhc2hlcjsKKyAgICBXVEY6OmFkZChoYXNoZXIsIG1fc2lnbik7CisgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoKCk7ICsraW5kZXgpCisgICAgICAg
IFdURjo6YWRkKGhhc2hlciwgZGlnaXQoaW5kZXgpKTsKKyAgICByZXR1cm4gaGFzaGVyLmhhc2go
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCaWdJbnQuaAppbmRleCBiNTg0ZmJiZWVhNGZmNTlmY2FmNmU4OGQ5MjVmNDE2NDMwYmY1Yzc4
Li4yNDYwZGQ4ZDY0NDI0MzUxYzFlMjQzM2NkZGFhNDkzODRiYmI4NGNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKQEAgLTQyNyw2ICs0MjcsOCBAQCBjbGFzcyBK
U0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
QmlnSW50KiByaWdodFRyaW0oSlNHbG9iYWxPYmplY3QqKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU0JpZ0ludCogdHJ5UmlnaHRUcmltKFZNJik7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB1
bnNpZ25lZCBjb25jdXJyZW50SGFzaCgpOworCiBwcml2YXRlOgogICAgIEpTQmlnSW50KFZNJiwg
U3RydWN0dXJlKiwgRGlnaXQqLCB1bnNpZ25lZCBsZW5ndGgpOwogCkBAIC02MDgsNCArNjEwLDI5
IEBAIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgaW52ZXJ0QmlnSW50
Q29tcGFyZVJlc3VsdChKU0JpZ0ludDo6Q29tCiAgICAgfQogfQogCitBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgdHJ5Q29udmVydFRvQmlnSW50MzIoSlNCaWdJbnQqIGJpZ0ludCkKK3sKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOworCisgICAgaWYgKGJpZ0ludC0+bGVuZ3RoKCkgPD0gMSkgeworICAgICAgICBpZiAo
IWJpZ0ludC0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKKyAg
ICAgICAgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0ID0gYmlnSW50LT5kaWdpdCgwKTsKKyAgICAgICAg
aWYgKGJpZ0ludC0+c2lnbigpKSB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2
NF90IG1heFZhbHVlID0gLXN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKTsKKyAgICAgICAgICAgIGlmIChkaWdpdCA8PSBtYXhWYWx1ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pigtc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oZGlnaXQpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1heFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIGlm
IChkaWdpdCA8PSBtYXhWYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihz
dGF0aWNfY2FzdDxpbnQzMl90PihkaWdpdCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gYmlnSW50OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oIGIvU291cmNlL1dURi93dGYvSGFzaGVyLmgKaW5kZXgg
ODc0MjQ2YzNjMjdkYTBhYTVjODk1YWUwODY3OGQ1ZDQ0NGE4MmFiZC4uYWQ0ZDg1MDZmMjk2MWE3
OGI0YTdlNzVjZmVkMGJhMGZlN2I0NjYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFz
aGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaGVyLmgKQEAgLTc1LDYgKzc1LDExIEBAIGNs
YXNzIEhhc2hlciB7CiAgICAgICAgIGhhc2hlci5tX3VuZGVybHlpbmdIYXNoZXIuYWRkQ2hhcmFj
dGVyc0Fzc3VtaW5nQWxpZ25lZChzaXplZEludGVnZXIsIHNpemVkSW50ZWdlciA+PiAxNik7CiAg
ICAgfQogCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV91bmRlcmx5aW5nSGFzaGVyLmhhc2goKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5n
SGFzaGVyIG1fdW5kZXJseWluZ0hhc2hlcjsKIH07CkBAIC05MSw2ICs5NiwxMSBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBTaWduZWRBcml0aG1ldGljPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2ln
bmVkPFNpZ25lZEFyaXRobQogICAgIGFkZChoYXNoZXIsIHN0YXRpY19jYXN0PHN0ZDo6bWFrZV91
bnNpZ25lZF90PFNpZ25lZEFyaXRobWV0aWM+PihudW1iZXIpKTsKIH0KIAoraW5saW5lIHZvaWQg
YWRkKEhhc2hlciYgaGFzaGVyLCBib29sIGJvb2xlYW4pCit7CisgICAgYWRkKGhhc2hlciwgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oYm9vbGVhbikpOworfQorCiBpbmxpbmUgdm9pZCBhZGQoSGFzaGVy
JiBoYXNoZXIsIGRvdWJsZSBudW1iZXIpCiB7CiAgICAgYWRkKGhhc2hlciwgYml0d2lzZV9jYXN0
PHVpbnQ2NF90PihudW1iZXIpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDZlZjVhMTMwZmNlNWE4ZDYzMzk4M2U3
NWRlYjZiY2M4ODg0ZjBlODEuLjExMjQ0YmZkNGIwNjc5MmNmNWM5NWJiNmVkYzk5YjMyN2E3ZDll
NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcApAQCAtMzA1NCw3ICszMDU0LDcgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6
ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZs
b3coYmlnSW50KTsKLSAgICAgICAgICAgIHJldHVybiBiaWdJbnQ7CisgICAgICAgICAgICByZXR1
cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYmlnSW50KTsKICAgICAgICAgfQogI2VuZGlmCiAgICAg
ICAgIEpTQmlnSW50KiBiaWdJbnQgPSBudWxscHRyOwpAQCAtMzA5NCw3ICszMDk0LDcgQEAgY2xh
c3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKICAgICAgICAgfQogICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9u
T3ZlcmZsb3coYmlnSW50KTsKLSAgICAgICAgcmV0dXJuIGJpZ0ludDsKKyAgICAgICAgcmV0dXJu
IHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpZ0ludCk7CiAgICAgfQogCiAgICAgSlNWYWx1ZSByZWFk
VGVybWluYWwoKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5n
ZUxvZwppbmRleCAzOWMzZjNkZjRiNWRlNWRhYzNjNzYyNDk0MzlkODk0NzQxOWFhNWE0Li41Nzhk
ZmQxZWIzOTQwMmZiMmRkNGFiZjVjYzVkYTlkNDczZDFlZWRiIDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIw
LTA5LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pT
Q10gQmlnSW50IHNob3VsZCB3b3JrIHdpdGggTWFwIC8gU2V0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2NjcKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzY5MTA3MjIxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogc3RyZXNzL2JpZ2ludC1hbmQtbWFwLXNldC5qczogQWRkZWQuCisgICAgICAgIChz
aG91bGRCZSk6CisgICAgICAgIChvcGFxdWUxbik6CisgICAgICAgICh0ZXN0TWFwKToKKyAgICAg
ICAgKGxldC5zZXQgbmV3KToKKyAgICAgICAgKiBzdHJlc3MvYmlnaW50LXN0cmluZy1tYXAtc2V0
LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRlc3RNYXApOgorICAg
ICAgICAqIHN0cmVzcy9iaWdpbnQzMi1tYXAtc2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3Vs
ZEJlKToKKyAgICAgICAgKHRlc3RNYXApOgorCiAyMDIwLTA5LTE4ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gR2VuZXJhdG9yIGRlY2xhcmF0aW9u
IHNob3VsZCBub3QgYmUgYWxsb3dlZCBpbiBzaW5nbGUgc3RhdGVtZW50IGNvbnRleHQKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL2JpZ2ludC1hbmQtbWFwLXNldC5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL2JpZ2ludC1hbmQtbWFwLXNldC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjFjY2VhOGEwZDU4Yzg0ZTQ2
ZTIzNWQ4NTMwMDk4NDFjYzc4YzI3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
YmlnaW50LWFuZC1tYXAtc2V0LmpzCkBAIC0wLDAgKzEsNDQgQEAKK2Z1bmN0aW9uIHNob3VsZEJl
KGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlv
biBvcGFxdWUxbigpCit7CisgICAgcmV0dXJuIDFuOworfQorbm9JbmxpbmUob3BhcXVlMW4pOwor
CitmdW5jdGlvbiB0ZXN0TWFwKG1hcCkgeworICAgIG1hcC5zZXQoMW4sIDQyKTsKKyAgICBzaG91
bGRCZShtYXAuaGFzKDFuKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUobWFwLmhhcyhvcGFxdWUxbigp
KSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUobWFwLmhhcyhjcmVhdGVIZWFwQmlnSW50KG9wYXF1ZTFu
KCkpKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUobWFwLmdldCgxbiksIDQyKTsKKyAgICBzaG91bGRC
ZShtYXAuZ2V0KG9wYXF1ZTFuKCkpLCA0Mik7CisgICAgc2hvdWxkQmUobWFwLmdldChjcmVhdGVI
ZWFwQmlnSW50KG9wYXF1ZTFuKCkpKSwgNDIpOworICAgIG1hcC5zZXQoMW4sIDQwKTsKKyAgICBz
aG91bGRCZShtYXAuZ2V0KDFuKSwgNDApOworICAgIHNob3VsZEJlKG1hcC5nZXQob3BhcXVlMW4o
KSksIDQwKTsKKyAgICBzaG91bGRCZShtYXAuZ2V0KGNyZWF0ZUhlYXBCaWdJbnQob3BhcXVlMW4o
KSkpLCA0MCk7Cit9Citub0lubGluZSh0ZXN0TWFwKTsKKworZnVuY3Rpb24gdGVzdFNldChzZXQp
IHsKKyAgICBzZXQuYWRkKDFuKTsKKyAgICBzaG91bGRCZShzZXQuaGFzKDFuKSwgdHJ1ZSk7Cisg
ICAgc2hvdWxkQmUoc2V0LmhhcyhvcGFxdWUxbigpKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUoc2V0
LmhhcyhjcmVhdGVIZWFwQmlnSW50KG9wYXF1ZTFuKCkpKSwgdHJ1ZSk7CisgICAgc2V0LmRlbGV0
ZShjcmVhdGVIZWFwQmlnSW50KG9wYXF1ZTFuKCkpKTsKKyAgICBzaG91bGRCZShzZXQuaGFzKDFu
KSwgZmFsc2UpOworICAgIHNob3VsZEJlKHNldC5oYXMob3BhcXVlMW4oKSksIGZhbHNlKTsKKyAg
ICBzaG91bGRCZShzZXQuaGFzKGNyZWF0ZUhlYXBCaWdJbnQob3BhcXVlMW4oKSkpLCBmYWxzZSk7
Cit9Citub0lubGluZSh0ZXN0U2V0KTsKKworbGV0IG1hcCA9IG5ldyBNYXAoKTsKK2xldCBzZXQg
PSBuZXcgU2V0KCk7Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgdGVzdE1h
cChtYXApOworICAgIHRlc3RTZXQoc2V0KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2JpZ2ludC1zdHJpbmctbWFwLXNldC5qcyBiL0pTVGVzdHMvc3RyZXNzL2JpZ2ludC1zdHJpbmct
bWFwLXNldC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGQ4ZDI5OTIxNDc4OThiYzM3YTA4M2VkZWFmZTlkYzAy
OTA3MTNlCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50LXN0cmluZy1t
YXAtc2V0LmpzCkBAIC0wLDAgKzEsNzcgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhw
ZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiB0ZXN0TWFwKG1h
cCwga2V5KQoreworICAgIHJldHVybiBtYXAuaGFzKGtleSk7Cit9Citub0lubGluZSh0ZXN0TWFw
KTsKKworZnVuY3Rpb24gdGVzdFNldChzZXQsIGtleSkKK3sKKyAgICByZXR1cm4gc2V0Lmhhcyhr
ZXkpOworfQorbm9JbmxpbmUodGVzdFNldCk7CisKK2xldCBtYXAgPSBuZXcgTWFwKCk7CittYXAu
c2V0KCJIZXkiLCAiSGV5Iik7CittYXAuc2V0KG51bGwsIG51bGwpOworbWFwLnNldCgxbiwgMW4p
OworbWFwLnNldCgybiwgMm4pOworbWFwLnNldCgweGZmZmZmZmZmZmZmZmZmZmZuLCAweGZmZmZm
ZmZmZmZmZmZmZmZuKTsKK21hcC5zZXQoIkhlbGxvIiwgIkhlbGxvIik7CisKK2xldCBzZXQgPSBu
ZXcgU2V0KCk7CitzZXQuYWRkKCJIZXkiKTsKK3NldC5hZGQobnVsbCk7CitzZXQuYWRkKDFuKTsK
K3NldC5hZGQoMm4pOworc2V0LmFkZCgweGZmZmZmZmZmZmZmZmZmZmZuKTsKK3NldC5hZGQoIkhl
bGxvIik7CisKKy8vIFN0cmluZworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAg
IHNob3VsZEJlKHRlc3RNYXAobWFwLCAiSGV5IiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RT
ZXQoc2V0LCAiSGV5IiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCAiSGV5MSIp
LCBmYWxzZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsICJIZXkxIiksIGZhbHNlKTsKKyAg
ICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgIkhlbGxvIiksIHRydWUpOworICAgIHNob3VsZEJlKHRl
c3RTZXQoc2V0LCAiSGVsbG8iKSwgdHJ1ZSk7Cit9CisKKy8vIENlbGwKK2ZvciAobGV0IGkgPSAw
OyBpIDwgMWU0OyArK2kpIHsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgIkhleSIpLCB0cnVl
KTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgIkhleSIpLCB0cnVlKTsKKyAgICBzaG91bGRC
ZSh0ZXN0TWFwKG1hcCwgIkhleTEiKSwgZmFsc2UpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0
LCAiSGV5MSIpLCBmYWxzZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAsICJIZWxsbyIpLCB0
cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgIkhlbGxvIiksIHRydWUpOworICAgIHNo
b3VsZEJlKHRlc3RNYXAobWFwLCBjcmVhdGVIZWFwQmlnSW50KDB4ZmZmZmZmZmZmZmZmZmZmZm4p
KSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsIGNyZWF0ZUhlYXBCaWdJbnQoMHhm
ZmZmZmZmZmZmZmZmZmZmbikpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgY3Jl
YXRlSGVhcEJpZ0ludCgweDFmZmZmZmZmZmZmZmZmZmZmbikpLCBmYWxzZSk7CisgICAgc2hvdWxk
QmUodGVzdFNldChzZXQsIGNyZWF0ZUhlYXBCaWdJbnQoMHgxZmZmZmZmZmZmZmZmZmZmZm4pKSwg
ZmFsc2UpOworfQorCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgc2hvdWxk
QmUodGVzdE1hcChtYXAsICJIZXkiKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQs
ICJIZXkiKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAsICJIZXkxIiksIGZhbHNl
KTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgIkhleTEiKSwgZmFsc2UpOworICAgIHNob3Vs
ZEJlKHRlc3RNYXAobWFwLCAiSGVsbG8iKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChz
ZXQsICJIZWxsbyIpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgY3JlYXRlSGVh
cEJpZ0ludCgweGZmZmZmZmZmZmZmZmZmZmZuKSksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RT
ZXQoc2V0LCBjcmVhdGVIZWFwQmlnSW50KDB4ZmZmZmZmZmZmZmZmZmZmZm4pKSwgdHJ1ZSk7Cisg
ICAgc2hvdWxkQmUodGVzdE1hcChtYXAsIGNyZWF0ZUhlYXBCaWdJbnQoMHgxZmZmZmZmZmZmZmZm
ZmZmZm4pKSwgZmFsc2UpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCBjcmVhdGVIZWFwQmln
SW50KDB4MWZmZmZmZmZmZmZmZmZmZmZuKSksIGZhbHNlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFw
KG1hcCwgY3JlYXRlSGVhcEJpZ0ludCgxbikpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0
KHNldCwgY3JlYXRlSGVhcEJpZ0ludCgxbikpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFw
KG1hcCwgMW4pLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgMW4pLCB0cnVlKTsK
KyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgMm4pLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0
U2V0KHNldCwgMm4pLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgM24pLCBmYWxz
ZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsIDNuKSwgZmFsc2UpOworfQpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9zdHJlc3MvYmlnaW50MzItbWFwLXNldC5qcyBiL0pTVGVzdHMvc3RyZXNzL2Jp
Z2ludDMyLW1hcC1zZXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdkMGNlZDAxZTI1ZDcxNTEyY2IxY2MxZjE3
YjVhN2MzYmM5NjRhYwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2JpZ2ludDMy
LW1hcC1zZXQuanMKQEAgLTAsMCArMSw0MSBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBl
eHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNYXAo
bWFwLCBrZXkpCit7CisgICAgcmV0dXJuIG1hcC5oYXMoa2V5KTsKK30KK25vSW5saW5lKHRlc3RN
YXApOworCitmdW5jdGlvbiB0ZXN0U2V0KHNldCwga2V5KQoreworICAgIHJldHVybiBzZXQuaGFz
KGtleSk7Cit9Citub0lubGluZSh0ZXN0U2V0KTsKKworbGV0IG1hcCA9IG5ldyBNYXAoKTsKK21h
cC5zZXQoIkhleSIsICJIZXkiKTsKK21hcC5zZXQobnVsbCwgbnVsbCk7CittYXAuc2V0KDFuLCAx
bik7CittYXAuc2V0KDJuLCAybik7CittYXAuc2V0KDB4ZmZmZmZmZmZmZmZmZmZmZm4sIDB4ZmZm
ZmZmZmZmZmZmZmZmZm4pOworbWFwLnNldCgiSGVsbG8iLCAiSGVsbG8iKTsKKworbGV0IHNldCA9
IG5ldyBTZXQoKTsKK3NldC5hZGQoIkhleSIpOworc2V0LmFkZChudWxsKTsKK3NldC5hZGQoMW4p
Oworc2V0LmFkZCgybik7CitzZXQuYWRkKDB4ZmZmZmZmZmZmZmZmZmZmZm4pOworc2V0LmFkZCgi
SGVsbG8iKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgIHNob3VsZEJl
KHRlc3RNYXAobWFwLCAxbiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCAxbiks
IHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCAybiksIHRydWUpOworICAgIHNob3Vs
ZEJlKHRlc3RTZXQoc2V0LCAybiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCAz
biksIGZhbHNlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgM24pLCBmYWxzZSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409227</attachid>
            <date>2020-09-20 02:19:12 -0700</date>
            <delta_ts>2020-09-20 13:16:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216667-20200920021911.patch</filename>
            <type>text/plain</type>
            <size>41165</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MTEzMzM5MGZlN2VhNWI0ZDBmMTlmMDI2MDcyZTc0OWVjYzE3MmU0Li42ZDhlMGRiNjkwNTUwODgy
NmRjNzFhOTU1ZWEyNDMzMzMzOWVjY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBCaWdJbnQgc3VwcG9ydGVkIGluIE1hcCAvIFNldC4KKworICAgICAgICAxLiBJbiBOb3Jt
YWxpemVNYXBLZXksIHdlIGFsd2F5cyBhdHRlbXB0IHRvIGNvbnZlcnQgSGVhcEJpZ0ludCB0byBC
aWdJbnQzMiAoaWYgc3VwcG9ydGVkKS4gU28gd2UgZW5zdXJlIHRoYXQsCisgICAgICAgICAgICBu
b3JtYWxpemVkIEJpZ0ludCBoYXMgb25lIHVuaXF1ZSBmb3JtIGZvciBCaWdJbnQzMiByYW5nZS4g
VGhpcyBhbGxvd3MgdXMgdG8gdXNlIGhhc2hpbmcgZm9yIEJpZ0ludDMyIGJpdCBwYXR0ZXJuIGRp
cmVjdGx5LgorICAgICAgICAyLiBJbiBNYXBIYXNoLCBmb3IgQmlnSW50MzIsIHdlIGRpcmVjdGx5
IGhhcyB0aGUgSlNWYWx1ZSBiaXRzLiBGb3IgSGVhcEJpZ0ludCwgd2UgY2FsY3VsYXRlIGhhc2gg
dmlhIEhhc2hlci4KKyAgICAgICAgMy4gSW4gR2V0TWFwQnVja2V0LCB3ZSBjb25zaWRlciBIZWFw
QmlnSW50IGNhc2UgY29ycmVjdGx5LgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGlu
Z1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9ybWFsaXplTWFwS2V5KToKKyAgICAgICAgKiBk
ZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTm9ybWFsaXplTWFwS2V5KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWFwSGFzaCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb3JtYWxpemVNYXBLZXkpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TWFwQnVja2V0KToK
KyAgICAgICAgKiBydW50aW1lL0hhc2hNYXBJbXBsLmg6CisgICAgICAgIChKU0M6Om5vcm1hbGl6
ZU1hcEtleSk6CisgICAgICAgIChKU0M6OmpzTWFwSGFzaCk6CisgICAgICAgIChKU0M6OmNvbmN1
cnJlbnRKU01hcEhhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6Y29uY3VycmVudEhhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvSlNC
aWdJbnQuaDoKKyAgICAgICAgKEpTQzo6dHJ5Q29udmVydFRvQmlnSW50MzIpOgorCiAyMDIwLTA5
LTE4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
R2VuZXJhdG9yIGRlY2xhcmF0aW9uIHNob3VsZCBub3QgYmUgYWxsb3dlZCBpbiBzaW5nbGUgc3Rh
dGVtZW50IGNvbnRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggNjBkMGY3MzQyYzJhNmFhYmM1MWU3ZDRhZGIyOGI1YTkyNzgy
YTYwMC4uNzk4NWUyNTFlNjI2ZWNmOTA2YThiNzUwYmJlZWY5OGJkNmVmOGUxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaGVy
Lmg6CisgICAgICAgIChXVEY6Okhhc2hlcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OmFk
ZCk6CisKIDIwMjAtMDktMTggIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4K
IAogICAgICAgICBbV2ViR1BVXSBBZGQgRU5BQkxFKFdITFNMX0NPTVBJTEVSKSBndWFyZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDc0ODQxOTExNGFmOWM2ZGFjYWI4MTExZWNhNjMwMTE0ZTA5M2IwZjUuLjg5MmQ2
ZWE2MzY5NWZkYjk4M2EzYjJmNTcxNGY1NTU0NDI1YmUzZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgor
CisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82OTEwNzIyMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTdHJvbmdseSBlbnN1cmUgdGhhdCBCaWdJbnQzMiBpcyBhbHdh
eXMgc2VsZWN0ZWQgc2luY2UgTWFwIC8gU2V0IGNvdWxkIHVzZSBpdCBhcyBhIGtleS4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEJpZ0ludCk6CisKIDIwMjAtMDktMTkgIEFu
ZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVu
dGF0aW9uIGZvciBBWElzb2xhdGVkT2JqZWN0OjpuZXh0U2libGluZyBhbmQgcHJldmlvdXNTaWJs
aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCmluZGV4IGQ5MDJmMjA3MmI2MTYzNmRhYWZjY2RkNmM0MzRl
NDFhM2IxNTNmZWQuLmNlNmExMzc4OWYyMTU1OGYzYjg1MGRkNGFlZjEzNTNhYWE4YWQ5NjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTEzODEsNyArMTM4MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2Ji
ZXJMaW1pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGVNYXliZU5vcm1hbGl6ZWQgPSAoU3BlY0Z1bGxOdW1iZXIgJiB+U3BlY0ludDMy
T25seSk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGVNYXliZU5vcm1hbGl6ZWQgPSAoU3Bl
Y0Z1bGxOdW1iZXIgJiB+U3BlY0ludDMyT25seSkgfCBTcGVjSGVhcEJpZ0ludDsKICAgICAgICAg
aWYgKCEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgdHlwZU1heWJlTm9ybWFsaXpl
ZCkpIHsKICAgICAgICAgICAgIG1fc3RhdGUuc2V0U2hvdWxkVHJ5Q29uc3RhbnRGb2xkaW5nKHRy
dWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAppbmRleCA1ZTJiZDljOTVlMDgyYjI4MDNjZmI5ZDkwM2I5NTYyNzNkOGZlMzI5
Li45NjcwMmUwOWZjYzVhZjc4Y2QyNzQ5OTYwNTI0MTIwZGNkNDEwZTQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApA
QCAtOTk0LDcgKzk5NCw3IEBAIGNsYXNzIENvbnN0YW50Rm9sZGluZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2FzZSBOb3JtYWxpemVNYXBLZXk6
IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlTWF5YmVOb3JtYWxpemVkID0g
KFNwZWNGdWxsTnVtYmVyICYgflNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHR5cGVNYXliZU5vcm1hbGl6ZWQgPSAoU3BlY0Z1bGxOdW1iZXIgJiB+U3BlY0lu
dDMyT25seSkgfCBTcGVjSGVhcEJpZ0ludDsKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUgJiB0eXBlTWF5YmVOb3JtYWxpemVkKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCmluZGV4IDE4Yjg4Mzk2OWI2OTBmMTNmNmZmYmZiN2Q3NTZiYjNjYTIyMDhjNzkuLjQy
NWRmYmU2ZjU4MTEzZjBiNmU4NmY4Zjc4MTExN2FhN2ViNTlkZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBib29sIGRvZXNHQyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTdXBlclNhbXBsZXJCZWdpbjoKICAg
ICBjYXNlIFN1cGVyU2FtcGxlckVuZDoKICAgICBjYXNlIENQVUludHJpbnNpYzoKLSAgICBjYXNl
IE5vcm1hbGl6ZU1hcEtleToKKyAgICBjYXNlIE5vcm1hbGl6ZU1hcEtleTogLy8gSGVhcEJpZ0lu
dCA9PiBCaWdJbnQzMiBjb252ZXJzaW9uIGRvZXMgbm90IGludm9sdmUgR0MuCiAgICAgY2FzZSBH
ZXRNYXBCdWNrZXRIZWFkOgogICAgIGNhc2UgR2V0TWFwQnVja2V0TmV4dDoKICAgICBjYXNlIExv
YWRLZXlGcm9tTWFwQnVja2V0OgpAQCAtNTE3LDYgKzUxNywxMCBAQCBib29sIGRvZXNHQyhHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgIGNh
c2UgU3ltYm9sVXNlOgogICAgICAgICBjYXNlIE9iamVjdFVzZToKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgICAgIGNhc2UgQmlnSW50MzJVc2U6CisjZW5kaWYKKyAgICAgICAgY2FzZSBIZWFwQmln
SW50VXNlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgLy8gV2UgbWlnaHQgcmVzb2x2ZSBhIHJvcGUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCBiNmMwYmI4YmE5OTBmZmYzNWMwMDNjODYw
MTdlZTA2NzM0MTBlMDM4Li4wMjk2Yjc3Zjg5ZjIzZjQxNTRiODYzMTBlMzA5YzgwZTIwY2Q4MGM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTIz
NzcsMTIgKzIzNzcsMTggQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAg
ICAgICAgICAgICAgZml4RWRnZTxCb29sZWFuVXNlPihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSkKICAg
ICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisjaWYgVVNF
KEJJR0lOVDMyKQorICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNw
ZWN1bGF0ZUludDMyKCkpCisgICAgICAgICAgICAgICAgZml4RWRnZTxCaWdJbnQzMlVzZT4obm9k
ZS0+Y2hpbGQyKCkpOworI2VuZGlmCiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlU3ltYm9sKCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxTeW1i
b2xVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPE9i
amVjdFVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hp
bGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8
U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlSGVhcEJpZ0ludCgpKQorICAgICAgICAgICAgICAgIGZp
eEVkZ2U8SGVhcEJpZ0ludFVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKICAgICAgICAgICAgICAg
ICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGVsc2UKQEAg
LTI0MzYsNiArMjQ0MiwxOCBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBoYXNlIHsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorI2lmIFVTRShCSUdJTlQzMikK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQmlnSW50MzIo
KSkgeworICAgICAgICAgICAgICAgIGZpeEVkZ2U8QmlnSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUhlYXBCaWdJbnQoKSkg
eworICAgICAgICAgICAgICAgIGZpeEVkZ2U8SGVhcEJpZ0ludFVzZT4obm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkgewogICAgICAgICAgICAg
ICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzk5NiwxMSArNDAxNCwxMyBAQCBjbGFzcyBGaXh1cFBoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKSB7Ci0gICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQmlnSW50MzIoKSkgeworICAgICAgICAg
ICAgZml4RWRnZTxCaWdJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
I2VuZGlmCiAKICAgICAgICAgZml4RWRnZTxVbnR5cGVkVXNlPihub2RlLT5jaGlsZDEoKSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXgg
MWRjNWI2NTljNmI0MWQxYmU3MDkzYTgzNzUzMTQ2YTMxZjYzNmU2OC4uZDRlOTI1MTMyYzFiNTJk
MGQ0ZWFiNjQ3N2ZhOWUwMTE2NzJhOGVkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCkBAIC0zMjEyLDYgKzMyMTIsMTQgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYXJOb25TdHJpY3QoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwKICAgICByZXR1cm4gcHV0RHluYW1pY1ZhcihnbG9iYWxPYmplY3QsIHZtLCBzY29w
ZSwgdmFsdWUsIGltcGwsIGdldFB1dEluZm9CaXRzLCBpc1N0cmljdE1vZGUpOwogfQogCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleShWTSogdm1Q
b2ludGVyLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sKKyAgICBWTSYgdm0gPSAqdm1Qb2ludGVy
OworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAg
ICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFt
ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShub3JtYWxpemVNYXBLZXkoSlNWYWx1ZTo6
ZGVjb2RlKGlucHV0KSkpOworfQorCiBVQ1BVU3RyaWN0SW50MzIgSklUX09QRVJBVElPTiBvcGVy
YXRpb25NYXBIYXNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGlucHV0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggZTI5YTRjZGJiZjljZDllYzU3YzM2
NDkzYzE5OTcxZTMyYmZiYWIyMC4uNTUxNzQ2MGE5NDM4MDhkZWZmYTYwZDlmMWMzYTE3ZmZhZGY1
N2E5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTI0
Myw2ICsyNDMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkludDMyVG9TdHJpbmdX
aXRoVmFsaWRSYWRpeChKU0dsb2JhbE9iamVjdCosIGludDMyXwogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25JbnQ1MlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgoSlNHbG9iYWxPYmplY3QqLCBp
bnQ2NF90LCBpbnQzMl90KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRG91YmxlVG9T
dHJpbmdXaXRoVmFsaWRSYWRpeChKU0dsb2JhbE9iamVjdCosIGRvdWJsZSwgaW50MzJfdCk7CiAK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm9ybWFsaXplTWFwS2V5KFZN
KiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpIFdURl9JTlRFUk5BTDsKIFVDUFVTdHJpY3RJbnQzMiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSBpbnB1dCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVj
a2V0KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggZTMwZDY2ZTA4MTlm
YzE0MTNlNmZjZDRhNjJiYzFkZTVlZDE1NWFjMC4uMDdkNzNiOWIxYjMxMTI4NzNkOGE5YTAzM2My
NDZkZTVkZWQwNjVlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKQEAgLTEyNTE3LDYgKzEyNTE3LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVOb3JtYWxpemVNYXBLZXkoTm9kZSogbm9kZSkKICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHBhc3NUaHJvdWdoQ2FzZXM7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBk
b25lQ2FzZXM7CiAKKyAgICBhdXRvIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChr
ZXlSZWdzKTsKKyAgICBwYXNzVGhyb3VnaENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEhl
YXBCaWdJbnQoa2V5UmVncy5wYXlsb2FkR1BSKCkpKTsKKyAgICBhdXRvIHNsb3dQYXRoID0gbV9q
aXQuanVtcCgpOworICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisKICAgICBwYXNzVGhyb3Vn
aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihrZXlSZWdzLCBzY3JhdGNoR1BS
KSk7CiAgICAgcGFzc1Rocm91Z2hDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihrZXlS
ZWdzKSk7CiAKQEAgLTEyNTM5LDYgKzEyNTQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU5vcm1hbGl6ZU1hcEtleShOb2RlKiBub2RlKQogCiAgICAgcGFzc1Rocm91Z2hDYXNlcy5s
aW5rKCZtX2ppdCk7CiAgICAgbV9qaXQubW92ZVZhbHVlUmVncyhrZXlSZWdzLCByZXN1bHRSZWdz
KTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleSwgcmVzdWx0UmVncywgJnZtKCksIGtleVJlZ3MpKTsK
IAogICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCmluZGV4IDAzOTMwN2YxMmQ5ZjU1MDFjZmI2M2EzYzNkMjNmMTEyYzYzNWQ5
NTMuLmYwOGY1NTIyMWNjYzgxN2RhMzQ2Y2ZlYzE5OTA5MjhlM2I4YzRiZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtNDQz
MSw2ICs0NDMxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
CiAgICAgY2FzZSBNYXBIYXNoOiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBjYXNlIEJpZ0ludDMyVXNlOgor
I2VuZGlmCiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2FzZSBJbnQzMlVzZToK
ICAgICAgICAgY2FzZSBTeW1ib2xVc2U6CkBAIC00NDUwLDYgKzQ0NTMsMjAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgc3RyaWN0SW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgIGNhc2UgSGVhcEJpZ0ludFVzZTogeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZUhlYXBCaWdJbnQo
bm9kZS0+Y2hpbGQxKCksIGlucHV0R1BSKTsKKworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKKyAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGlucHV0R1BSKTsKKyAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CisgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBj
YXNlIFN0cmluZ1VzZTogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgaW5wdXQo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNDQ3Miw4ICs0NDg5LDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmcobm9kZS0+Y2hpbGQxKCksIGlucHV0R1BSKTsKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIGF1dG8gaXNTdHJpbmcgPSBtX2ppdC5icmFuY2hJZlN0cmluZyhpbnB1dEdQ
Uik7CisgICAgICAgICAgICAgICAgYXV0byBpc0hlYXBCaWdJbnQgPSBtX2ppdC5icmFuY2hJZkhl
YXBCaWdJbnQoaW5wdXRHUFIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQud2FuZ3NJbnQ2NEhhc2gocmVzdWx0
R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbnB1dEdQUikpOwogICAgICAgICAgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgaXNTdHJpbmcubGlu
aygmbV9qaXQpOwogICAgICAgICAgICAgfQpAQCAtNDUxNSw2ICs0NTM0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZG9uZTsKICAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoaW5wdXRHUFIpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOworICAgICAgICBhdXRvIGlzSGVhcEJpZ0ludCA9IG1faml0LmJyYW5jaElmSGVhcEJp
Z0ludChpbnB1dEdQUik7CiAgICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RTdHJpbmcoaW5wdXRHUFIpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhpbnB1dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlc3Vs
dEdQUik7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZlJvcGVTdHJpbmdJ
bXBsKHJlc3VsdEdQUikpOwpAQCAtNDUyNiw2ICs0NTQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBzdHJhaWdodEhhc2gubGluaygmbV9qaXQp
OwogICAgICAgICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICBtX2pp
dC53YW5nc0ludDY0SGFzaChyZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25NYXBI
YXNoLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbnB1dEdQUikpOwog
ICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogCiAgICAgICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKQEAgLTQ1OTYsNiArNDYxNyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQogICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIEJvb2xl
YW5Vc2U6CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBjYXNlIEJpZ0ludDMyVXNlOgorI2Vu
ZGlmCiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgIGNhc2UgU3ltYm9sVXNlOgogICAg
ICAgICBjYXNlIE9iamVjdFVzZTogewpAQCAtNDYwNCwxMSArNDYyOCwyNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgIC8vIGlmIChidWNrZXQu
aXNTdHJpbmcoKSkgeworICAgICAgICAgICAgLy8gICAgIGlmIChrZXkuaXNTdHJpbmcoKSkKKyAg
ICAgICAgICAgIC8vICAgICAgICAgPT4gc2xvdyBwYXRoCisgICAgICAgICAgICAvLyB9IGVsc2Ug
aWYgKGJ1Y2tldC5pc0hlYXBCaWdJbnQoKSkgeworICAgICAgICAgICAgLy8gICAgIGlmIChrZXku
aXNIZWFwQmlnSW50KCkpCisgICAgICAgICAgICAvLyAgICAgICAgID0+IHNsb3cgcGF0aAorICAg
ICAgICAgICAgLy8gfQogICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRHUFIsIGtleUdQUikpOwogICAgICAgICAgICAgbG9v
cEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGJ1Y2tldEdQ
UikpKTsKLSAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90U3Ry
aW5nKGJ1Y2tldEdQUikpOworCisgICAgICAgICAgICBhdXRvIGlzQnVja2V0U3RyaW5nID0gbV9q
aXQuYnJhbmNoSWZTdHJpbmcoYnVja2V0R1BSKTsKKyAgICAgICAgICAgIGxvb3BBcm91bmQuYXBw
ZW5kKG1faml0LmJyYW5jaElmTm90SGVhcEJpZ0ludChidWNrZXRHUFIpKTsKKworICAgICAgICAg
ICAgLy8gYnVja2V0IGlzIEhlYXBCaWdJbnQuCisgICAgICAgICAgICBzbG93UGF0aENhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkhlYXBCaWdJbnQoa2V5R1BSKSk7CisgICAgICAgICAgICBsb29w
QXJvdW5kLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgICAgICAvLyBidWNrZXQgaXMg
U3RyaW5nLgorICAgICAgICAgICAgaXNCdWNrZXRTdHJpbmcubGluaygmbV9qaXQpOwogICAgICAg
ICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoa2V5R1BSKSk7
Ci0gICAgICAgICAgICAvLyBUaGV5J3JlIGJvdGggc3RyaW5ncy4KICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtNDYxOSw2ICs0NjU4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEhlYXBCaWdJ
bnRVc2U6IHsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIpKTsgLy8gVGhleSdyZSBkZWZpbml0ZWx5
IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVja2V0IHdlIHdlcmUgbG9va2luZyBmb3Ih
CisgICAgICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNW
YWx1ZVJlZ3MoYnVja2V0R1BSKSkpOworICAgICAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9q
aXQuYnJhbmNoSWZOb3RIZWFwQmlnSW50KGJ1Y2tldEdQUikpOworICAgICAgICAgICAgc2xvd1Bh
dGhDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeyAKICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIp
KTsgLy8gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVj
a2V0IHdlIHdlcmUgbG9va2luZyBmb3IhCiAgICAgICAgICAgICAvLyBUaGUgaW5wdXQga2V5IGFu
ZCBidWNrZXQncyBrZXkgYXJlIGFscmVhZHkgbm9ybWFsaXplZC4gU28gaWYgNjQtYml0IGNvbXBh
cmUgZmFpbHMgYW5kIG9uZSBpcyBub3QgYSBjZWxsLCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVx
dWFsLgpAQCAtNDYyNiwxMSArNDY3MiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAvLyBmaXJzdCBpcyBhIGNlbGwgaGVyZS4KICAgICAg
ICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVn
cyhrZXlHUFIpKSk7CiAgICAgICAgICAgICAvLyBCb3RoIGFyZSBjZWxscyBoZXJlLgotICAgICAg
ICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoYnVja2V0R1BS
KSk7Ci0gICAgICAgICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcgaGVyZS4KLSAgICAgICAg
ICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmU3RyaW5nKGtleUdQUikpOwot
ICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGlzIGEgc3RyaW5nLCBidXQgdGhlIHNlY29uZCBpcyBu
b3QsIHdlIGNvbnRpbnVlIHRvIGxvb3AgYXJvdW5kLgorICAgICAgICAgICAgYXV0byBpc0J1Y2tl
dFN0cmluZyA9IG1faml0LmJyYW5jaElmU3RyaW5nKGJ1Y2tldEdQUik7CisgICAgICAgICAgICAv
LyBidWNrZXQgaXMgbm90IFN0cmluZy4KKyAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1f
aml0LmJyYW5jaElmTm90SGVhcEJpZ0ludChidWNrZXRHUFIpKTsKKyAgICAgICAgICAgIC8vIGJ1
Y2tldCBpcyBIZWFwQmlnSW50LgorICAgICAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoSWZIZWFwQmlnSW50KGtleUdQUikpOwogICAgICAgICAgICAgbG9vcEFyb3VuZC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIC8vIGJ1Y2tldCBpcyBTdHJpbmcuCisg
ICAgICAgICAgICBpc0J1Y2tldFN0cmluZy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBsb29w
QXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhrZXlHUFIpKTsKKyAgICAgICAg
ICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGFjYTllNDRiZGFhODQ0OTg4NDQxYTlkNzk3
YTFkYzY5OGVlZDc5MGIuLmI4NjI0NThiMmEyOGQ0YmZhNmM1NDY0ZmM3NjM1YTczODliOTA4N2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAg
LTExMjQ0LDYgKzExMjQ0LDkgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgIGNhc2UgQmlnSW50MzJVc2U6Cisj
ZW5kaWYKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgICAgICBjYXNlIEludDMyVXNlOgog
ICAgICAgICBjYXNlIFN5bWJvbFVzZToKQEAgLTExMjU0LDkgKzExMjU3LDE3IEBAIGNsYXNzIExv
d2VyREZHVG9CMyB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBj
YXNlIEhlYXBCaWdJbnRVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBrZXkgPSBsb3dIZWFwQmln
SW50KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRv
SW50MzIodm1DYWxsKEludDY0LCBvcGVyYXRpb25NYXBIYXNoLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCBrZXkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAg
ICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0hlYXBCaWdJbnRDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZ0hlYXBC
aWdJbnRDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CkBAIC0xMTI2OCwxMiArMTEyNzksMTkgQEAg
Y2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHN0cmluZ1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihtYXBIYXNoU3RyaW5nKHZhbHVlLCBtX25vZGUtPmNoaWxkMSgp
KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdFN0cmluZywgaXNIZWFwQmlnSW50Q2FzZSk7CisgICAgICAgICAgICBt
X291dC5icmFuY2goaXNIZWFwQmlnSW50KHZhbHVlLCAocHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MSgpKSAmIH5TcGVjU3RyaW5nKSksIHVuc3VyZShpc0hlYXBCaWdJbnRDYXNlKSwgdW5zdXJlKG5v
dFN0cmluZ0hlYXBCaWdJbnRDYXNlKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlz
SGVhcEJpZ0ludENhc2UsIG5vdFN0cmluZ0hlYXBCaWdJbnRDYXNlKTsKKyAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGhlYXBCaWdJbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY2FzdFRv
SW50MzIodm1DYWxsKEludDY0LCBvcGVyYXRpb25NYXBIYXNoLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLCB2YWx1ZSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90U3RyaW5nSGVhcEJpZ0ludENhc2UsIGNv
bnRpbnVhdGlvbik7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RTdHJpbmdSZXN1bHQg
PSBtX291dC5hbmNob3Iod2FuZ3NJbnQ2NEhhc2godmFsdWUpKTsKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5waGkoSW50MzIs
IHN0cmluZ1Jlc3VsdCwgbm90U3RyaW5nUmVzdWx0KSk7CisgICAgICAgICAgICBzZXRJbnQzMiht
X291dC5waGkoSW50MzIsIHN0cmluZ1Jlc3VsdCwgaGVhcEJpZ0ludFJlc3VsdCwgbm90U3RyaW5n
UmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTEyOTQsMTYg
KzExMzEyLDIwIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRI
YXNoID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90U3RyaW5nQ2FzZSA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIG5vbkVtcHR5U3RyaW5nQ2Fz
ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAg
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2Vs
bENhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIG5vdFN0
cmluZ0Nhc2UpOwogICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5lcXVhbChtX291dC5s
b2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwgbV9vdXQu
Y29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkp
OworICAgICAgICAgICAgaXNTdHJpbmcsIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUobm90
U3RyaW5nQ2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZ0Nhc2UsIGlz
U3RyaW5nQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0hlYXBCaWdJbnQodmFsdWUsIChw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNTdHJpbmcpKSwgdW5zdXJlKHNsb3dD
YXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlz
U3RyaW5nQ2FzZSwgbm9uRW1wdHlTdHJpbmdDYXNlKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Um9wZVN0cmluZyh2YWx1ZSwgbV9ub2RlLT5jaGlsZDEoKSksIHJhcmVseShzbG93Q2FzZSksIHVz
dWFsbHkobm9uRW1wdHlTdHJpbmdDYXNlKSk7CkBAIC0xMTMzMSwxNiArMTEzNTMsMjkgQEAgY2xh
c3MgTG93ZXJERkdUb0IzIHsKICAgICB7CiAgICAgICAgIEFTU0VSVChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKIAorICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxD
YXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2Ug
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc0hlYXBCaWdJbnRDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbm90SW50MzJOdW1iZXJDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgbm90TmFOQ2FzZSA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRpYmxlQ2FzZSA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoaXNOdW1iZXJDYXNlKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoaXNDZWxsQ2FzZSk7CiAKICAgICAg
ICAgTFZhbHVlIGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Ioa2V5KTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKGlzTm90Q2VsbChrZXksIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1
bnN1cmUobm90Q2VsbENhc2UpLCB1bnN1cmUoaXNDZWxsQ2FzZSkpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzSGVhcEJpZ0ludENhc2UpOworICAgICAgICBtX291dC5i
cmFuY2goaXNOb3RIZWFwQmlnSW50KGtleSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUo
aXNIZWFwQmlnSW50Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzSGVhcEJpZ0lu
dENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYmlnSW50UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTm9ybWFsaXplTWFwS2V5LCBt
X3ZtVmFsdWUsIGtleSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGlzTnVtYmVyQ2FzZSk7CiAgICAgICAg
IG1fb3V0LmJyYW5jaChpc05vdE51bWJlcihrZXkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKGlzTnVtYmVyQ2FzZSkpOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzTnVtYmVyQ2Fz
ZSwgbm90SW50MzJOdW1iZXJDYXNlKTsKQEAgLTExMzYyLDcgKzExMzk3LDcgQEAgY2xhc3MgTG93
ZXJERkdUb0IzIHsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgbm9ybWFsaXplZE5hTlJlc3VsdCwgZG91
YmxlUmVzdWx0LCBib3hlZEludFJlc3VsdCkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShJbnQ2NCwgZmFzdFJlc3VsdCwgYmlnSW50UmVzdWx0LCBub3JtYWxpemVkTmFOUmVzdWx0LCBk
b3VibGVSZXN1bHQsIGJveGVkSW50UmVzdWx0KSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxl
R2V0TWFwQnVja2V0KCkKQEAgLTExNDE4LDYgKzExNDUzLDkgQEAgY2xhc3MgTG93ZXJERkdUb0Iz
IHsKICAgICAgICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQogICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+Y2hpbGQyKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgICAgIGNhc2UgQmlnSW50MzJVc2U6CisjZW5kaWYKICAgICAgICAg
Y2FzZSBJbnQzMlVzZToKICAgICAgICAgY2FzZSBTeW1ib2xVc2U6CiAgICAgICAgIGNhc2UgT2Jq
ZWN0VXNlOiB7CkBAIC0xMTQ0MSwxMCArMTE0NzksMjggQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBIZWFwQmlnSW50VXNl
OiB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RCaXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc0NlbGwgPSBtX291dC5uZXdC
bG9jaygpOworCisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoa2V5LCBidWNr
ZXRLZXkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90
Qml0RXF1YWwpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Qml0RXF1YWwsIGJ1
Y2tldEtleUlzQ2VsbCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tldEtl
eSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzQ2VsbCksIHVuc3VyZShsb29w
QXJvdW5kKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzQ2VsbCwg
bG9vcEFyb3VuZCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaXNIZWFwQmlnSW50KGJ1Y2tl
dEtleSksCisgICAgICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91
bmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2VsbFVz
ZTogewogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Qml0RXF1YWwgPSBtX291dC5uZXdCbG9j
aygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNDZWxsID0gbV9vdXQubmV3
QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzU3RyaW5nID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzTm90U3Ry
aW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtl
eUlzSGVhcEJpZ0ludCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKICAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tldEtleSksCiAgICAgICAgICAgICAgICAgdW5zdXJl
KGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RCaXRFcXVhbCkpOwpAQCAtMTE0NTUsMTAgKzExNTEx
LDE4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGJ1Y2tldEtleUlzQ2VsbCwgYnVja2V0S2V5SXNTdHJpbmcpOwogICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzU3RyaW5nKGJ1Y2tldEtleSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGJ1Y2tl
dEtleUlzU3RyaW5nKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKyAgICAgICAgICAgICAgICB1bnN1
cmUoYnVja2V0S2V5SXNTdHJpbmcpLCB1bnN1cmUoYnVja2V0S2V5SXNOb3RTdHJpbmcpKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleUlz
Tm90U3RyaW5nKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZyhrZXksIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDIoKSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShzbG93UGF0
aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1
Y2tldEtleUlzTm90U3RyaW5nLCBidWNrZXRLZXlJc0hlYXBCaWdJbnQpOworICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKGlzSGVhcEJpZ0ludChidWNrZXRLZXkpLAorICAgICAgICAgICAgICAgIHVu
c3VyZShidWNrZXRLZXlJc0hlYXBCaWdJbnQpLCB1bnN1cmUobG9vcEFyb3VuZCkpOwogCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc1N0cmluZywgbG9vcEFyb3VuZCk7Ci0g
ICAgICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGJ1Y2tldEtleUlzSGVhcEJpZ0ludCwgbG9vcEFyb3VuZCk7CisgICAgICAgICAg
ICBtX291dC5icmFuY2goaXNIZWFwQmlnSW50KGtleSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MigpKSksCiAgICAgICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91
bmQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTQ2Nyw2ICsxMTUzMSw4
IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRL
ZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgYm90
aEFyZUNlbGxzID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJ1
Y2tldEtleUlzU3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGJ1Y2tldEtleUlzTm90U3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzSGVhcEJpZ0ludCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAK
ICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tldEtleSksCiAg
ICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RCaXRFcXVhbCkp
OwpAQCAtMTE0ODEsMTAgKzExNTQ3LDE4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAKICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOwog
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKGJ1Y2tldEtleSksCi0gICAgICAgICAg
ICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzU3RyaW5nKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKyAg
ICAgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNTdHJpbmcpLCB1bnN1cmUoYnVja2V0S2V5
SXNOb3RTdHJpbmcpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNT
dHJpbmcsIGJ1Y2tldEtleUlzTm90U3RyaW5nKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c1N0cmluZyhrZXksIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDIoKSkpLAorICAgICAgICAgICAg
ICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzTm90U3RyaW5nLCBidWNrZXRLZXlJc0hlYXBCaWdJ
bnQpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzSGVhcEJpZ0ludChidWNrZXRLZXkpLAor
ICAgICAgICAgICAgICAgIHVuc3VyZShidWNrZXRLZXlJc0hlYXBCaWdJbnQpLCB1bnN1cmUobG9v
cEFyb3VuZCkpOwogCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc1N0cmlu
ZywgbG9vcEFyb3VuZCk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzSGVhcEJpZ0ludCwgbG9vcEFy
b3VuZCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaXNIZWFwQmlnSW50KGtleSwgcHJvdmVu
VHlwZShtX25vZGUtPmNoaWxkMigpKSksCiAgICAgICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRo
KSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAppbmRleCBlYzNmZWI2
ZTcwMzBmYTBjMGZlNjVhMzlhY2Q1YjI4NzdjZThkODA2Li5jOTc3Y2RjY2IyOTgzZmFjYTA3ZjA1
N2Q0YzgzNjUyODEzYjIzNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IYXNoTWFwSW1wbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hh
c2hNYXBJbXBsLmgKQEAgLTI0Myw4ICsyNDMsMTMgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9v
bCBhcmVLZXlzRXF1YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhLAog
Ly8gS2VlcCBpbiBzeW5jIHdpdGggdGhlIGltcGxlbWVudGF0aW9uIG9mIERGRyBhbmQgRlRMIG5v
cm1hbGl6YXRpb24uCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbm9ybWFsaXplTWFwS2V5KEpTVmFs
dWUga2V5KQogewotICAgIGlmICgha2V5LmlzTnVtYmVyKCkpCisgICAgaWYgKCFrZXkuaXNOdW1i
ZXIoKSkgeworI2lmIFVTRShCSUdJTlQzMikKKyAgICAgICAgaWYgKGtleS5pc0hlYXBCaWdJbnQo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihrZXkuYXNIZWFwQmln
SW50KCkpOworI2VuZGlmCiAgICAgICAgIHJldHVybiBrZXk7CisgICAgfQogCiAgICAgaWYgKGtl
eS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBrZXk7CkBAIC0yODcsNiArMjkyLDkgQEAgQUxX
QVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVk0mIHZtLCBKU1ZhbHVlIHYKICAgICAgICAgcmV0dXJuIHd0ZlN0cmluZy5pbXBsKCktPmhh
c2goKTsKICAgICB9CiAKKyAgICBpZiAodmFsdWUuaXNIZWFwQmlnSW50KCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZS5hc0hlYXBCaWdJbnQoKS0+Y29uY3VycmVudEhhc2goKTsKKwogICAgIHJldHVy
biB3YW5nc0ludDY0SGFzaChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKIH0KIApAQCAtMzAzLDYg
KzMxMSw5IEBAIEFMV0FZU19JTkxJTkUgT3B0aW9uYWw8dWludDMyX3Q+IGNvbmN1cnJlbnRKU01h
cEhhc2goSlNWYWx1ZSBrZXkpCiAgICAgICAgIHJldHVybiBpbXBsLT5jb25jdXJyZW50SGFzaCgp
OwogICAgIH0KIAorICAgIGlmIChrZXkuaXNIZWFwQmlnSW50KCkpCisgICAgICAgIHJldHVybiBr
ZXkuYXNIZWFwQmlnSW50KCktPmNvbmN1cnJlbnRIYXNoKCk7CisKICAgICB1aW50NjRfdCByYXdW
YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShrZXkpOwogICAgIHJldHVybiB3YW5nc0ludDY0SGFzaChy
YXdWYWx1ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
aW5kZXggMzJhMzc1ZDk2ZGU5NDA3N2E2ZmUxNTllMTBjZjE4OGI4NWZmZTQxMi4uYTk4MzM5OWU3
ZDk1MmRlNjczYTI1YTI4YzRhZTdkYmUzN2VhMWE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQmlnSW50LmNwcApAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIlBhcnNl
SW50LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MzAsMzEgKzQzMSw2IEBAIEFMV0FZU19JTkxJTkUgSlNC
aWdJbnQ6OkltcGxSZXN1bHQ6OkltcGxSZXN1bHQoSlNWYWx1ZSB2YWx1ZSkKICAgICA6IHBheWxv
YWQodmFsdWUpCiB7IH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252ZXJ0
VG9CaWdJbnQzMihKU0JpZ0ludCogYmlnSW50KQotewotI2lmIFVTRShCSUdJTlQzMikKLSAgICBp
ZiAoVU5MSUtFTFkoIWJpZ0ludCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0KLSAgICBp
ZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7Ci0gICAgICAgIGlmICghYmlnSW50LT5sZW5ndGgo
KSkKLSAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwotICAgICAgICBKU0JpZ0ludDo6
RGlnaXQgZGlnaXQgPSBiaWdJbnQtPmRpZ2l0KDApOwotICAgICAgICBpZiAoYmlnSW50LT5zaWdu
KCkpIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbWF4VmFsdWUgPSAt
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
OwotICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZhbHVlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KC1zdGF0aWNfY2FzdDxpbnQ2NF90
PihkaWdpdCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDY0X3QgbWF4VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOwotICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZh
bHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KGRpZ2l0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBiaWdJ
bnQ7Ci19Ci0KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdHJ5Q29udmVydFRvQmlnSW50
MzIoSlNCaWdJbnQ6OkltcGxSZXN1bHQgaW1wbFJlc3VsdCkKIHsKICAgICBpZiAoIWltcGxSZXN1
bHQucGF5bG9hZCkKQEAgLTMwNzMsNCArMzA0OSwxMyBAQCBKU1ZhbHVlIEpTQmlnSW50Ojphc1Vp
bnROKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IG4sIGludDMyX3QgYmln
SQogfQogI2VuZGlmCiAKK3Vuc2lnbmVkIEpTQmlnSW50Ojpjb25jdXJyZW50SGFzaCgpCit7Cisg
ICAgSGFzaGVyIGhhc2hlcjsKKyAgICBXVEY6OmFkZChoYXNoZXIsIG1fc2lnbik7CisgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoKCk7ICsraW5kZXgpCisgICAgICAg
IFdURjo6YWRkKGhhc2hlciwgZGlnaXQoaW5kZXgpKTsKKyAgICByZXR1cm4gaGFzaGVyLmhhc2go
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCaWdJbnQuaAppbmRleCBiNTg0ZmJiZWVhNGZmNTlmY2FmNmU4OGQ5MjVmNDE2NDMwYmY1Yzc4
Li4yNDYwZGQ4ZDY0NDI0MzUxYzFlMjQzM2NkZGFhNDkzODRiYmI4NGNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKQEAgLTQyNyw2ICs0MjcsOCBAQCBjbGFzcyBK
U0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
QmlnSW50KiByaWdodFRyaW0oSlNHbG9iYWxPYmplY3QqKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU0JpZ0ludCogdHJ5UmlnaHRUcmltKFZNJik7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB1
bnNpZ25lZCBjb25jdXJyZW50SGFzaCgpOworCiBwcml2YXRlOgogICAgIEpTQmlnSW50KFZNJiwg
U3RydWN0dXJlKiwgRGlnaXQqLCB1bnNpZ25lZCBsZW5ndGgpOwogCkBAIC02MDgsNCArNjEwLDI5
IEBAIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgaW52ZXJ0QmlnSW50
Q29tcGFyZVJlc3VsdChKU0JpZ0ludDo6Q29tCiAgICAgfQogfQogCitBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgdHJ5Q29udmVydFRvQmlnSW50MzIoSlNCaWdJbnQqIGJpZ0ludCkKK3sKKyNpZiBVU0Uo
QklHSU5UMzIpCisgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOworCisgICAgaWYgKGJpZ0ludC0+bGVuZ3RoKCkgPD0gMSkgeworICAgICAgICBpZiAo
IWJpZ0ludC0+bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKKyAg
ICAgICAgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0ID0gYmlnSW50LT5kaWdpdCgwKTsKKyAgICAgICAg
aWYgKGJpZ0ludC0+c2lnbigpKSB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2
NF90IG1heFZhbHVlID0gLXN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKTsKKyAgICAgICAgICAgIGlmIChkaWdpdCA8PSBtYXhWYWx1ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pigtc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oZGlnaXQpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1heFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIGlm
IChkaWdpdCA8PSBtYXhWYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihz
dGF0aWNfY2FzdDxpbnQzMl90PihkaWdpdCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gYmlnSW50OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oIGIvU291cmNlL1dURi93dGYvSGFzaGVyLmgKaW5kZXgg
ODc0MjQ2YzNjMjdkYTBhYTVjODk1YWUwODY3OGQ1ZDQ0NGE4MmFiZC4uNTJlYjIzNDIxMWQzNjlj
OGUzZTA5YWM3NWJkOGM0NGRhMDYzOTU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFz
aGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaGVyLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgY2xh
c3MgSW50ZWdlckhhc2hlciB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB1aW50MzJf
dCBjb21wdXRlSGFzaChjb25zdCBUeXBlcyYuLi4pOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gT3RoZXJUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2goc3RkOjppbml0aWFsaXpl
cl9saXN0PFQ+LCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8T3RoZXJUeXBlcz4uLi4pOwordGVtcGxh
dGU8dHlwZW5hbWUgVW5zaWduZWRJbnRlZ2VyPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfdW5z
aWduZWQ8VW5zaWduZWRJbnRlZ2VyPjo6dmFsdWUgJiYgc2l6ZW9mKFVuc2lnbmVkSW50ZWdlcikg
PD0gc2l6ZW9mKHVpbnQzMl90KSwgdm9pZD4gYWRkKEhhc2hlciYsIFVuc2lnbmVkSW50ZWdlcik7
CiAKIGNsYXNzIEhhc2hlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC03NSw2
ICs3NiwxMSBAQCBjbGFzcyBIYXNoZXIgewogICAgICAgICBoYXNoZXIubV91bmRlcmx5aW5nSGFz
aGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQoc2l6ZWRJbnRlZ2VyLCBzaXplZEludGVn
ZXIgPj4gMTYpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdW5kZXJseWluZ0hhc2hlci5oYXNoKCk7CisgICAgfQorCiBwcml2YXRl
OgogICAgIFN0cmluZ0hhc2hlciBtX3VuZGVybHlpbmdIYXNoZXI7CiB9OwpAQCAtOTEsNiArOTcs
MTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgU2lnbmVkQXJpdGhtZXRpYz4gc3RkOjplbmFibGVfaWZf
dDxzdGQ6OmlzX3NpZ25lZDxTaWduZWRBcml0aG0KICAgICBhZGQoaGFzaGVyLCBzdGF0aWNfY2Fz
dDxzdGQ6Om1ha2VfdW5zaWduZWRfdDxTaWduZWRBcml0aG1ldGljPj4obnVtYmVyKSk7CiB9CiAK
K2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgYm9vbCBib29sZWFuKQoreworICAgIGFk
ZChoYXNoZXIsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGJvb2xlYW4pKTsKK30KKwogaW5saW5lIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBkb3VibGUgbnVtYmVyKQogewogICAgIGFkZChoYXNoZXIs
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4obnVtYmVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA2ZWY1YTEzMGZj
ZTVhOGQ2MzM5ODNlNzVkZWI2YmNjODg4NGYwZTgxLi4xMTI0NGJmZDRiMDY3OTJjZjVjOTViYjZl
ZGM5OWIzMjdhN2Q5ZTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTMwNTQsNyArMzA1NCw3IEBAIGNsYXNzIENs
b25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRo
Q3Jhc2hPbk92ZXJmbG93KGJpZ0ludCk7Ci0gICAgICAgICAgICByZXR1cm4gYmlnSW50OworICAg
ICAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpZ0ludCk7CiAgICAgICAgIH0K
ICNlbmRpZgogICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gbnVsbHB0cjsKQEAgLTMwOTQsNyAr
MzA5NCw3IEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9nY0J1ZmZlci5hcHBl
bmRXaXRoQ3Jhc2hPbk92ZXJmbG93KGJpZ0ludCk7Ci0gICAgICAgIHJldHVybiBiaWdJbnQ7Cisg
ICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaWdJbnQpOwogICAgIH0KIAogICAg
IEpTVmFsdWUgcmVhZFRlcm1pbmFsKCkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzljM2YzZGY0YjVkZTVkYWMzYzc2MjQ5NDM5ZDg5NDc0
MTlhYTVhNC4uNTc4ZGZkMWViMzk0MDJmYjJkZDRhYmY1Y2M1ZGE5ZDQ3M2QxZWVkYiAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMyBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgor
CisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82OTEwNzIyMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9iaWdpbnQtYW5kLW1hcC1zZXQuanM6IEFkZGVk
LgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAob3BhcXVlMW4pOgorICAgICAgICAodGVz
dE1hcCk6CisgICAgICAgIChsZXQuc2V0IG5ldyk6CisgICAgICAgICogc3RyZXNzL2JpZ2ludC1z
dHJpbmctbWFwLXNldC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgICh0
ZXN0TWFwKToKKyAgICAgICAgKiBzdHJlc3MvYmlnaW50MzItbWFwLXNldC5qczogQWRkZWQuCisg
ICAgICAgIChzaG91bGRCZSk6CisgICAgICAgICh0ZXN0TWFwKToKKwogMjAyMC0wOS0xOCAgWXVz
dWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEdlbmVyYXRv
ciBkZWNsYXJhdGlvbiBzaG91bGQgbm90IGJlIGFsbG93ZWQgaW4gc2luZ2xlIHN0YXRlbWVudCBj
b250ZXh0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtYW5kLW1hcC1zZXQuanMg
Yi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtYW5kLW1hcC1zZXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmYxY2Nl
YThhMGQ1OGM4NGU0NmUyMzVkODUzMDA5ODQxY2M3OGMyNwotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvc3RyZXNzL2JpZ2ludC1hbmQtbWFwLXNldC5qcwpAQCAtMCwwICsxLDQ0IEBACitmdW5j
dGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhw
ZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsK
K30KKworZnVuY3Rpb24gb3BhcXVlMW4oKQoreworICAgIHJldHVybiAxbjsKK30KK25vSW5saW5l
KG9wYXF1ZTFuKTsKKworZnVuY3Rpb24gdGVzdE1hcChtYXApIHsKKyAgICBtYXAuc2V0KDFuLCA0
Mik7CisgICAgc2hvdWxkQmUobWFwLmhhcygxbiksIHRydWUpOworICAgIHNob3VsZEJlKG1hcC5o
YXMob3BhcXVlMW4oKSksIHRydWUpOworICAgIHNob3VsZEJlKG1hcC5oYXMoY3JlYXRlSGVhcEJp
Z0ludChvcGFxdWUxbigpKSksIHRydWUpOworICAgIHNob3VsZEJlKG1hcC5nZXQoMW4pLCA0Mik7
CisgICAgc2hvdWxkQmUobWFwLmdldChvcGFxdWUxbigpKSwgNDIpOworICAgIHNob3VsZEJlKG1h
cC5nZXQoY3JlYXRlSGVhcEJpZ0ludChvcGFxdWUxbigpKSksIDQyKTsKKyAgICBtYXAuc2V0KDFu
LCA0MCk7CisgICAgc2hvdWxkQmUobWFwLmdldCgxbiksIDQwKTsKKyAgICBzaG91bGRCZShtYXAu
Z2V0KG9wYXF1ZTFuKCkpLCA0MCk7CisgICAgc2hvdWxkQmUobWFwLmdldChjcmVhdGVIZWFwQmln
SW50KG9wYXF1ZTFuKCkpKSwgNDApOworfQorbm9JbmxpbmUodGVzdE1hcCk7CisKK2Z1bmN0aW9u
IHRlc3RTZXQoc2V0KSB7CisgICAgc2V0LmFkZCgxbik7CisgICAgc2hvdWxkQmUoc2V0Lmhhcygx
biksIHRydWUpOworICAgIHNob3VsZEJlKHNldC5oYXMob3BhcXVlMW4oKSksIHRydWUpOworICAg
IHNob3VsZEJlKHNldC5oYXMoY3JlYXRlSGVhcEJpZ0ludChvcGFxdWUxbigpKSksIHRydWUpOwor
ICAgIHNldC5kZWxldGUoY3JlYXRlSGVhcEJpZ0ludChvcGFxdWUxbigpKSk7CisgICAgc2hvdWxk
QmUoc2V0LmhhcygxbiksIGZhbHNlKTsKKyAgICBzaG91bGRCZShzZXQuaGFzKG9wYXF1ZTFuKCkp
LCBmYWxzZSk7CisgICAgc2hvdWxkQmUoc2V0LmhhcyhjcmVhdGVIZWFwQmlnSW50KG9wYXF1ZTFu
KCkpKSwgZmFsc2UpOworfQorbm9JbmxpbmUodGVzdFNldCk7CisKK2xldCBtYXAgPSBuZXcgTWFw
KCk7CitsZXQgc2V0ID0gbmV3IFNldCgpOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkg
eworICAgIHRlc3RNYXAobWFwKTsKKyAgICB0ZXN0U2V0KHNldCk7Cit9CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3N0cmVzcy9iaWdpbnQtc3RyaW5nLW1hcC1zZXQuanMgYi9KU1Rlc3RzL3N0cmVzcy9i
aWdpbnQtc3RyaW5nLW1hcC1zZXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRkOGQyOTkyMTQ3ODk4YmMzN2Ew
ODNlZGVhZmU5ZGMwMjkwNzEzZQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Jp
Z2ludC1zdHJpbmctbWFwLXNldC5qcwpAQCAtMCwwICsxLDc3IEBACitmdW5jdGlvbiBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rp
b24gdGVzdE1hcChtYXAsIGtleSkKK3sKKyAgICByZXR1cm4gbWFwLmhhcyhrZXkpOworfQorbm9J
bmxpbmUodGVzdE1hcCk7CisKK2Z1bmN0aW9uIHRlc3RTZXQoc2V0LCBrZXkpCit7CisgICAgcmV0
dXJuIHNldC5oYXMoa2V5KTsKK30KK25vSW5saW5lKHRlc3RTZXQpOworCitsZXQgbWFwID0gbmV3
IE1hcCgpOworbWFwLnNldCgiSGV5IiwgIkhleSIpOworbWFwLnNldChudWxsLCBudWxsKTsKK21h
cC5zZXQoMW4sIDFuKTsKK21hcC5zZXQoMm4sIDJuKTsKK21hcC5zZXQoMHhmZmZmZmZmZmZmZmZm
ZmZmbiwgMHhmZmZmZmZmZmZmZmZmZmZmbik7CittYXAuc2V0KCJIZWxsbyIsICJIZWxsbyIpOwor
CitsZXQgc2V0ID0gbmV3IFNldCgpOworc2V0LmFkZCgiSGV5Iik7CitzZXQuYWRkKG51bGwpOwor
c2V0LmFkZCgxbik7CitzZXQuYWRkKDJuKTsKK3NldC5hZGQoMHhmZmZmZmZmZmZmZmZmZmZmbik7
CitzZXQuYWRkKCJIZWxsbyIpOworCisvLyBTdHJpbmcKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0
OyArK2kpIHsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgIkhleSIpLCB0cnVlKTsKKyAgICBz
aG91bGRCZSh0ZXN0U2V0KHNldCwgIkhleSIpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFw
KG1hcCwgIkhleTEiKSwgZmFsc2UpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCAiSGV5MSIp
LCBmYWxzZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAsICJIZWxsbyIpLCB0cnVlKTsKKyAg
ICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgIkhlbGxvIiksIHRydWUpOworfQorCisvLyBDZWxsCitm
b3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAs
ICJIZXkiKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsICJIZXkiKSwgdHJ1ZSk7
CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAsICJIZXkxIiksIGZhbHNlKTsKKyAgICBzaG91bGRC
ZSh0ZXN0U2V0KHNldCwgIkhleTEiKSwgZmFsc2UpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFw
LCAiSGVsbG8iKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsICJIZWxsbyIpLCB0
cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgY3JlYXRlSGVhcEJpZ0ludCgweGZmZmZm
ZmZmZmZmZmZmZmZuKSksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCBjcmVhdGVI
ZWFwQmlnSW50KDB4ZmZmZmZmZmZmZmZmZmZmZm4pKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVz
dE1hcChtYXAsIGNyZWF0ZUhlYXBCaWdJbnQoMHgxZmZmZmZmZmZmZmZmZmZmZm4pKSwgZmFsc2Up
OworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCBjcmVhdGVIZWFwQmlnSW50KDB4MWZmZmZmZmZm
ZmZmZmZmZmZuKSksIGZhbHNlKTsKK30KKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkg
eworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCAiSGV5IiksIHRydWUpOworICAgIHNob3VsZEJl
KHRlc3RTZXQoc2V0LCAiSGV5IiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCAi
SGV5MSIpLCBmYWxzZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsICJIZXkxIiksIGZhbHNl
KTsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgIkhlbGxvIiksIHRydWUpOworICAgIHNob3Vs
ZEJlKHRlc3RTZXQoc2V0LCAiSGVsbG8iKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcCht
YXAsIGNyZWF0ZUhlYXBCaWdJbnQoMHhmZmZmZmZmZmZmZmZmZmZmbikpLCB0cnVlKTsKKyAgICBz
aG91bGRCZSh0ZXN0U2V0KHNldCwgY3JlYXRlSGVhcEJpZ0ludCgweGZmZmZmZmZmZmZmZmZmZmZu
KSksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCBjcmVhdGVIZWFwQmlnSW50KDB4
MWZmZmZmZmZmZmZmZmZmZmZuKSksIGZhbHNlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwg
Y3JlYXRlSGVhcEJpZ0ludCgweDFmZmZmZmZmZmZmZmZmZmZmbikpLCBmYWxzZSk7CisgICAgc2hv
dWxkQmUodGVzdE1hcChtYXAsIGNyZWF0ZUhlYXBCaWdJbnQoMW4pKSwgdHJ1ZSk7CisgICAgc2hv
dWxkQmUodGVzdFNldChzZXQsIGNyZWF0ZUhlYXBCaWdJbnQoMW4pKSwgdHJ1ZSk7CisgICAgc2hv
dWxkQmUodGVzdE1hcChtYXAsIDFuKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQs
IDFuKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAsIDJuKSwgdHJ1ZSk7CisgICAg
c2hvdWxkQmUodGVzdFNldChzZXQsIDJuKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcCht
YXAsIDNuKSwgZmFsc2UpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCAzbiksIGZhbHNlKTsK
K30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2JpZ2ludDMyLW1hcC1zZXQuanMgYi9KU1Rl
c3RzL3N0cmVzcy9iaWdpbnQzMi1tYXAtc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3ZDBjZWQwMWUyNWQ3
MTUxMmNiMWNjMWYxN2I1YTdjM2JjOTY0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0
cmVzcy9iaWdpbnQzMi1tYXAtc2V0LmpzCkBAIC0wLDAgKzEsNDEgQEAKK2Z1bmN0aW9uIHNob3Vs
ZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5j
dGlvbiB0ZXN0TWFwKG1hcCwga2V5KQoreworICAgIHJldHVybiBtYXAuaGFzKGtleSk7Cit9Citu
b0lubGluZSh0ZXN0TWFwKTsKKworZnVuY3Rpb24gdGVzdFNldChzZXQsIGtleSkKK3sKKyAgICBy
ZXR1cm4gc2V0LmhhcyhrZXkpOworfQorbm9JbmxpbmUodGVzdFNldCk7CisKK2xldCBtYXAgPSBu
ZXcgTWFwKCk7CittYXAuc2V0KCJIZXkiLCAiSGV5Iik7CittYXAuc2V0KG51bGwsIG51bGwpOwor
bWFwLnNldCgxbiwgMW4pOworbWFwLnNldCgybiwgMm4pOworbWFwLnNldCgweGZmZmZmZmZmZmZm
ZmZmZmZuLCAweGZmZmZmZmZmZmZmZmZmZmZuKTsKK21hcC5zZXQoIkhlbGxvIiwgIkhlbGxvIik7
CisKK2xldCBzZXQgPSBuZXcgU2V0KCk7CitzZXQuYWRkKCJIZXkiKTsKK3NldC5hZGQobnVsbCk7
CitzZXQuYWRkKDFuKTsKK3NldC5hZGQoMm4pOworc2V0LmFkZCgweGZmZmZmZmZmZmZmZmZmZmZu
KTsKK3NldC5hZGQoIkhlbGxvIik7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsK
KyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgMW4pLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0
U2V0KHNldCwgMW4pLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgMm4pLCB0cnVl
KTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgMm4pLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0
ZXN0TWFwKG1hcCwgM24pLCBmYWxzZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsIDNuKSwg
ZmFsc2UpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409246</attachid>
            <date>2020-09-20 13:16:32 -0700</date>
            <delta_ts>2020-09-21 10:44:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216667-20200920131631.patch</filename>
            <type>text/plain</type>
            <size>41208</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
OGZjZmMzMTU4YTljMmFmMTZkNDBmMmMyYTE3ZjQ2OGNlOTVkNDk1Li45ZTEzNjk2YjE5ZjJhZTU5
NWEwODBkMzA5MzFkNDkyZWFmZGViNzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBt
YWtlcyBCaWdJbnQgc3VwcG9ydGVkIGluIE1hcCAvIFNldC4KKworICAgICAgICAxLiBJbiBOb3Jt
YWxpemVNYXBLZXksIHdlIGFsd2F5cyBhdHRlbXB0IHRvIGNvbnZlcnQgSGVhcEJpZ0ludCB0byBC
aWdJbnQzMiAoaWYgc3VwcG9ydGVkKS4gU28gd2UgZW5zdXJlIHRoYXQsCisgICAgICAgICAgICBu
b3JtYWxpemVkIEJpZ0ludCBoYXMgb25lIHVuaXF1ZSBmb3JtIGZvciBCaWdJbnQzMiByYW5nZS4g
VGhpcyBhbGxvd3MgdXMgdG8gdXNlIGhhc2hpbmcgZm9yIEJpZ0ludDMyIGJpdCBwYXR0ZXJuIGRp
cmVjdGx5LgorICAgICAgICAyLiBJbiBNYXBIYXNoLCBmb3IgQmlnSW50MzIsIHdlIGRpcmVjdGx5
IGhhcyB0aGUgSlNWYWx1ZSBiaXRzLiBGb3IgSGVhcEJpZ0ludCwgd2UgY2FsY3VsYXRlIGhhc2gg
dmlhIEhhc2hlci4KKyAgICAgICAgMy4gSW4gR2V0TWFwQnVja2V0LCB3ZSBjb25zaWRlciBIZWFw
QmlnSW50IGNhc2UgY29ycmVjdGx5LgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGlu
Z1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9ybWFsaXplTWFwS2V5KToKKyAgICAgICAgKiBk
ZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTm9ybWFsaXplTWFwS2V5KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWFwSGFzaCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb3JtYWxpemVNYXBLZXkpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TWFwQnVja2V0KToK
KyAgICAgICAgKiBydW50aW1lL0hhc2hNYXBJbXBsLmg6CisgICAgICAgIChKU0M6Om5vcm1hbGl6
ZU1hcEtleSk6CisgICAgICAgIChKU0M6OmpzTWFwSGFzaCk6CisgICAgICAgIChKU0M6OmNvbmN1
cnJlbnRKU01hcEhhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6Y29uY3VycmVudEhhc2gpOgorICAgICAgICAqIHJ1bnRpbWUvSlNC
aWdJbnQuaDoKKyAgICAgICAgKEpTQzo6dHJ5Q29udmVydFRvQmlnSW50MzIpOgorCiAyMDIwLTA5
LTIwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgdXNlIFJFTEVBU0VfQU5EX1JFVFVSTiB0byBzdXBwcmVzcyBleGNlcHRpb24gdmVyaWZp
Y2F0aW9uIGZhaWx1cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKaW5kZXggNjBkMGY3MzQyYzJhNmFhYmM1MWU3ZDRhZGIyOGI1YTkyNzgy
YTYwMC4uNzk4NWUyNTFlNjI2ZWNmOTA2YThiNzUwYmJlZWY5OGJkNmVmOGUxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaGVy
Lmg6CisgICAgICAgIChXVEY6Okhhc2hlcjo6aGFzaCBjb25zdCk6CisgICAgICAgIChXVEY6OmFk
ZCk6CisKIDIwMjAtMDktMTggIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4K
IAogICAgICAgICBbV2ViR1BVXSBBZGQgRU5BQkxFKFdITFNMX0NPTVBJTEVSKSBndWFyZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDA4NmY3YmY1MWFmYzNjZWMzOGQzYjY1Y2ZjYThiMWI2M2NlOTYxN2IuLjg5ZDRl
YjQyMmRmMzgwNzkxMzM0ZmE5ZjcxYjAyNmJiN2JjM2UxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAyMC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgor
CisgICAgICAgIFtKU0NdIEJpZ0ludCBzaG91bGQgd29yayB3aXRoIE1hcCAvIFNldAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjY3CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82OTEwNzIyMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTdHJvbmdseSBlbnN1cmUgdGhhdCBCaWdJbnQzMiBpcyBhbHdh
eXMgc2VsZWN0ZWQgc2luY2UgTWFwIC8gU2V0IGNvdWxkIHVzZSBpdCBhcyBhIGtleS4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEJpZ0ludCk6CisKIDIwMjAtMDktMjAgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNlbGVjdGlvbiBBUEk6IEZ1
cnRoZXIgaW1wcm92ZW1lbnRzIHRvIFZpc2libGVTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9uLCBh
bmQgRE9NU2VsZWN0aW9uIHRvIHByZXNlcnZlIGFuY2hvciBhbmQgZm9jdXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAppbmRleCBkOTAyZjIwNzJiNjE2MzZkYWFmY2NkZDZjNDM0ZTQxYTNiMTUzZmVkLi5jZTZh
MTM3ODlmMjE1NThmM2I4NTBkZDRhZWYxMzUzYWFhOGFkOTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CkBAIC0xMzgxLDcgKzEzODEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlTWF5YmVO
b3JtYWxpemVkID0gKFNwZWNGdWxsTnVtYmVyICYgflNwZWNJbnQzMk9ubHkpOworICAgICAgICBT
cGVjdWxhdGVkVHlwZSB0eXBlTWF5YmVOb3JtYWxpemVkID0gKFNwZWNGdWxsTnVtYmVyICYgflNw
ZWNJbnQzMk9ubHkpIHwgU3BlY0hlYXBCaWdJbnQ7CiAgICAgICAgIGlmICghKGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIHR5cGVNYXliZU5vcm1hbGl6ZWQpKSB7CiAgICAgICAgICAg
ICBtX3N0YXRlLnNldFNob3VsZFRyeUNvbnN0YW50Rm9sZGluZyh0cnVlKTsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKaW5kZXgg
NWUyYmQ5Yzk1ZTA4MmIyODAzY2ZiOWQ5MDNiOTU2MjczZDhmZTMyOS4uOTY3MDJlMDlmY2M1YWY3
OGNkMjc0OTk2MDUyNDEyMGRjZDQxMGU0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKQEAgLTk5NCw3ICs5OTQsNyBA
QCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGNhc2UgTm9ybWFsaXplTWFwS2V5OiB7Ci0gICAgICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgdHlwZU1heWJlTm9ybWFsaXplZCA9IChTcGVjRnVsbE51bWJlciAm
IH5TcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlTWF5
YmVOb3JtYWxpemVkID0gKFNwZWNGdWxsTnVtYmVyICYgflNwZWNJbnQzMk9ubHkpIHwgU3BlY0hl
YXBCaWdJbnQ7CiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV90eXBlICYgdHlwZU1heWJlTm9ybWFsaXplZCkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCAxOGI4
ODM5NjliNjkwZjEzZjZmZmJmYjdkNzU2YmIzY2EyMjA4Yzc5Li40MjVkZmJlNmY1ODExM2YwYjZl
ODZmOGY3ODExMTdhYTdlYjU5ZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgU3VwZXJTYW1wbGVyQmVnaW46CiAgICAgY2FzZSBTdXBlclNhbXBs
ZXJFbmQ6CiAgICAgY2FzZSBDUFVJbnRyaW5zaWM6Ci0gICAgY2FzZSBOb3JtYWxpemVNYXBLZXk6
CisgICAgY2FzZSBOb3JtYWxpemVNYXBLZXk6IC8vIEhlYXBCaWdJbnQgPT4gQmlnSW50MzIgY29u
dmVyc2lvbiBkb2VzIG5vdCBpbnZvbHZlIEdDLgogICAgIGNhc2UgR2V0TWFwQnVja2V0SGVhZDoK
ICAgICBjYXNlIEdldE1hcEJ1Y2tldE5leHQ6CiAgICAgY2FzZSBMb2FkS2V5RnJvbU1hcEJ1Y2tl
dDoKQEAgLTUxNyw2ICs1MTcsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICBjYXNlIFN5bWJvbFVzZToKICAg
ICAgICAgY2FzZSBPYmplY3RVc2U6CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBjYXNlIEJp
Z0ludDMyVXNlOgorI2VuZGlmCisgICAgICAgIGNhc2UgSGVhcEJpZ0ludFVzZToKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFdlIG1p
Z2h0IHJlc29sdmUgYSByb3BlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKaW5kZXggYjZjMGJiOGJhOTkwZmZmMzVjMDAzYzg2MDE3ZWUwNjczNDEwZTAzOC4u
NjZhNzg2OTJmMGY2MmJiZGJmMmZmZjZjN2EzZWZjMTJmYTBmMmM2NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0yMzc3LDEyICsyMzc3LDE4IEBA
IGNsYXNzIEZpeHVwUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogICAgICAgICAgICAgICAgIGZpeEVk
Z2U8Qm9vbGVhblVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9k
ZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUludDMyKCkpCiAgICAgICAgICAgICAgICAgZml4
RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworI2lmIFVTRShCSUdJTlQzMikKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVCaWdJbnQzMigp
KQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8QmlnSW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KyNlbmRpZgogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1
bGF0ZVN5bWJvbCgpKQogICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3ltYm9sVXNlPihub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3Bl
Y3VsYXRlT2JqZWN0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxPYmplY3RVc2U+KG5vZGUt
PmNoaWxkMigpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91bGRT
cGVjdWxhdGVTdHJpbmcoKSkKICAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQyKCktPnNob3Vs
ZFNwZWN1bGF0ZUhlYXBCaWdJbnQoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPEhlYXBCaWdJ
bnRVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxDZWxs
VXNlPihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC0yNDM2LDYgKzI0NDIs
MTggQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKKyNpZiBVU0UoQklHSU5UMzIpCisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKCkpIHsKKyAgICAgICAg
ICAgICAgICBmaXhFZGdlPEJpZ0ludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVIZWFwQmlnSW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBmaXhFZGdlPEhlYXBCaWdJbnRVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBmaXhFZGdlPENl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM5OTYs
MTEgKzQwMTQsMTMgQEAgY2xhc3MgRml4dXBQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUNlbGwoKSkgewotICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2Rl
LT5jaGlsZDEoKSk7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZUJpZ0ludDMyKCkpIHsKKyAgICAgICAgICAgIGZpeEVkZ2U8Qmln
SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lk
ZW50aXR5KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyNlbmRpZgogCiAgICAg
ICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDFkYzViNjU5YzZiNDFk
MWJlNzA5M2E4Mzc1MzE0NmEzMWY2MzZlNjguLmQ0ZTkyNTEzMmMxYjUyZDBkNGVhYjY0NzdmYTll
MDExNjcyYThlZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcApAQCAtMzIxMiw2ICszMjEyLDE0IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXREeW5hbWljVmFyTm9uU3RyaWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAg
cmV0dXJuIHB1dER5bmFtaWNWYXIoZ2xvYmFsT2JqZWN0LCB2bSwgc2NvcGUsIHZhbHVlLCBpbXBs
LCBnZXRQdXRJbmZvQml0cywgaXNTdHJpY3RNb2RlKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ob3JtYWxpemVNYXBLZXkoVk0qIHZtUG9pbnRlciwgRW5jb2Rl
ZEpTVmFsdWUgaW5wdXQpCit7CisgICAgVk0mIHZtID0gKnZtUG9pbnRlcjsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9u
UHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobm9ybWFsaXplTWFwS2V5KEpTVmFsdWU6OmRlY29kZShpbnB1dCkp
KTsKK30KKwogVUNQVVN0cmljdEludDMyIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFwSGFzaChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCmluZGV4IGUyOWE0Y2RiYmY5Y2Q5ZWM1N2MzNjQ5M2MxOTk3MWUzMmJm
YmFiMjAuLjU1MTc0NjBhOTQzODA4ZGVmZmE2MGQ5ZjFjM2ExN2ZmYWRmNTdhOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCkBAIC0yNDMsNiArMjQzLDcgQEAg
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25JbnQzMlRvU3RyaW5nV2l0aFZhbGlkUmFkaXgo
SlNHbG9iYWxPYmplY3QqLCBpbnQzMl8KIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50
NTJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEpTR2xvYmFsT2JqZWN0KiwgaW50NjRfdCwgaW50MzJf
dCk7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRvdWJsZVRvU3RyaW5nV2l0aFZhbGlk
UmFkaXgoSlNHbG9iYWxPYmplY3QqLCBkb3VibGUsIGludDMyX3QpOwogCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleShWTSosIEVuY29kZWRKU1Zh
bHVlIGlucHV0KSBXVEZfSU5URVJOQUw7CiBVQ1BVU3RyaWN0SW50MzIgSklUX09QRVJBVElPTiBv
cGVyYXRpb25NYXBIYXNoKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpOwog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKIEpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IGUzMGQ2NmUwODE5ZmMxNDEzZTZmY2Q0YTYy
YmMxZGU1ZWQxNTVhYzAuLjA3ZDczYjliMWIzMTEyODczZDhhOWEwMzNjMjQ2ZGU1ZGVkMDY1ZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CkBAIC0xMjUxNyw2ICsxMjUxNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm9y
bWFsaXplTWFwS2V5KE5vZGUqIG5vZGUpCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBwYXNz
VGhyb3VnaENhc2VzOwogICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZUNhc2VzOwogCisg
ICAgYXV0byBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwoa2V5UmVncyk7CisgICAg
cGFzc1Rocm91Z2hDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RIZWFwQmlnSW50KGtleVJl
Z3MucGF5bG9hZEdQUigpKSk7CisgICAgYXV0byBzbG93UGF0aCA9IG1faml0Lmp1bXAoKTsKKyAg
ICBpc05vdENlbGwubGluaygmbV9qaXQpOworCiAgICAgcGFzc1Rocm91Z2hDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoa2V5UmVncywgc2NyYXRjaEdQUikpOwogICAgIHBhc3NU
aHJvdWdoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmSW50MzIoa2V5UmVncykpOwogCkBAIC0x
MjUzOSw2ICsxMjU0NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3JtYWxpemVN
YXBLZXkoTm9kZSogbm9kZSkKIAogICAgIHBhc3NUaHJvdWdoQ2FzZXMubGluaygmbV9qaXQpOwog
ICAgIG1faml0Lm1vdmVWYWx1ZVJlZ3Moa2V5UmVncywgcmVzdWx0UmVncyk7CisgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25Ob3Jt
YWxpemVNYXBLZXksIHJlc3VsdFJlZ3MsICZ2bSgpLCBrZXlSZWdzKSk7CiAKICAgICBkb25lQ2Fz
ZXMubGluaygmbV9qaXQpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApp
bmRleCAwMzkzMDdmMTJkOWY1NTAxY2ZiNjNhM2MzZDIzZjExMmM2MzVkOTUzLi5mMDhmNTUyMjFj
Y2M4MTdkYTM0NmNmZWMxOTkwOTI4ZTNiOGM0YmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTQ0MzEsNiArNDQzMSw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgTWFw
SGFzaDogewogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworI2lm
IFVTRShCSUdJTlQzMikKKyAgICAgICAgY2FzZSBCaWdJbnQzMlVzZToKKyNlbmRpZgogICAgICAg
ICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgIGNhc2Ug
U3ltYm9sVXNlOgpAQCAtNDQ1MCw2ICs0NDUzLDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIEhl
YXBCaWdJbnRVc2U6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGlucHV0KHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0
LmdwcigpOworCisgICAgICAgICAgICBzcGVjdWxhdGVIZWFwQmlnSW50KG5vZGUtPmNoaWxkMSgp
LCBpbnB1dEdQUik7CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbnB1
dEdQUik7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgICAgICAgICAg
c3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKQEAgLTQ0NzIsOCArNDQ4OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG5vZGUtPmNo
aWxkMSgpLCBpbnB1dEdQUik7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBh
dXRvIGlzU3RyaW5nID0gbV9qaXQuYnJhbmNoSWZTdHJpbmcoaW5wdXRHUFIpOworICAgICAgICAg
ICAgICAgIGF1dG8gaXNIZWFwQmlnSW50ID0gbV9qaXQuYnJhbmNoSWZIZWFwQmlnSW50KGlucHV0
R1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgICAgIG1faml0LndhbmdzSW50NjRIYXNoKHJlc3VsdEdQUiwgdGVtcEdQUik7
CisgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzSGVh
cEJpZ0ludCwgdGhpcywgb3BlcmF0aW9uTWFwSGFzaCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgaW5wdXRHUFIpKTsKICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgICAgIGlzU3RyaW5nLmxpbmsoJm1faml0KTsKICAg
ICAgICAgICAgIH0KQEAgLTQ1MTUsNiArNDUzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7
CiAgICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKSk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAg
ICAgYXV0byBpc0hlYXBCaWdJbnQgPSBtX2ppdC5icmFuY2hJZkhlYXBCaWdJbnQoaW5wdXRHUFIp
OwogICAgICAgICBzdHJhaWdodEhhc2guYXBwZW5kKG1faml0LmJyYW5jaElmTm90U3RyaW5nKGlu
cHV0R1BSKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
aW5wdXRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIpOwogICAgICAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZSb3BlU3RyaW5nSW1wbChyZXN1bHRHUFIp
KTsKQEAgLTQ1MjYsNiArNDU0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgc3RyYWlnaHRIYXNoLmxpbmsoJm1faml0KTsKICAgICAgICAgbV9q
aXQubW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQud2FuZ3NJbnQ2NEhh
c2gocmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKGlzSGVhcEJpZ0ludCwgdGhpcywgb3BlcmF0aW9uTWFwSGFzaCwgcmVzdWx0R1BS
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgaW5wdXRHUFIpKTsKICAgICAgICAgZG9uZS5h
cHBlbmQobV9qaXQuanVtcCgpKTsKIAogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CkBA
IC00NTk2LDYgKzQ2MTcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKICAgICAgICAgc3dpdGNoIChub2Rl
LT5jaGlsZDIoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorI2lmIFVT
RShCSUdJTlQzMikKKyAgICAgICAgY2FzZSBCaWdJbnQzMlVzZToKKyNlbmRpZgogICAgICAgICBj
YXNlIEludDMyVXNlOgogICAgICAgICBjYXNlIFN5bWJvbFVzZToKICAgICAgICAgY2FzZSBPYmpl
Y3RVc2U6IHsKQEAgLTQ2MDQsMTEgKzQ2MjgsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBDZWxsVXNlOiB7CisgICAgICAgICAgICAvLyBpZiAoYnVja2V0LmlzU3RyaW5nKCkpIHsK
KyAgICAgICAgICAgIC8vICAgICBpZiAoa2V5LmlzU3RyaW5nKCkpCisgICAgICAgICAgICAvLyAg
ICAgICAgID0+IHNsb3cgcGF0aAorICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChidWNrZXQuaXNI
ZWFwQmlnSW50KCkpIHsKKyAgICAgICAgICAgIC8vICAgICBpZiAoa2V5LmlzSGVhcEJpZ0ludCgp
KQorICAgICAgICAgICAgLy8gICAgICAgICA9PiBzbG93IHBhdGgKKyAgICAgICAgICAgIC8vIH0K
ICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgYnVja2V0R1BSLCBrZXlHUFIpKTsKICAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5k
KG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhidWNrZXRHUFIpKSk7Ci0gICAgICAg
ICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdFN0cmluZyhidWNrZXRHUFIp
KTsKKworICAgICAgICAgICAgYXV0byBpc0J1Y2tldFN0cmluZyA9IG1faml0LmJyYW5jaElmU3Ry
aW5nKGJ1Y2tldEdQUik7CisgICAgICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFu
Y2hJZk5vdEhlYXBCaWdJbnQoYnVja2V0R1BSKSk7CisKKyAgICAgICAgICAgIC8vIGJ1Y2tldCBp
cyBIZWFwQmlnSW50LgorICAgICAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoSWZIZWFwQmlnSW50KGtleUdQUikpOworICAgICAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgLy8gYnVja2V0IGlzIFN0cmluZy4KKyAgICAg
ICAgICAgIGlzQnVja2V0U3RyaW5nLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIGxvb3BBcm91
bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90U3RyaW5nKGtleUdQUikpOwotICAgICAgICAgICAg
Ly8gVGhleSdyZSBib3RoIHN0cmluZ3MuCiAgICAgICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQ2MTks
NiArNDY1OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBIZWFwQmlnSW50VXNlOiB7CisgICAg
ICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IGJ1Y2tldEdQUiwga2V5R1BSKSk7IC8vIFRoZXkncmUgZGVmaW5pdGVseSB0aGUgc2FtZSB2YWx1
ZSwgd2UgZm91bmQgdGhlIGJ1Y2tldCB3ZSB3ZXJlIGxvb2tpbmcgZm9yIQorICAgICAgICAgICAg
bG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGJ1Y2tl
dEdQUikpKTsKKyAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90
SGVhcEJpZ0ludChidWNrZXRHUFIpKTsKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBj
YXNlIFVudHlwZWRVc2U6IHsgCiAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2g2
NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGJ1Y2tldEdQUiwga2V5R1BSKSk7IC8vIFRoZXkncmUg
ZGVmaW5pdGVseSB0aGUgc2FtZSB2YWx1ZSwgd2UgZm91bmQgdGhlIGJ1Y2tldCB3ZSB3ZXJlIGxv
b2tpbmcgZm9yIQogICAgICAgICAgICAgLy8gVGhlIGlucHV0IGtleSBhbmQgYnVja2V0J3Mga2V5
IGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQuIFNvIGlmIDY0LWJpdCBjb21wYXJlIGZhaWxzIGFuZCBv
bmUgaXMgbm90IGEgY2VsbCwgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBlcXVhbC4KQEAgLTQ2MjYs
MTEgKzQ2NzIsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgLy8gZmlyc3QgaXMgYSBjZWxsIGhlcmUuCiAgICAgICAgICAgICBsb29wQXJv
dW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3Moa2V5R1BSKSkpOwog
ICAgICAgICAgICAgLy8gQm90aCBhcmUgY2VsbHMgaGVyZS4KLSAgICAgICAgICAgIGxvb3BBcm91
bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90U3RyaW5nKGJ1Y2tldEdQUikpOwotICAgICAgICAg
ICAgLy8gVGhlIGZpcnN0IGlzIGEgc3RyaW5nIGhlcmUuCi0gICAgICAgICAgICBzbG93UGF0aENh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZlN0cmluZyhrZXlHUFIpKTsKLSAgICAgICAgICAgIC8v
IFRoZSBmaXJzdCBpcyBhIHN0cmluZywgYnV0IHRoZSBzZWNvbmQgaXMgbm90LCB3ZSBjb250aW51
ZSB0byBsb29wIGFyb3VuZC4KKyAgICAgICAgICAgIGF1dG8gaXNCdWNrZXRTdHJpbmcgPSBtX2pp
dC5icmFuY2hJZlN0cmluZyhidWNrZXRHUFIpOworICAgICAgICAgICAgLy8gYnVja2V0IGlzIG5v
dCBTdHJpbmcuCisgICAgICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dEhlYXBCaWdJbnQoYnVja2V0R1BSKSk7CisgICAgICAgICAgICAvLyBidWNrZXQgaXMgSGVhcEJp
Z0ludC4KKyAgICAgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmSGVh
cEJpZ0ludChrZXlHUFIpKTsKICAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisgICAgICAgICAgICAvLyBidWNrZXQgaXMgU3RyaW5nLgorICAgICAgICAgICAgaXNC
dWNrZXRTdHJpbmcubGluaygmbV9qaXQpOworICAgICAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQo
bV9qaXQuYnJhbmNoSWZOb3RTdHJpbmcoa2V5R1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aENh
c2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAppbmRleCBhY2E5ZTQ0YmRhYTg0NDk4ODQ0MWE5ZDc5N2ExZGM2OThlZWQ3OTBi
Li5iODYyNDU4YjJhMjhkNGJmYTZjNTQ2NGZjNzYzNWE3Mzg5YjkwODdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMTI0NCw2ICsxMTI0
NCw5IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisjaWYg
VVNFKEJJR0lOVDMyKQorICAgICAgICBjYXNlIEJpZ0ludDMyVXNlOgorI2VuZGlmCiAgICAgICAg
IGNhc2UgQm9vbGVhblVzZToKICAgICAgICAgY2FzZSBJbnQzMlVzZToKICAgICAgICAgY2FzZSBT
eW1ib2xVc2U6CkBAIC0xMTI1NCw5ICsxMTI1NywxNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBIZWFwQmlnSW50
VXNlOiB7CisgICAgICAgICAgICBMVmFsdWUga2V5ID0gbG93SGVhcEJpZ0ludChtX25vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmNhc3RUb0ludDMyKHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uTWFwSGFzaCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwga2V5KSkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBDZWxsVXNl
OiB7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmcgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNIZWFwQmlnSW50Q2FzZSA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmdIZWFwQmlnSW50Q2FzZSA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOwogCiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTEyNjgsMTIgKzExMjc5LDE5IEBAIGNsYXNzIExvd2VyREZH
VG9CMyB7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzdHJpbmdSZXN1bHQgPSBtX291dC5h
bmNob3IobWFwSGFzaFN0cmluZyh2YWx1ZSwgbV9ub2RlLT5jaGlsZDEoKSkpOwogICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCi0gICAgICAgICAgICBtX291dC5hcHBlbmRU
byhub3RTdHJpbmcsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhu
b3RTdHJpbmcsIGlzSGVhcEJpZ0ludENhc2UpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
SGVhcEJpZ0ludCh2YWx1ZSwgKHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkgJiB+U3BlY1N0
cmluZykpLCB1bnN1cmUoaXNIZWFwQmlnSW50Q2FzZSksIHVuc3VyZShub3RTdHJpbmdIZWFwQmln
SW50Q2FzZSkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc0hlYXBCaWdJbnRDYXNl
LCBub3RTdHJpbmdIZWFwQmlnSW50Q2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBo
ZWFwQmlnSW50UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNhc3RUb0ludDMyKHZtQ2FsbChJ
bnQ2NCwgb3BlcmF0aW9uTWFwSGFzaCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUp
KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZ0hlYXBCaWdJbnRDYXNlLCBjb250aW51YXRpb24pOwog
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90U3RyaW5nUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KHdhbmdzSW50NjRIYXNoKHZhbHVlKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKEludDMyLCBzdHJpbmdSZXN1bHQs
IG5vdFN0cmluZ1Jlc3VsdCkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKEludDMy
LCBzdHJpbmdSZXN1bHQsIGhlYXBCaWdJbnRSZXN1bHQsIG5vdFN0cmluZ1Jlc3VsdCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTExMjk0LDE2ICsxMTMxMiwyMCBAQCBj
bGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIHN0cmFpZ2h0SGFzaCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9j
aygpOwogICAgICAgICBMQmFzaWNCbG9jayBub25FbXB0eVN0cmluZ0Nhc2UgPSBtX291dC5uZXdC
bG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9j
aygpOwogCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJl
KHN0cmFpZ2h0SGFzaCkpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBub3RTdHJpbmdDYXNlKTsKICAg
ICAgICAgTFZhbHVlIGlzU3RyaW5nID0gbV9vdXQuZXF1YWwobV9vdXQubG9hZDhaZXJvRXh0MzIo
dmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksIG1fb3V0LmNvbnN0SW50MzIoU3Ry
aW5nVHlwZSkpOwogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc1N0cmluZywg
dW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVuc3VyZShzdHJhaWdodEhhc2gpKTsKKyAgICAgICAgICAg
IGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKG5vdFN0cmluZ0Nhc2UpKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RTdHJpbmdDYXNlLCBpc1N0cmluZ0Nhc2UpOwor
ICAgICAgICBtX291dC5icmFuY2goaXNIZWFwQmlnSW50KHZhbHVlLCAocHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSAmIH5TcGVjU3RyaW5nKSksIHVuc3VyZShzbG93Q2FzZSksIHVuc3VyZShz
dHJhaWdodEhhc2gpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nhc2UsIG5v
bkVtcHR5U3RyaW5nQ2FzZSk7CiAgICAgICAgIG1fb3V0LmJyYW5jaChpc1JvcGVTdHJpbmcodmFs
dWUsIG1fbm9kZS0+Y2hpbGQxKCkpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KG5vbkVtcHR5
U3RyaW5nQ2FzZSkpOwpAQCAtMTEzMzEsMTYgKzExMzUzLDI5IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgewogICAgICAgICBBU1NFUlQobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSk7CiAKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNIZWFwQmlnSW50Q2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGlzTnVtYmVyQ2FzZSA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIG5vdEludDMyTnVtYmVyQ2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIG5vdE5hTkNhc2UgPSBtX291dC5uZXdCbG9jaygp
OwogICAgICAgICBMQmFzaWNCbG9jayBjb252ZXJ0aWJsZUNhc2UgPSBtX291dC5uZXdCbG9jaygp
OwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwog
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVm
b3JlKGlzTnVtYmVyQ2FzZSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGlzQ2VsbENhc2UpOwogCiAgICAgICAgIExWYWx1ZSBrZXkg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBm
YXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGtleSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05v
dENlbGwoa2V5LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKG5vdENlbGxD
YXNlKSwgdW5zdXJlKGlzQ2VsbENhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpc0Nl
bGxDYXNlLCBpc0hlYXBCaWdJbnRDYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SGVh
cEJpZ0ludChrZXkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzSGVhcEJpZ0ludENh
c2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpc0hlYXBCaWdJbnRDYXNlLCBub3RDZWxs
Q2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJpZ0ludFJlc3VsdCA9IG1fb3V0LmFuY2hv
cih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleSwgbV92bVZhbHVlLCBrZXkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG5vdENlbGxDYXNlLCBpc051bWJlckNhc2UpOwogICAgICAgICBtX291dC5icmFuY2go
aXNOb3ROdW1iZXIoa2V5KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpc051bWJlckNh
c2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhpc051bWJlckNhc2UsIG5vdEludDMyTnVt
YmVyQ2FzZSk7CkBAIC0xMTM2Miw3ICsxMTM5Nyw3IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
SW50NjQsIGZhc3RSZXN1bHQsIG5vcm1hbGl6ZWROYU5SZXN1bHQsIGRvdWJsZVJlc3VsdCwgYm94
ZWRJbnRSZXN1bHQpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RS
ZXN1bHQsIGJpZ0ludFJlc3VsdCwgbm9ybWFsaXplZE5hTlJlc3VsdCwgZG91YmxlUmVzdWx0LCBi
b3hlZEludFJlc3VsdCkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUdldE1hcEJ1Y2tldCgp
CkBAIC0xMTQxOCw2ICsxMTQ1Myw5IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIC8v
IFBlcmZvcm0gT2JqZWN0LmlzKCkKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMigpLnVz
ZUtpbmQoKSkgewogICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisjaWYgVVNFKEJJR0lOVDMyKQor
ICAgICAgICBjYXNlIEJpZ0ludDMyVXNlOgorI2VuZGlmCiAgICAgICAgIGNhc2UgSW50MzJVc2U6
CiAgICAgICAgIGNhc2UgU3ltYm9sVXNlOgogICAgICAgICBjYXNlIE9iamVjdFVzZTogewpAQCAt
MTE0NDEsMTAgKzExNDc5LDI4IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgICAgICAg
ICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgSGVhcEJpZ0ludFVzZTogeworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbm90Qml0RXF1YWwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGtleSwgYnVja2V0S2V5KSwKKyAgICAg
ICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEJpdEVxdWFsKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEJpdEVxdWFsLCBidWNrZXRLZXlJc0NlbGwp
OworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChidWNrZXRLZXkpLAorICAgICAgICAg
ICAgICAgIHVuc3VyZShidWNrZXRLZXlJc0NlbGwpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0NlbGwsIGxvb3BBcm91bmQpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzSGVhcEJpZ0ludChidWNrZXRLZXkpLAorICAgICAg
ICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIENlbGxVc2U6IHsKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdEJpdEVxdWFsID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzQ2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc05vdFN0cmluZyA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc0hlYXBCaWdJbnQg
PSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1
YWwoa2V5LCBidWNrZXRLZXkpLAogICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24p
LCB1bnN1cmUobm90Qml0RXF1YWwpKTsKQEAgLTExNDU1LDEwICsxMTUxMSwxOCBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0Nl
bGwsIGJ1Y2tldEtleUlzU3RyaW5nKTsKICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmlu
ZyhidWNrZXRLZXkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShidWNrZXRLZXlJc1N0cmluZyks
IHVuc3VyZShsb29wQXJvdW5kKSk7CisgICAgICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlz
U3RyaW5nKSwgdW5zdXJlKGJ1Y2tldEtleUlzTm90U3RyaW5nKSk7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzU3RyaW5nLCBidWNrZXRLZXlJc05vdFN0cmluZyk7Cisg
ICAgICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoa2V5LCBwcm92ZW5UeXBlKG1fbm9kZS0+
Y2hpbGQyKCkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9v
cEFyb3VuZCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc05vdFN0
cmluZywgYnVja2V0S2V5SXNIZWFwQmlnSW50KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c0hlYXBCaWdJbnQoYnVja2V0S2V5KSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5
SXNIZWFwQmlnSW50KSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKIAotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGxvb3BBcm91bmQpOwotICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKGlzU3RyaW5nKGtleSksCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhidWNr
ZXRLZXlJc0hlYXBCaWdJbnQsIGxvb3BBcm91bmQpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KGlzSGVhcEJpZ0ludChrZXksIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDIoKSkpLAogICAgICAg
ICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTE0NjcsNiArMTE1MzEsOCBAQCBjbGFzcyBMb3dl
ckRGR1RvQjMgewogICAgICAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNDZWxsID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJvdGhBcmVDZWxscyA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc1N0cmlu
ZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJ
c05vdFN0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBi
dWNrZXRLZXlJc0hlYXBCaWdJbnQgPSBtX291dC5uZXdCbG9jaygpOwogCiAgICAgICAgICAgICBt
X291dC5icmFuY2gobV9vdXQuZXF1YWwoa2V5LCBidWNrZXRLZXkpLAogICAgICAgICAgICAgICAg
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90Qml0RXF1YWwpKTsKQEAgLTExNDgxLDEw
ICsxMTU0NywxOCBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhib3RoQXJlQ2VsbHMsIGJ1Y2tldEtleUlzU3RyaW5nKTsKICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaChpc1N0cmluZyhidWNrZXRLZXkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShi
dWNrZXRLZXlJc1N0cmluZyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisgICAgICAgICAgICAgICAg
dW5zdXJlKGJ1Y2tldEtleUlzU3RyaW5nKSwgdW5zdXJlKGJ1Y2tldEtleUlzTm90U3RyaW5nKSk7
CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzU3RyaW5nLCBidWNrZXRL
ZXlJc05vdFN0cmluZyk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoa2V5LCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQyKCkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoc2xv
d1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhidWNrZXRLZXlJc05vdFN0cmluZywgYnVja2V0S2V5SXNIZWFwQmlnSW50KTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChpc0hlYXBCaWdJbnQoYnVja2V0S2V5KSwKKyAgICAgICAgICAgICAg
ICB1bnN1cmUoYnVja2V0S2V5SXNIZWFwQmlnSW50KSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKIAot
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGxvb3BBcm91bmQp
OwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKGtleSksCisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0hlYXBCaWdJbnQsIGxvb3BBcm91bmQpOworICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzSGVhcEJpZ0ludChrZXksIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDIoKSkpLAogICAgICAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShsb29w
QXJvdW5kKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKaW5kZXggZWMzZmViNmU3MDMwZmEwYzBmZTY1
YTM5YWNkNWIyODc3Y2U4ZDgwNi4uYzk3N2NkY2NiMjk4M2ZhY2EwN2YwNTdkNGM4MzY1MjgxM2Iy
MzVjZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcElt
cGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCkBA
IC0yNDMsOCArMjQzLDEzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgYXJlS2V5c0VxdWFs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYSwKIC8vIEtlZXAgaW4gc3lu
YyB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBERkcgYW5kIEZUTCBub3JtYWxpemF0aW9uLgog
QUxXQVlTX0lOTElORSBKU1ZhbHVlIG5vcm1hbGl6ZU1hcEtleShKU1ZhbHVlIGtleSkKIHsKLSAg
ICBpZiAoIWtleS5pc051bWJlcigpKQorICAgIGlmICgha2V5LmlzTnVtYmVyKCkpIHsKKyNpZiBV
U0UoQklHSU5UMzIpCisgICAgICAgIGlmIChrZXkuaXNIZWFwQmlnSW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoa2V5LmFzSGVhcEJpZ0ludCgpKTsKKyNlbmRp
ZgogICAgICAgICByZXR1cm4ga2V5OworICAgIH0KIAogICAgIGlmIChrZXkuaXNJbnQzMigpKQog
ICAgICAgICByZXR1cm4ga2V5OwpAQCAtMjg3LDYgKzI5Miw5IEBAIEFMV0FZU19JTkxJTkUgdWlu
dDMyX3QganNNYXBIYXNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNW
YWx1ZSB2CiAgICAgICAgIHJldHVybiB3dGZTdHJpbmcuaW1wbCgpLT5oYXNoKCk7CiAgICAgfQog
CisgICAgaWYgKHZhbHVlLmlzSGVhcEJpZ0ludCgpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNI
ZWFwQmlnSW50KCktPmNvbmN1cnJlbnRIYXNoKCk7CisKICAgICByZXR1cm4gd2FuZ3NJbnQ2NEhh
c2goSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7CiB9CiAKQEAgLTMwMyw2ICszMTEsOSBAQCBBTFdB
WVNfSU5MSU5FIE9wdGlvbmFsPHVpbnQzMl90PiBjb25jdXJyZW50SlNNYXBIYXNoKEpTVmFsdWUg
a2V5KQogICAgICAgICByZXR1cm4gaW1wbC0+Y29uY3VycmVudEhhc2goKTsKICAgICB9CiAKKyAg
ICBpZiAoa2V5LmlzSGVhcEJpZ0ludCgpKQorICAgICAgICByZXR1cm4ga2V5LmFzSGVhcEJpZ0lu
dCgpLT5jb25jdXJyZW50SGFzaCgpOworCiAgICAgdWludDY0X3QgcmF3VmFsdWUgPSBKU1ZhbHVl
OjplbmNvZGUoa2V5KTsKICAgICByZXR1cm4gd2FuZ3NJbnQ2NEhhc2gocmF3VmFsdWUpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IDMyYTM3NWQ5
NmRlOTQwNzdhNmZlMTU5ZTEwY2YxODhiODVmZmU0MTIuLmE5ODMzOTllN2Q5NTJkZTY3M2EyNWEy
OGM0YWU3ZGJlMzdlYTFhOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQmlnSW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJQYXJzZUludC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNDMwLDMxICs0MzEsNiBAQCBBTFdBWVNfSU5MSU5FIEpTQmlnSW50OjpJbXBsUmVz
dWx0OjpJbXBsUmVzdWx0KEpTVmFsdWUgdmFsdWUpCiAgICAgOiBwYXlsb2FkKHZhbHVlKQogeyB9
CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdHJ5Q29udmVydFRvQmlnSW50MzIoSlNC
aWdJbnQqIGJpZ0ludCkKLXsKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgaWYgKFVOTElLRUxZKCFi
aWdJbnQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotCi0gICAgaWYgKGJpZ0ludC0+bGVu
Z3RoKCkgPD0gMSkgewotICAgICAgICBpZiAoIWJpZ0ludC0+bGVuZ3RoKCkpCi0gICAgICAgICAg
ICByZXR1cm4ganNCaWdJbnQzMigwKTsKLSAgICAgICAgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0ID0g
YmlnSW50LT5kaWdpdCgwKTsKLSAgICAgICAgaWYgKGJpZ0ludC0+c2lnbigpKSB7Ci0gICAgICAg
ICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1heFZhbHVlID0gLXN0YXRpY19jYXN0PGlu
dDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsKLSAgICAgICAgICAg
IGlmIChkaWdpdCA8PSBtYXhWYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQz
MihzdGF0aWNfY2FzdDxpbnQzMl90Pigtc3RhdGljX2Nhc3Q8aW50NjRfdD4oZGlnaXQpKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1h
eFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpKTsKLSAgICAgICAgICAgIGlmIChkaWdpdCA8PSBtYXhWYWx1ZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdpdCkpOwot
ICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gYmlnSW50OwotfQotCiBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRyeUNvbnZlcnRUb0JpZ0ludDMyKEpTQmlnSW50OjpJ
bXBsUmVzdWx0IGltcGxSZXN1bHQpCiB7CiAgICAgaWYgKCFpbXBsUmVzdWx0LnBheWxvYWQpCkBA
IC0zMDczLDQgKzMwNDksMTMgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6YXNVaW50TihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBuLCBpbnQzMl90IGJpZ0kKIH0KICNlbmRpZgog
Cit1bnNpZ25lZCBKU0JpZ0ludDo6Y29uY3VycmVudEhhc2goKQoreworICAgIEhhc2hlciBoYXNo
ZXI7CisgICAgV1RGOjphZGQoaGFzaGVyLCBtX3NpZ24pOworICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IGxlbmd0aCgpOyArK2luZGV4KQorICAgICAgICBXVEY6OmFkZChoYXNo
ZXIsIGRpZ2l0KGluZGV4KSk7CisgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCaWdJbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5k
ZXggYjU4NGZiYmVlYTRmZjU5ZmNhZjZlODhkOTI1ZjQxNjQzMGJmNWM3OC4uMjQ2MGRkOGQ2NDQy
NDM1MWMxZTI0MzNjZGRhYTQ5Mzg0YmJiODRjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JpZ0ludC5oCkBAIC00MjcsNiArNDI3LDggQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU0JpZ0ludCogcmlnaHRU
cmltKEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNCaWdJbnQqIHRy
eVJpZ2h0VHJpbShWTSYpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgY29uY3Vy
cmVudEhhc2goKTsKKwogcHJpdmF0ZToKICAgICBKU0JpZ0ludChWTSYsIFN0cnVjdHVyZSosIERp
Z2l0KiwgdW5zaWduZWQgbGVuZ3RoKTsKIApAQCAtNjA4LDQgKzYxMCwyOSBAQCBBTFdBWVNfSU5M
SU5FIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IGludmVydEJpZ0ludENvbXBhcmVSZXN1bHQo
SlNCaWdJbnQ6OkNvbQogICAgIH0KIH0KIAorQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKEpTQmlnSW50KiBiaWdJbnQpCit7CisjaWYgVVNFKEJJR0lOVDMyKQorICAg
IGlmIChVTkxJS0VMWSghYmlnSW50KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKworICAg
IGlmIChiaWdJbnQtPmxlbmd0aCgpIDw9IDEpIHsKKyAgICAgICAgaWYgKCFiaWdJbnQtPmxlbmd0
aCgpKQorICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CisgICAgICAgIEpTQmlnSW50
OjpEaWdpdCBkaWdpdCA9IGJpZ0ludC0+ZGlnaXQoMCk7CisgICAgICAgIGlmIChiaWdJbnQtPnNp
Z24oKSkgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBtYXhWYWx1ZSA9
IC1zdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4o
KSk7CisgICAgICAgICAgICBpZiAoZGlnaXQgPD0gbWF4VmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRpY19jYXN0PGludDY0
X3Q+KGRpZ2l0KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50NjRfdCBtYXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7CisgICAgICAgICAgICBpZiAoZGlnaXQgPD0gbWF4
VmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oZGlnaXQpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGJp
Z0ludDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCmluZGV4IDg3NDI0NmMzYzI3ZGEw
YWE1Yzg5NWFlMDg2NzhkNWQ0NDRhODJhYmQuLjUyZWIyMzQyMTFkMzY5YzhlM2UwOWFjNzViZDhj
NDRkYTA2Mzk1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hlci5oCkBAIC00Nyw2ICs0Nyw3IEBAIGNsYXNzIEludGVnZXJIYXNo
ZXIgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gdWludDMyX3QgY29tcHV0ZUhhc2go
Y29uc3QgVHlwZXMmLi4uKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIE90aGVy
VHlwZXM+IHVpbnQzMl90IGNvbXB1dGVIYXNoKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiwgc3Rk
Ojppbml0aWFsaXplcl9saXN0PE90aGVyVHlwZXM+Li4uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFVu
c2lnbmVkSW50ZWdlcj4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3Vuc2lnbmVkPFVuc2lnbmVk
SW50ZWdlcj46OnZhbHVlICYmIHNpemVvZihVbnNpZ25lZEludGVnZXIpIDw9IHNpemVvZih1aW50
MzJfdCksIHZvaWQ+IGFkZChIYXNoZXImLCBVbnNpZ25lZEludGVnZXIpOwogCiBjbGFzcyBIYXNo
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNzUsNiArNzYsMTEgQEAgY2xh
c3MgSGFzaGVyIHsKICAgICAgICAgaGFzaGVyLm1fdW5kZXJseWluZ0hhc2hlci5hZGRDaGFyYWN0
ZXJzQXNzdW1pbmdBbGlnbmVkKHNpemVkSW50ZWdlciwgc2l6ZWRJbnRlZ2VyID4+IDE2KTsKICAg
ICB9CiAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3VuZGVybHlpbmdIYXNoZXIuaGFzaCgpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmdI
YXNoZXIgbV91bmRlcmx5aW5nSGFzaGVyOwogfTsKQEAgLTkxLDYgKzk3LDExIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFNpZ25lZEFyaXRobWV0aWM+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zaWdu
ZWQ8U2lnbmVkQXJpdGhtCiAgICAgYWRkKGhhc2hlciwgc3RhdGljX2Nhc3Q8c3RkOjptYWtlX3Vu
c2lnbmVkX3Q8U2lnbmVkQXJpdGhtZXRpYz4+KG51bWJlcikpOwogfQogCitpbmxpbmUgdm9pZCBh
ZGQoSGFzaGVyJiBoYXNoZXIsIGJvb2wgYm9vbGVhbikKK3sKKyAgICBhZGQoaGFzaGVyLCBzdGF0
aWNfY2FzdDx1aW50OF90Pihib29sZWFuKSk7Cit9CisKIGlubGluZSB2b2lkIGFkZChIYXNoZXIm
IGhhc2hlciwgZG91YmxlIG51bWJlcikKIHsKICAgICBhZGQoaGFzaGVyLCBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KG51bWJlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNmVmNWExMzBmY2U1YThkNjMzOTgzZTc1
ZGViNmJjYzg4ODRmMGU4MS4uMTEyNDRiZmQ0YjA2NzkyY2Y1Yzk1YmI2ZWRjOTliMzI3YTdkOWU3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0zMDU0LDcgKzMwNTQsNyBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXpl
ciA6IENsb25lQmFzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxv
dyhiaWdJbnQpOwotICAgICAgICAgICAgcmV0dXJuIGJpZ0ludDsKKyAgICAgICAgICAgIHJldHVy
biB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaWdJbnQpOwogICAgICAgICB9CiAjZW5kaWYKICAgICAg
ICAgSlNCaWdJbnQqIGJpZ0ludCA9IG51bGxwdHI7CkBAIC0zMDk0LDcgKzMwOTQsNyBAQCBjbGFz
cyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOwogICAgICAgICB9CiAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25P
dmVyZmxvdyhiaWdJbnQpOwotICAgICAgICByZXR1cm4gYmlnSW50OworICAgICAgICByZXR1cm4g
dHJ5Q29udmVydFRvQmlnSW50MzIoYmlnSW50KTsKICAgICB9CiAKICAgICBKU1ZhbHVlIHJlYWRU
ZXJtaW5hbCgpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDM5YzNmM2RmNGI1ZGU1ZGFjM2M3NjI0OTQzOWQ4OTQ3NDE5YWE1YTQuLjU3OGRm
ZDFlYjM5NDAyZmIyZGQ0YWJmNWNjNWRhOWQ0NzNkMWVlZGIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjAt
MDktMjAgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlND
XSBCaWdJbnQgc2hvdWxkIHdvcmsgd2l0aCBNYXAgLyBTZXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjY2NworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNjkxMDcyMjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdHJlc3MvYmlnaW50LWFuZC1tYXAtc2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKHNo
b3VsZEJlKToKKyAgICAgICAgKG9wYXF1ZTFuKToKKyAgICAgICAgKHRlc3RNYXApOgorICAgICAg
ICAobGV0LnNldCBuZXcpOgorICAgICAgICAqIHN0cmVzcy9iaWdpbnQtc3RyaW5nLW1hcC1zZXQu
anM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAodGVzdE1hcCk6CisgICAg
ICAgICogc3RyZXNzL2JpZ2ludDMyLW1hcC1zZXQuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxk
QmUpOgorICAgICAgICAodGVzdE1hcCk6CisKIDIwMjAtMDktMTggIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBHZW5lcmF0b3IgZGVjbGFyYXRpb24g
c2hvdWxkIG5vdCBiZSBhbGxvd2VkIGluIHNpbmdsZSBzdGF0ZW1lbnQgY29udGV4dApkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvYmlnaW50LWFuZC1tYXAtc2V0LmpzIGIvSlNUZXN0cy9zdHJl
c3MvYmlnaW50LWFuZC1tYXAtc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmMWNjZWE4YTBkNThjODRlNDZl
MjM1ZDg1MzAwOTg0MWNjNzhjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9i
aWdpbnQtYW5kLW1hcC1zZXQuanMKQEAgLTAsMCArMSw0NCBAQAorZnVuY3Rpb24gc2hvdWxkQmUo
YWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9u
IG9wYXF1ZTFuKCkKK3sKKyAgICByZXR1cm4gMW47Cit9Citub0lubGluZShvcGFxdWUxbik7CisK
K2Z1bmN0aW9uIHRlc3RNYXAobWFwKSB7CisgICAgbWFwLnNldCgxbiwgNDIpOworICAgIHNob3Vs
ZEJlKG1hcC5oYXMoMW4pLCB0cnVlKTsKKyAgICBzaG91bGRCZShtYXAuaGFzKG9wYXF1ZTFuKCkp
LCB0cnVlKTsKKyAgICBzaG91bGRCZShtYXAuaGFzKGNyZWF0ZUhlYXBCaWdJbnQob3BhcXVlMW4o
KSkpLCB0cnVlKTsKKyAgICBzaG91bGRCZShtYXAuZ2V0KDFuKSwgNDIpOworICAgIHNob3VsZEJl
KG1hcC5nZXQob3BhcXVlMW4oKSksIDQyKTsKKyAgICBzaG91bGRCZShtYXAuZ2V0KGNyZWF0ZUhl
YXBCaWdJbnQob3BhcXVlMW4oKSkpLCA0Mik7CisgICAgbWFwLnNldCgxbiwgNDApOworICAgIHNo
b3VsZEJlKG1hcC5nZXQoMW4pLCA0MCk7CisgICAgc2hvdWxkQmUobWFwLmdldChvcGFxdWUxbigp
KSwgNDApOworICAgIHNob3VsZEJlKG1hcC5nZXQoY3JlYXRlSGVhcEJpZ0ludChvcGFxdWUxbigp
KSksIDQwKTsKK30KK25vSW5saW5lKHRlc3RNYXApOworCitmdW5jdGlvbiB0ZXN0U2V0KHNldCkg
eworICAgIHNldC5hZGQoMW4pOworICAgIHNob3VsZEJlKHNldC5oYXMoMW4pLCB0cnVlKTsKKyAg
ICBzaG91bGRCZShzZXQuaGFzKG9wYXF1ZTFuKCkpLCB0cnVlKTsKKyAgICBzaG91bGRCZShzZXQu
aGFzKGNyZWF0ZUhlYXBCaWdJbnQob3BhcXVlMW4oKSkpLCB0cnVlKTsKKyAgICBzZXQuZGVsZXRl
KGNyZWF0ZUhlYXBCaWdJbnQob3BhcXVlMW4oKSkpOworICAgIHNob3VsZEJlKHNldC5oYXMoMW4p
LCBmYWxzZSk7CisgICAgc2hvdWxkQmUoc2V0LmhhcyhvcGFxdWUxbigpKSwgZmFsc2UpOworICAg
IHNob3VsZEJlKHNldC5oYXMoY3JlYXRlSGVhcEJpZ0ludChvcGFxdWUxbigpKSksIGZhbHNlKTsK
K30KK25vSW5saW5lKHRlc3RTZXQpOworCitsZXQgbWFwID0gbmV3IE1hcCgpOworbGV0IHNldCA9
IG5ldyBTZXQoKTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICB0ZXN0TWFw
KG1hcCk7CisgICAgdGVzdFNldChzZXQpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mv
YmlnaW50LXN0cmluZy1tYXAtc2V0LmpzIGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50LXN0cmluZy1t
YXAtc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0ZDhkMjk5MjE0Nzg5OGJjMzdhMDgzZWRlYWZlOWRjMDI5
MDcxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtc3RyaW5nLW1h
cC1zZXQuanMKQEAgLTAsMCArMSw3NyBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBl
Y3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNYXAobWFw
LCBrZXkpCit7CisgICAgcmV0dXJuIG1hcC5oYXMoa2V5KTsKK30KK25vSW5saW5lKHRlc3RNYXAp
OworCitmdW5jdGlvbiB0ZXN0U2V0KHNldCwga2V5KQoreworICAgIHJldHVybiBzZXQuaGFzKGtl
eSk7Cit9Citub0lubGluZSh0ZXN0U2V0KTsKKworbGV0IG1hcCA9IG5ldyBNYXAoKTsKK21hcC5z
ZXQoIkhleSIsICJIZXkiKTsKK21hcC5zZXQobnVsbCwgbnVsbCk7CittYXAuc2V0KDFuLCAxbik7
CittYXAuc2V0KDJuLCAybik7CittYXAuc2V0KDB4ZmZmZmZmZmZmZmZmZmZmZm4sIDB4ZmZmZmZm
ZmZmZmZmZmZmZm4pOworbWFwLnNldCgiSGVsbG8iLCAiSGVsbG8iKTsKKworbGV0IHNldCA9IG5l
dyBTZXQoKTsKK3NldC5hZGQoIkhleSIpOworc2V0LmFkZChudWxsKTsKK3NldC5hZGQoMW4pOwor
c2V0LmFkZCgybik7CitzZXQuYWRkKDB4ZmZmZmZmZmZmZmZmZmZmZm4pOworc2V0LmFkZCgiSGVs
bG8iKTsKKworLy8gU3RyaW5nCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAg
c2hvdWxkQmUodGVzdE1hcChtYXAsICJIZXkiKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNl
dChzZXQsICJIZXkiKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAsICJIZXkxIiks
IGZhbHNlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgIkhleTEiKSwgZmFsc2UpOworICAg
IHNob3VsZEJlKHRlc3RNYXAobWFwLCAiSGVsbG8iKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVz
dFNldChzZXQsICJIZWxsbyIpLCB0cnVlKTsKK30KKworLy8gQ2VsbAorZm9yIChsZXQgaSA9IDA7
IGkgPCAxZTQ7ICsraSkgeworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCAiSGV5IiksIHRydWUp
OworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCAiSGV5IiksIHRydWUpOworICAgIHNob3VsZEJl
KHRlc3RNYXAobWFwLCAiSGV5MSIpLCBmYWxzZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQs
ICJIZXkxIiksIGZhbHNlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgIkhlbGxvIiksIHRy
dWUpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCAiSGVsbG8iKSwgdHJ1ZSk7CisgICAgc2hv
dWxkQmUodGVzdE1hcChtYXAsIGNyZWF0ZUhlYXBCaWdJbnQoMHhmZmZmZmZmZmZmZmZmZmZmbikp
LCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgY3JlYXRlSGVhcEJpZ0ludCgweGZm
ZmZmZmZmZmZmZmZmZmZuKSksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCBjcmVh
dGVIZWFwQmlnSW50KDB4MWZmZmZmZmZmZmZmZmZmZmZuKSksIGZhbHNlKTsKKyAgICBzaG91bGRC
ZSh0ZXN0U2V0KHNldCwgY3JlYXRlSGVhcEJpZ0ludCgweDFmZmZmZmZmZmZmZmZmZmZmbikpLCBm
YWxzZSk7Cit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICBzaG91bGRC
ZSh0ZXN0TWFwKG1hcCwgIkhleSIpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwg
IkhleSIpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgIkhleTEiKSwgZmFsc2Up
OworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCAiSGV5MSIpLCBmYWxzZSk7CisgICAgc2hvdWxk
QmUodGVzdE1hcChtYXAsICJIZWxsbyIpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNl
dCwgIkhlbGxvIiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCBjcmVhdGVIZWFw
QmlnSW50KDB4ZmZmZmZmZmZmZmZmZmZmZm4pKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNl
dChzZXQsIGNyZWF0ZUhlYXBCaWdJbnQoMHhmZmZmZmZmZmZmZmZmZmZmbikpLCB0cnVlKTsKKyAg
ICBzaG91bGRCZSh0ZXN0TWFwKG1hcCwgY3JlYXRlSGVhcEJpZ0ludCgweDFmZmZmZmZmZmZmZmZm
ZmZmbikpLCBmYWxzZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsIGNyZWF0ZUhlYXBCaWdJ
bnQoMHgxZmZmZmZmZmZmZmZmZmZmZm4pKSwgZmFsc2UpOworICAgIHNob3VsZEJlKHRlc3RNYXAo
bWFwLCBjcmVhdGVIZWFwQmlnSW50KDFuKSksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RTZXQo
c2V0LCBjcmVhdGVIZWFwQmlnSW50KDFuKSksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAo
bWFwLCAxbiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCAxbiksIHRydWUpOwor
ICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCAybiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RT
ZXQoc2V0LCAybiksIHRydWUpOworICAgIHNob3VsZEJlKHRlc3RNYXAobWFwLCAzbiksIGZhbHNl
KTsKKyAgICBzaG91bGRCZSh0ZXN0U2V0KHNldCwgM24pLCBmYWxzZSk7Cit9CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQzMi1tYXAtc2V0LmpzIGIvSlNUZXN0cy9zdHJlc3MvYmln
aW50MzItbWFwLXNldC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lN2QwY2VkMDFlMjVkNzE1MTJjYjFjYzFmMTdi
NWE3YzNiYzk2NGFjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50MzIt
bWFwLXNldC5qcwpAQCAtMCwwICsxLDQxIEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4
cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gdGVzdE1hcCht
YXAsIGtleSkKK3sKKyAgICByZXR1cm4gbWFwLmhhcyhrZXkpOworfQorbm9JbmxpbmUodGVzdE1h
cCk7CisKK2Z1bmN0aW9uIHRlc3RTZXQoc2V0LCBrZXkpCit7CisgICAgcmV0dXJuIHNldC5oYXMo
a2V5KTsKK30KK25vSW5saW5lKHRlc3RTZXQpOworCitsZXQgbWFwID0gbmV3IE1hcCgpOworbWFw
LnNldCgiSGV5IiwgIkhleSIpOworbWFwLnNldChudWxsLCBudWxsKTsKK21hcC5zZXQoMW4sIDFu
KTsKK21hcC5zZXQoMm4sIDJuKTsKK21hcC5zZXQoMHhmZmZmZmZmZmZmZmZmZmZmbiwgMHhmZmZm
ZmZmZmZmZmZmZmZmbik7CittYXAuc2V0KCJIZWxsbyIsICJIZWxsbyIpOworCitsZXQgc2V0ID0g
bmV3IFNldCgpOworc2V0LmFkZCgiSGV5Iik7CitzZXQuYWRkKG51bGwpOworc2V0LmFkZCgxbik7
CitzZXQuYWRkKDJuKTsKK3NldC5hZGQoMHhmZmZmZmZmZmZmZmZmZmZmbik7CitzZXQuYWRkKCJI
ZWxsbyIpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgc2hvdWxkQmUo
dGVzdE1hcChtYXAsIDFuKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdFNldChzZXQsIDFuKSwg
dHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAsIDJuKSwgdHJ1ZSk7CisgICAgc2hvdWxk
QmUodGVzdFNldChzZXQsIDJuKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdE1hcChtYXAsIDNu
KSwgZmFsc2UpOworICAgIHNob3VsZEJlKHRlc3RTZXQoc2V0LCAzbiksIGZhbHNlKTsKK30K
</data>
<flag name="review"
          id="424858"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409772</attachid>
            <date>2020-09-26 01:47:58 -0700</date>
            <delta_ts>2020-09-26 01:47:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216667-20200926014757.patch</filename>
            <type>text/plain</type>
            <size>14854</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
OWI2YTBjYmU4NWNkYTQ2ZTdiZDA5YjExNmU4NDY1NjVjMWNiZjlhLi44MDc4ZWRmNzEyZmRkMzdj
ZmVlM2JmODE4OTZmNTExZmY1N2I1MjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAyMC0wOS0yNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFVucmV2aWV3ZWQsIGZvbGxvdy11cCBhZnRlciByMjY3MzczIHRvIHJlc29s
dmUgcG9zdC1jb21taXQgcmV2aWV3IGNvbW1lbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2NjcKKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFu
dEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5vcm1hbGl6ZU1hcEtleSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hcEhhc2gpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlTm9ybWFsaXplTWFwS2V5KToKKyAgICAgICAgKiBydW50aW1l
L0hhc2hNYXBJbXBsLmg6CisgICAgICAgIChKU0M6OmpzTWFwSGFzaCk6CisKIDIwMjAtMDktMjUg
IFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgICVUeXBl
ZEFycmF5JS57ZnJvbSwgb2Z9IG5vIGxvbmdlciBwZXJmb3JtIEFsbG9jYXRlVHlwZWRBcnJheQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCmluZGV4IDYxYTE5NzlkYjhjZWU1NDk4N2UyMzkxZjU4MTA5N2UzNmYz
OGVmMDUuLmFmZTg5ZjFmNzFiY2E2ZjRjMTRkODk5YjYyOGYxMDI3N2Y5OGY2YzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKQEAgLTEzODEsOCArMTM4MSw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1p
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHR5cGVNYXliZU5vcm1hbGl6ZWQgPSAoU3BlY0Z1bGxOdW1iZXIgJiB+U3BlY0ludDMyT25seSkg
fCBTcGVjSGVhcEJpZ0ludDsKLSAgICAgICAgaWYgKCEoZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlICYgdHlwZU1heWJlTm9ybWFsaXplZCkpIHsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
dHlwZXNOZWVkaW5nTm9ybWFsaXphdGlvbiA9IChTcGVjRnVsbE51bWJlciAmIH5TcGVjSW50MzJP
bmx5KSB8IFNwZWNIZWFwQmlnSW50OworICAgICAgICBpZiAoIShmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUgJiB0eXBlc05lZWRpbmdOb3JtYWxpemF0aW9uKSkgewogICAgICAgICAgICAg
bV9zdGF0ZS5zZXRTaG91bGRUcnlDb25zdGFudEZvbGRpbmcodHJ1ZSk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAKaW5kZXggOThjZjhiODJkNzMxNGVmODZkM2M5NjVjNTU4Njg1N2U0NjE2ZmU4
Ni4uNjc3ZjY0Y2JjOWMxMGQ2ZDY4MGRlYzQ3NjllOGU0YzNmMjNkM2Y5YSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
QEAgLTkwOSw4ICs5MDksOCBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1YmxpYyBQ
aGFzZSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhc2UgTm9ybWFsaXplTWFwS2V5
OiB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZU1heWJlTm9ybWFsaXplZCA9
IChTcGVjRnVsbE51bWJlciAmIH5TcGVjSW50MzJPbmx5KSB8IFNwZWNIZWFwQmlnSW50OwotICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAm
IHR5cGVNYXliZU5vcm1hbGl6ZWQpCisgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlw
ZXNOZWVkaW5nTm9ybWFsaXphdGlvbiA9IChTcGVjRnVsbE51bWJlciAmIH5TcGVjSW50MzJPbmx5
KSB8IFNwZWNIZWFwQmlnSW50OworICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSAmIHR5cGVzTmVlZGluZ05vcm1hbGl6YXRpb24pCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
SWRlbnRpdHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CmluZGV4IGQ0ZTkyNTEzMmMxYjUyZDBkNGVhYjY0NzdmYTllMDExNjcyYThlZGUuLjAxYzc2ODBm
NTlhN2YyZmMyYTc0MjE3N2I4ZTZhZTkzODNkNDRkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMzIxMiwxMiArMzIxMiwxMiBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1pY1Zhck5vblN0cmljdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBwdXREeW5hbWljVmFyKGdsb2JhbE9iamVjdCwg
dm0sIHNjb3BlLCB2YWx1ZSwgaW1wbCwgZ2V0UHV0SW5mb0JpdHMsIGlzU3RyaWN0TW9kZSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm9ybWFsaXplTWFwS2V5
KFZNKiB2bVBvaW50ZXIsIEVuY29kZWRKU1ZhbHVlIGlucHV0KQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ob3JtYWxpemVNYXBLZXlIZWFwQmlnSW50KFZNKiB2bVBvaW50
ZXIsIEpTQmlnSW50KiBpbnB1dCkKIHsKICAgICBWTSYgdm0gPSAqdm1Qb2ludGVyOwogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShub3JtYWxpemVNYXBLZXkoSlNWYWx1ZTo6ZGVjb2RlKGlu
cHV0KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobm9ybWFsaXplTWFwS2V5KGlucHV0
KSk7CiB9CiAKIFVDUFVTdHJpY3RJbnQzMiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2go
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpCkBAIC0z
MjI5LDYgKzMyMjksMTUgQEAgVUNQVVN0cmljdEludDMyIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TWFwSGFzaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmMKICAgICByZXR1cm4gdG9V
Q1BVU3RyaWN0SW50MzIoanNNYXBIYXNoKGdsb2JhbE9iamVjdCwgdm0sIEpTVmFsdWU6OmRlY29k
ZShpbnB1dCkpKTsKIH0KIAorVUNQVVN0cmljdEludDMyIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TWFwSGFzaEhlYXBCaWdJbnQoVk0qIHZtUG9pbnRlciwgSlNCaWdJbnQqIGlucHV0KQoreworICAg
IFZNJiB2bSA9ICp2bVBvaW50ZXI7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIHJldHVybiB0b1VDUFVTdHJpY3RJbnQzMihq
c01hcEhhc2goaW5wdXQpKTsKK30KKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpT
TWFwRmluZEJ1Y2tldChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG1hcCwg
RW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaApp
bmRleCAzMDFkNDIzZmNlMTk1MmM0OWJhZmI5Zjc1YzI2Y2RkOTBmMTU5YTc4Li45NmUwMjIyMzRh
ZDkzYWE3NWJmNWY3YTZiNjYzMGU0NmY1ZGYwYjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaApAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIERhdGVJbnN0YW5jZTsKK2NsYXNzIEpTQmlnSW50OwogCiBuYW1lc3BhY2UgREZHIHsK
IApAQCAtMjQzLDggKzI0NCw5IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW50MzJU
b1N0cmluZ1dpdGhWYWxpZFJhZGl4KEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfCiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkludDUyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeChKU0dsb2JhbE9i
amVjdCosIGludDY0X3QsIGludDMyX3QpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25E
b3VibGVUb1N0cmluZ1dpdGhWYWxpZFJhZGl4KEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlLCBpbnQz
Ml90KTsKIAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3JtYWxpemVN
YXBLZXkoVk0qLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3JtYWxpemVNYXBLZXlIZWFwQmlnSW50KFZN
KiwgSlNCaWdJbnQqKSBXVEZfSU5URVJOQUw7CiBVQ1BVU3RyaWN0SW50MzIgSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYXBIYXNoKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQp
OworVUNQVVN0cmljdEludDMyIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFwSGFzaEhlYXBCaWdJ
bnQoVk0qLCBKU0JpZ0ludCopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFw
RmluZEJ1Y2tldChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQz
Ml90KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoSlNH
bG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggZTdm
OTViMThkM2M5NTdhMGQ1NzNkOWQ0OGY2OWZlZThlNmY2NzdkMC4uNDBiYzYwMTBjNzg1M2Y5Yjli
Nzc0OTVjZTE0ZjU3YWUwZTdhYTZiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTEyNTgyLDcgKzEyNTgyLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5vcm1hbGl6ZU1hcEtleShOb2RlKiBub2RlKQogCiAgICAgcGFz
c1Rocm91Z2hDYXNlcy5saW5rKCZtX2ppdCk7CiAgICAgbV9qaXQubW92ZVZhbHVlUmVncyhrZXlS
ZWdzLCByZXN1bHRSZWdzKTsKLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleSwgcmVzdWx0UmVncywgJnZt
KCksIGtleVJlZ3MpKTsKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleUhlYXBCaWdJbnQsIE5lZWRUb1Nw
aWxsLCBFeGNlcHRpb25DaGVja1JlcXVpcmVtZW50OjpDaGVja05vdE5lZWRlZCwgcmVzdWx0UmVn
cywgJnZtKCksIGtleVJlZ3MucGF5bG9hZEdQUigpKSk7CiAKICAgICBkb25lQ2FzZXMubGluaygm
bV9qaXQpOwogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAxNjNk
ZTk1ODljNjk5ZDU1MDZjYjhkMTc5Yjc1YTNkNDBjNTI0YmE1Li5hOTIxYzhkNWEyMjkxNzQ5Nzhm
ODcyZDdhMWZkYzg1ODdjYjZkYzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTQ0NzIsOCArNDQ3Miw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CiAgICAgICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAg
ICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBpbnB1dEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoSGVhcEJpZ0lu
dCwgcmVzdWx0R1BSLCAmdm0oKSwgaW5wdXRHUFIpOwogICAgICAgICAgICAgc3RyaWN0SW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC00NTAyLDcgKzQ1MDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICAgICAgYXV0byBpc0hlYXBCaWdJbnQgPSBtX2ppdC5icmFuY2hJZkhl
YXBCaWdJbnQoaW5wdXRHUFIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQud2FuZ3NJbnQ2NEhhc2gocmVzdWx0
R1BSLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoaXNIZWFwQmlnSW50LCB0aGlzLCBvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbnB1dEdQUikpOworICAgICAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChpc0hlYXBCaWdJbnQsIHRoaXMsIG9w
ZXJhdGlvbk1hcEhhc2hIZWFwQmlnSW50LCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1
aXJlbWVudDo6Q2hlY2tOb3ROZWVkZWQsIHJlc3VsdEdQUiwgJnZtKCksIGlucHV0R1BSKSk7CiAg
ICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgICAg
ICBpc1N0cmluZy5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9CkBAIC00NTU2LDcgKzQ1NTUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHN0
cmFpZ2h0SGFzaC5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1faml0Lm1vdmUoaW5wdXRHUFIsIHJl
c3VsdEdQUik7CiAgICAgICAgIG1faml0LndhbmdzSW50NjRIYXNoKHJlc3VsdEdQUiwgdGVtcEdQ
Uik7Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChpc0hlYXBCaWdJ
bnQsIHRoaXMsIG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGlucHV0R1BSKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChpc0hlYXBCaWdJbnQsIHRoaXMsIG9wZXJhdGlvbk1hcEhhc2hIZWFwQmlnSW50LCBO
ZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tSZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVkZWQsIHJl
c3VsdEdQUiwgJnZtKCksIGlucHV0R1BSKSk7CiAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CiAKICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwpAQCAtNDY0OCw3ICs0NjQ3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNr
ZXRHUFIsIGtleUdQUikpOwogICAgICAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGJ1Y2tldEdQUikpKTsKIAotICAgICAgICAgICAgYXV0
byBpc0J1Y2tldFN0cmluZyA9IG1faml0LmJyYW5jaElmU3RyaW5nKGJ1Y2tldEdQUik7CisgICAg
ICAgICAgICBhdXRvIGJ1Y2tldElzU3RyaW5nID0gbV9qaXQuYnJhbmNoSWZTdHJpbmcoYnVja2V0
R1BSKTsKICAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90SGVh
cEJpZ0ludChidWNrZXRHUFIpKTsKIAogICAgICAgICAgICAgLy8gYnVja2V0IGlzIEhlYXBCaWdJ
bnQuCkBAIC00NjU2LDcgKzQ2NTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5qdW1wKCkpOwog
CiAgICAgICAgICAgICAvLyBidWNrZXQgaXMgU3RyaW5nLgotICAgICAgICAgICAgaXNCdWNrZXRT
dHJpbmcubGluaygmbV9qaXQpOworICAgICAgICAgICAgYnVja2V0SXNTdHJpbmcubGluaygmbV9q
aXQpOwogICAgICAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RTdHJp
bmcoa2V5R1BSKSk7CiAgICAgICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00NjgyLDE0ICs0NjgxLDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIC8vIGZpcnN0IGlz
IGEgY2VsbCBoZXJlLgogICAgICAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RDZWxsKEpTVmFsdWVSZWdzKGtleUdQUikpKTsKICAgICAgICAgICAgIC8vIEJvdGggYXJl
IGNlbGxzIGhlcmUuCi0gICAgICAgICAgICBhdXRvIGlzQnVja2V0U3RyaW5nID0gbV9qaXQuYnJh
bmNoSWZTdHJpbmcoYnVja2V0R1BSKTsKKyAgICAgICAgICAgIGF1dG8gYnVja2V0SXNTdHJpbmcg
PSBtX2ppdC5icmFuY2hJZlN0cmluZyhidWNrZXRHUFIpOwogICAgICAgICAgICAgLy8gYnVja2V0
IGlzIG5vdCBTdHJpbmcuCiAgICAgICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFu
Y2hJZk5vdEhlYXBCaWdJbnQoYnVja2V0R1BSKSk7CiAgICAgICAgICAgICAvLyBidWNrZXQgaXMg
SGVhcEJpZ0ludC4KICAgICAgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aElmSGVhcEJpZ0ludChrZXlHUFIpKTsKICAgICAgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CiAgICAgICAgICAgICAvLyBidWNrZXQgaXMgU3RyaW5nLgotICAgICAgICAg
ICAgaXNCdWNrZXRTdHJpbmcubGluaygmbV9qaXQpOworICAgICAgICAgICAgYnVja2V0SXNTdHJp
bmcubGluaygmbV9qaXQpOwogICAgICAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOb3RTdHJpbmcoa2V5R1BSKSk7CiAgICAgICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggOWYzYmI5OWM5OTgzMTBkMmFhZmNm
MWY5MDFhMGE2OWE2MTVmYWY1Ni4uNTJiMTNkMjUyYjFiNDg2NmQ4ZTVlZjFlOTkzYWY2ZGVkNTUw
MTA3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cApAQCAtMTEyOTcsNyArMTEyOTcsNyBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogCiAgICAgICAg
IGNhc2UgSGVhcEJpZ0ludFVzZTogewogICAgICAgICAgICAgTFZhbHVlIGtleSA9IGxvd0hlYXBC
aWdJbnQobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0
VG9JbnQzMih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk1hcEhhc2gsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGtleSkpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmNhc3RUb0ludDMy
KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTWFwSGFzaEhlYXBCaWdJbnQsIG1fdm1WYWx1ZSwga2V5
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTExMzA1LDcgKzExMzA1
LDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3Ry
aW5nID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmlu
ZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0hlYXBCaWdJ
bnRDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0
cmluZ0hlYXBCaWdJbnRDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdFN0cmluZ05vckhlYXBCaWdJbnRDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAK
ICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CkBA
IC0xMTMxOCwxMyArMTEzMTgsMTMgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bm90U3RyaW5nLCBpc0hlYXBCaWdJbnRDYXNlKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChp
c0hlYXBCaWdJbnQodmFsdWUsIChwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNT
dHJpbmcpKSwgdW5zdXJlKGlzSGVhcEJpZ0ludENhc2UpLCB1bnN1cmUobm90U3RyaW5nSGVhcEJp
Z0ludENhc2UpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0hlYXBCaWdJbnQodmFsdWUs
IChwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNTdHJpbmcpKSwgdW5zdXJlKGlz
SGVhcEJpZ0ludENhc2UpLCB1bnN1cmUobm90U3RyaW5nTm9ySGVhcEJpZ0ludENhc2UpKTsKIAot
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNIZWFwQmlnSW50Q2FzZSwgbm90U3RyaW5nSGVh
cEJpZ0ludENhc2UpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaGVhcEJpZ0ludFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihtX291dC5jYXN0VG9JbnQzMih2bUNhbGwoSW50NjQsIG9wZXJhdGlv
bk1hcEhhc2gsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlKSkpOworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oaXNIZWFwQmlnSW50Q2FzZSwgbm90U3RyaW5nTm9ySGVhcEJpZ0lu
dENhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaGVhcEJpZ0ludFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5jYXN0VG9JbnQzMih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk1hcEhh
c2hIZWFwQmlnSW50LCBtX3ZtVmFsdWUsIHZhbHVlKSkpOwogICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RTdHJpbmdI
ZWFwQmlnSW50Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG5vdFN0cmluZ05vckhlYXBCaWdJbnRDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90U3RyaW5nUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHdhbmdzSW50NjRI
YXNoKHZhbHVlKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKQEAg
LTExNDEwLDcgKzExNDEwLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzTm90SGVhcEJpZ0ludChrZXksIChwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkp
ICYgU3BlY0NlbGxDaGVjaykpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzSGVhcEJp
Z0ludENhc2UpKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhpc0hlYXBCaWdJbnRDYXNlLCBu
b3RDZWxsQ2FzZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGJpZ0ludFJlc3VsdCA9IG1fb3V0
LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbk5vcm1hbGl6ZU1hcEtleSwgbV92bVZhbHVl
LCBrZXkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYmlnSW50UmVzdWx0ID0gbV9vdXQuYW5j
aG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uTm9ybWFsaXplTWFwS2V5SGVhcEJpZ0ludCwgbV92
bVZhbHVlLCBrZXkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBpc051bWJlckNhc2UpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKaW5kZXggMTFiZmJkZDEzZmQwMmU0
NzM4N2Y5MTU0OWQ3Yzc3N2U1YmM5NmZjMy4uMTNiOTBmYzhjNmUwNmY1MTYxMWY0ZjIzOWRhZDM0
NTA3NDNjNDQ3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCkBAIC0yNzksNiArMjc5LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHdh
bmdzSW50NjRIYXNoKHVpbnQ2NF90IGtleSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGtleSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNoKEpTQmlnSW50
KiBiaWdJbnQpCit7CisgICAgcmV0dXJuIGJpZ0ludC0+aGFzaCgpOworfQorCiBBTFdBWVNfSU5M
SU5FIHVpbnQzMl90IGpzTWFwSGFzaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYg
dm0sIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShub3JtYWxpemVN
YXBLZXkodmFsdWUpID09IHZhbHVlLCAiV2UgZXhwZWN0IG5vcm1hbGl6ZWQgdmFsdWVzIGZsb3dp
bmcgaW50byB0aGlzIGZ1bmN0aW9uLiIpOwpAQCAtMjkxLDcgKzI5Niw3IEBAIEFMV0FZU19JTkxJ
TkUgdWludDMyX3QganNNYXBIYXNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2
bSwgSlNWYWx1ZSB2CiAgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzSGVhcEJpZ0ludCgpKQotICAg
ICAgICByZXR1cm4gdmFsdWUuYXNIZWFwQmlnSW50KCktPmhhc2goKTsKKyAgICAgICAgcmV0dXJu
IGpzTWFwSGFzaCh2YWx1ZS5hc0hlYXBCaWdJbnQoKSk7CiAKICAgICByZXR1cm4gd2FuZ3NJbnQ2
NEhhc2goSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>