<?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>220716</bug_id>
          
          <creation_ts>2021-01-18 15:35:17 -0800</creation_ts>
          <short_desc>Rework color clamping logic to be more consistent and clear</short_desc>
          <delta_ts>2021-01-21 09:42:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>220684</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1720421</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-18 15:35:17 -0800</bug_when>
    <thetext>Rework color clamping logic to be consistent and clear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720428</commentid>
    <comment_count>1</comment_count>
      <attachid>417850</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-18 16:03:15 -0800</bug_when>
    <thetext>Created attachment 417850
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720436</commentid>
    <comment_count>2</comment_count>
      <attachid>417851</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-18 16:19:13 -0800</bug_when>
    <thetext>Created attachment 417851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720448</commentid>
    <comment_count>3</comment_count>
      <attachid>417855</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-18 18:26:12 -0800</bug_when>
    <thetext>Created attachment 417855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720450</commentid>
    <comment_count>4</comment_count>
      <attachid>417856</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-18 18:30:16 -0800</bug_when>
    <thetext>Created attachment 417856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720703</commentid>
    <comment_count>5</comment_count>
      <attachid>417915</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-19 14:48:26 -0800</bug_when>
    <thetext>Created attachment 417915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720774</commentid>
    <comment_count>6</comment_count>
      <attachid>417932</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-19 17:33:02 -0800</bug_when>
    <thetext>Created attachment 417932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720789</commentid>
    <comment_count>7</comment_count>
      <attachid>417932</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-19 18:49:13 -0800</bug_when>
    <thetext>Comment on attachment 417932
Patch

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

Seems like infinity can be clamped. It’s only NaN that needs a check. Do we really want all those std::isfinite checks?

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:907
&gt; +        if (!std::isfinite(*alpha))
&gt; +            return;

Is the treatment of infinities here something that comes from the DOM specification? Silently ignoring NaN makes some sense to me, although I could also imagine specifying some other behavior. Silently ignoring infinity is more of a surprise.

&gt; Source/WebCore/platform/graphics/Color.h:399
&gt; +            // FIXME: Define meaningful black points for all color types.

I wonder about how strict these functions should be. How far off from the most opaque and black can the color be and still qualify? These are floating point &quot;==&quot; operations in disguise!

&gt; Source/WebCore/platform/graphics/ColorConversion.cpp:82
&gt; +    ASSERT(c &gt;= 0);
&gt; +    ASSERT(c &lt;= 1);

I don’t get the naming: If this function is &quot;clamping&quot; then why does it only accept values in the range [0,1]?

&gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:227
&gt; +// FIXME: This should likely just use hueRotateColorMatrix(amount).

Got to admit I don’t understand what’s going on here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720790</commentid>
    <comment_count>8</comment_count>
      <attachid>417932</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-01-19 18:54:17 -0800</bug_when>
    <thetext>Comment on attachment 417932
Patch

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

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:907
&gt; +        if (!std::isfinite(*alpha))
&gt; +            return;

Does this behavior change need to be tested? What&apos;s the behavior in other browsers?

&gt; Source/WebCore/platform/graphics/Color.cpp:147
&gt; +        else {

else after return

&gt; Source/WebCore/platform/graphics/ColorTypes.h:89
&gt; +        { 0, 360 }

I&apos;m not sure that clamping between 0 and 360 is right for angles (e.g. if they are the result of calc()). We should just mod instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720797</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-19 19:18:02 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #8)
&gt; Comment on attachment 417932 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417932&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:907
&gt; &gt; +        if (!std::isfinite(*alpha))
&gt; &gt; +            return;
&gt; 
&gt; Does this behavior change need to be tested? What&apos;s the behavior in other
&gt; browsers?

Hm, what would this do? It would end up doing this:


    return std::clamp(std::lround(f * 255.0f), 0l, 255l);

with f as NaN, which from my reading is unspecified behavior. 

I don&apos;t think any other browsers implement these non-standard functions, I am not too worried about being more strict with NaN here.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:147
&gt; &gt; +        else {
&gt; 
&gt; else after return

Unfortunately, in this constexpr condition, it is needed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorTypes.h:89
&gt; &gt; +        { 0, 360 }
&gt; 
&gt; I&apos;m not sure that clamping between 0 and 360 is right for angles (e.g. if
&gt; they are the result of calc()). We should just mod instead.

These ranges are really meant to keep the values in the valid range. I don&apos;t believe we currently ever clamp an HSLA value, it would be a bit weird to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720798</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-19 19:21:19 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=220760 needs to be landed first, which resolve the remaining 3 assertions in mac-debug-1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720863</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-20 05:22:22 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 417932 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417932&amp;action=review
&gt; 
&gt; Seems like infinity can be clamped. It’s only NaN that needs a check. Do we
&gt; really want all those std::isfinite checks?
&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:907
&gt; &gt; +        if (!std::isfinite(*alpha))
&gt; &gt; +            return;
&gt; 
&gt; Is the treatment of infinities here something that comes from the DOM
&gt; specification? Silently ignoring NaN makes some sense to me, although I
&gt; could also imagine specifying some other behavior. Silently ignoring
&gt; infinity is more of a surprise.

These functions are non-standard so the spec has nothing to say and the other browsers don&apos;t implemented them. I picked std::isfinite and silent early return, as that seemed to be the pattern in the file for this type of thing, though that is mostly for lengths, so checking for NaN could work here too.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:399
&gt; &gt; +            // FIXME: Define meaningful black points for all color types.
&gt; 
&gt; I wonder about how strict these functions should be. How far off from the
&gt; most opaque and black can the color be and still qualify? These are floating
&gt; point &quot;==&quot; operations in disguise!
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorConversion.cpp:82
&gt; &gt; +    ASSERT(c &gt;= 0);
&gt; &gt; +    ASSERT(c &lt;= 1);
&gt; 
&gt; I don’t get the naming: If this function is &quot;clamping&quot; then why does it only
&gt; accept values in the range [0,1]?

Oh, blerg, those shouldn&apos;t have been left in actually.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterOperation.cpp:227
&gt; &gt; +// FIXME: This should likely just use hueRotateColorMatrix(amount).
&gt; 
&gt; Got to admit I don’t understand what’s going on here.

The existing code for InvertLightnessFilterOperation::transformColor/InvertLightnessFilterOperation::inverseTransformColor used the following pattern:

    auto hsla = toHSLA(color);
    
    // Rotate the hue 180deg.
    hsla.hue = std::fmod(hsla.hue + 0.5f, 1.0f);
    
    // Convert back to RGB.
    auto hueRotatedSRGBA = toSRGBA(hsla);

to rotate the hue. But in InvertLightnessFilterOperation::inverseTransformColor, this was done on after calling:

    auto convertedToLightMode = asSRGBA(toLightModeMatrix.transformedColorComponents(asColorComponents(color)));

and that can create an SRGB color with values greater than 1.0, which we no longer allow and was causing an assertion. If we clamp to SRGB there, we get different results in the hue rotation (manifesting in failing tests). So, what this does is implement the hue rotation directly on the unclamped color components so we clamp only after all the transformations are done.

The comment is indicating that using the conversion to and from HSL is an inefficient way to do a hue rotation and there is a relatively straightforward linear matrix transform that achieves the same effect (which we already implement called hueRotateColorMatrix(amount).

I will beef up the comment to explain this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720886</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-20 07:55:37 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 417932 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417932&amp;action=review
&gt; 
&gt; Seems like infinity can be clamped. It’s only NaN that needs a check. Do we
&gt; really want all those std::isfinite checks?
&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:907
&gt; &gt; +        if (!std::isfinite(*alpha))
&gt; &gt; +            return;
&gt; 
&gt; Is the treatment of infinities here something that comes from the DOM
&gt; specification? Silently ignoring NaN makes some sense to me, although I
&gt; could also imagine specifying some other behavior. Silently ignoring
&gt; infinity is more of a surprise.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:399
&gt; &gt; +            // FIXME: Define meaningful black points for all color types.
&gt; 
&gt; I wonder about how strict these functions should be. How far off from the
&gt; most opaque and black can the color be and still qualify? These are floating
&gt; point &quot;==&quot; operations in disguise!

Actually, I think I have a way to do this. These functions are weird and we should probably remove them, but not today :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720896</commentid>
    <comment_count>13</comment_count>
      <attachid>417972</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-20 08:29:57 -0800</bug_when>
    <thetext>Created attachment 417972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720911</commentid>
    <comment_count>14</comment_count>
      <attachid>417978</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-20 09:36:12 -0800</bug_when>
    <thetext>Created attachment 417978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720931</commentid>
    <comment_count>15</comment_count>
      <attachid>417978</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-01-20 10:49:05 -0800</bug_when>
    <thetext>Comment on attachment 417978
Patch

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

&gt; Source/WebCore/css/parser/CSSParserFastPaths.cpp:490
&gt; +        return makeClampingComponents&lt;SRGBA&lt;uint8_t&gt;&gt;(red, green, blue, alpha); // FIXME: Already clamped, doesn&apos;t need to re-clamp. Update parseColorIntOrPercentage/parseAlphaValue to return uint8_t and replace call to makeClampingComponents&lt;SRGBA&lt;uint8_t&gt;&gt; with direct construction of SRGBA&lt;uint8_t&gt;.

A bit hard to parse: &quot;make components that clamp&quot;, or &quot;make, clamping components in the process&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720944</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-20 11:35:21 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #15)
&gt; Comment on attachment 417978 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417978&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSParserFastPaths.cpp:490
&gt; &gt; +        return makeClampingComponents&lt;SRGBA&lt;uint8_t&gt;&gt;(red, green, blue, alpha); // FIXME: Already clamped, doesn&apos;t need to re-clamp. Update parseColorIntOrPercentage/parseAlphaValue to return uint8_t and replace call to makeClampingComponents&lt;SRGBA&lt;uint8_t&gt;&gt; with direct construction of SRGBA&lt;uint8_t&gt;.
&gt; 
&gt; A bit hard to parse: &quot;make components that clamp&quot;, or &quot;make, clamping
&gt; components in the process&quot;.

Hm, yeah, I am not a huge fan of the name either. Here are some other ideas:

- makeColorByClampingComponents&lt;SRGBA&lt;uint8_t&gt;&gt;(...)
- colorByClampingComponents&lt;SRGBA&lt;uint8_t&gt;&gt;(...)
- clampColorComponentTo&lt;SRGBA&lt;uint8_t&gt;&gt;(...)
- clampColorTo&lt;SRGBA&lt;uint8_t&gt;&gt;(...)
- clampTo&lt;SRGBA&lt;uint8_t&gt;&gt;(...) would require a bit of finagling of the existing clampTo&lt;&gt; but I think I could make it work.

Any other ones?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720968</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-20 12:53:31 -0800</bug_when>
    <thetext>If there’s a make function already, we could use &quot;clamping&quot; as a suffix to that name. If it’s makeFromComponents, then makeFromComponentsClamping would be fine I think.

To get a good name we should be thinking about what we are making (a color object?) from what (from color components in a particular color space?) and what special handling we are including (clamping values? converting to another color space?).

Those other names also seem OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720971</commentid>
    <comment_count>18</comment_count>
      <attachid>417978</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-20 12:57:43 -0800</bug_when>
    <thetext>Comment on attachment 417978
Patch

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

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:907
&gt; +        if (std::isnan(*alpha))
&gt; +            return;

While this is an acceptable rule for the canvas functions, I also think that the clamping functions should either have well-defined behavior if passed NaNs, or assert the passed values are not NaNs.

Kind of annoyed because often we deal with NaNs at the bindings level and maybe we could do that here.

Also if this is not standard and therefore others won’t be adding test coverage to the shared cross-browser test suite, then we should add test coverage of bizarre values.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:1311
&gt; +    if (alpha &amp;&amp; std::isnan(*alpha))
&gt; +        return;

Maybe here we could just translate the NaN to null? Not sure that’s better, but it all seems so arbitrary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720995</commentid>
    <comment_count>19</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-20 14:12:02 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #18)
&gt; Comment on attachment 417978 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417978&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:907
&gt; &gt; +        if (std::isnan(*alpha))
&gt; &gt; +            return;
&gt; 
&gt; While this is an acceptable rule for the canvas functions, I also think that
&gt; the clamping functions should either have well-defined behavior if passed
&gt; NaNs, or assert the passed values are not NaNs.
&gt; 
&gt; Kind of annoyed because often we deal with NaNs at the bindings level and
&gt; maybe we could do that here.
&gt; 
&gt; Also if this is not standard and therefore others won’t be adding test
&gt; coverage to the shared cross-browser test suite, then we should add test
&gt; coverage of bizarre values.

Yes, will add some tests.

&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:1311
&gt; &gt; +    if (alpha &amp;&amp; std::isnan(*alpha))
&gt; &gt; +        return;
&gt; 
&gt; Maybe here we could just translate the NaN to null? Not sure that’s better,
&gt; but it all seems so arbitrary.

We could also throw. It&apos;s definitely a bad value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721034</commentid>
    <comment_count>20</comment_count>
      <attachid>418003</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-20 16:15:18 -0800</bug_when>
    <thetext>Created attachment 418003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721159</commentid>
    <comment_count>21</comment_count>
      <attachid>418039</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-21 07:23:39 -0800</bug_when>
    <thetext>Created attachment 418039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721171</commentid>
    <comment_count>22</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-21 08:26:31 -0800</bug_when>
    <thetext>Invalid ChangeLog at /Volumes/Data/worker/Commit-Queue/build/Tools/ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721177</commentid>
    <comment_count>23</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-21 08:54:17 -0800</bug_when>
    <thetext>Invalid ChangeLog at /Volumes/Data/worker/Commit-Queue/build/Tools/ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721179</commentid>
    <comment_count>24</comment_count>
      <attachid>418045</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-21 08:55:00 -0800</bug_when>
    <thetext>Created attachment 418045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721207</commentid>
    <comment_count>25</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-21 09:41:04 -0800</bug_when>
    <thetext>Committed r271695: &lt;https://trac.webkit.org/changeset/271695&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 418045.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721208</commentid>
    <comment_count>26</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-21 09:42:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/73456131&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417850</attachid>
            <date>2021-01-18 16:03:15 -0800</date>
            <delta_ts>2021-01-18 16:23:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210118160314.patch</filename>
            <type>text/plain</type>
            <size>76975</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIG9mIGFkZGluZyBzdXBwb3J0
IGZvciBFeHRlbmRlZC1zUkdCIHRvIGNvbG9yIHR5cGVzLAorICAgICAgICB0aGlzIGFkZHMgY29u
c3RleHByIG1ldGFkYXRhIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb2xvcgorICAg
ICAgICB0eXBlcyB3aXRoIHRoZSBjb3JyZWN0IGNsYW1wZWQgKG9yIHVuY2xhbXBlZCkgdmFsdWVz
IGFuZCBhZG9wdHMgdGhlbQorICAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuCisKKyAg
ICAgICAgLSBSZW1vdmVzICJjb21wb25lbnQgYnl0ZXMiIGFuZCAiY29tcG9uZW50IGZsb2F0cyIg
Y29uY2VwdHMgcmVwbGFjaW5nCisgICAgICAgICAgd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIGNv
bG9yIHR5cGVzIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnM6CisgICAgICAgICAgCisgICAgICAgICAg
ICBjb252ZXJ0VG9Db21wb25lbnRCeXRlcy9jb252ZXJ0VG9Db21wb25lbnRGbG9hdHMgLT4gY29u
dmVydFRvPENvbG9yVHlwZTxUPj4KKyAgICAgICAgICAgIGNsYW1wVG9Db21wb25lbnRCeXRlcy9j
bGFtcFRvQ29tcG9uZW50RmxvYXRzIC0+IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8Q29sb3JUeXBl
PFQ+PgorCisgICAgICAgIC0gQWRkcyBNb2RlbCB0eXBlIGFsaWFzZXMgdG8gZWFjaCBjb2xvciB0
eXBlIHdoaWNoIGNhbiBzcGVjaWZ5IHRyYWl0cyAKKyAgICAgICAgICBmb3IgdGhhdCB0eXBlIG9m
IGNvbG9yLiBUaGVzZSB0cmFpdHMgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgdmFsaWQgCisg
ICAgICAgICAgY29tcG9uZW50IHJhbmdlcyBhbmQgd2hldGhlciB0aGUgY29sb3IgY2FuIGJlIGlu
dmVydGVkLiBNb3JlIHdpbGwgYmUgCisgICAgICAgICAgYWRkZWQgKGxpa2Ugd2hpdGUgcG9pbnQg
YW5kIGJhc2UgY29sb3Igc3BhY2UpIHRvIGhlbHAgc2ltcGxpZnkgdXRpbGl0eSAKKyAgICAgICAg
ICBhbmQgY29udmVyc2lvbiBjb2RlLiAKKworICAgICAgICAtIEFkZHMgYXNzZXJ0aW9ucyB0byBl
YWNoIGNvbG9yIHR5cGUgY29uc3RydWN0b3IgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZAorICAgICAg
ICAgIGFyZSB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlcyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBNb2Rl
bCkuCisKKyAgICAgICAgLSBSZW1vdmVkIGFzRm9vKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYp
IGZ1bmN0aW9ucywgd2hpY2ggd2VyZSBhIGxpdHRsZSAKKyAgICAgICAgICB0byAgc2ltaWxhcmx5
IG5hbWVkIHRvIHRoZSB0b0ZvbygpIGZ1bmN0aW9ucy4gSW5zdGVhZCwgdGhlIGdlbmVyaWMgCisg
ICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZTxUPj4gKG9yIGl0J3MgY2xhbXBp
bmcgdmFyaWFudHMpIGNhbiBiZSB1c2VkCisgICAgICAgICAgdG8gY29udmVydCBmcm9tIENvbG9y
Q29tcG9uZW50cyB0byBjb2xvciB0eXBlcy4KKworICAgICAgICAtIEFkZHMgQWxwaGFUcmFpdHMg
dG8gbW9kZWwgYWxwaGEgdmFsdWVzIGFzIHRoZXNlIGFyZSBjb25zaXN0ZW50IGJldHdlZW4KKyAg
ICAgICAgICBjb2xvciB0eXBlcyBhbmQgb25seSBjaGFuZ2UgYmFzZWQgb24gY29tcG9uZW50IHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6
CisKIDIwMjEtMDEtMTggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHJlY2VudGx5IGFkZGVkIGdsdWUgY29kZTogUmVuZGVyTGF5
ZXI6OihzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgLyBzZXRTY3JvbGxTaG91bGRD
bGVhckxhdGNoZWRTdGF0ZSAvIHNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMjcxNTY0
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGlj
IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleAogCiAjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfQ09MT1IpCiAgICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpDb2xvcldlbGwpIHsKLSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhjb3JlT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9y
ID0gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCBj
b2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAyNzE1NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAgLSAo
TlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Q29sb3JTdHJpbmdWYQogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAg
ICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG88U1JH
QkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1ZSgpKTsKICAgICAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiICU3LjVmICU3LjVmICU3LjVm
IDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlXTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAyNzE1NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM4NSw3ICsyMzg1LDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gQChi
YWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCkpOwogCiAgICAgICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29t
cG9uZW50RmxvYXRzKGJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgICAgICBh
dXRvIGNvbG9yID0gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oYmFja2luZ09iamVjdC0+Y29sb3JW
YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
InJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3Iu
Ymx1ZV07CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9yZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xv
ci5yZWQpKQogICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5n
cmVlbikpCiAgICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1
ZSkpCi0gICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21w
b25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkpCisgICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFw
cGVyKG93bmVyLCBjb2xvci5hbHBoYUFzRmxvYXQoKSkpCiAgICAgewogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAko
cmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJG
YXN0UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOyAvLyBGSVhNRTogQWxyZWFkeSBjbGFtcGVkLCBk
b2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdl
L3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBhbmQgcmVwbGFjZSBjYWxsIHRvIGNs
YW1wVG9Db21wb25lbnRCeXRlcyB3aXRoIGRpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWlu
dDhfdD4uCisgICAgICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4
X3Q+PihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7IC8vIEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQs
IGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRlIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRh
Z2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50OF90IGFuZCByZXBsYWNlIGNhbGwgdG8g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3Ry
dWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50
YXguCkBAIC01MDUsNyArNTA1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKGN1
cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocmVkLCBncmVlbiwgYmx1ZSk7IC8v
IEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQsIGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRl
IHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50
OF90IGFuZCByZXBsYWNlIGNhbGwgdG8gY2xhbXBUb0NvbXBvbmVudEJ5dGVzIHdpdGggZGlyZWN0
IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KKyAgICAgICAgcmV0dXJuIG1ha2VDbGFt
cGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHJlZCwgZ3JlZW4sIGJsdWUpOyAvLyBGSVhN
RTogQWxyZWFkeSBjbGFtcGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJz
ZUNvbG9ySW50T3JQZXJjZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBh
bmQgcmVwbGFjZSBjYWxsIHRvIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+
IHdpdGggZGlyZWN0IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KICAgICB9CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxNTY0
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIHVpbnQ4X3QgY2xh
bXBSR0JDb21wb25lbnQoZG91YmxlIAogICAgIGlmIChpc1BlcmNlbnRhZ2UpCiAgICAgICAgIHZh
bHVlID0gdmFsdWUgLyAxMDAuMCAqIDI1NS4wOwogCi0gICAgcmV0dXJuIGNvbnZlcnRQcmVzY2Fs
ZWRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JH
QkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlUkdCUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTczOSw3ICs3MzksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIH0KLSAgICAgICAgYWxw
aGFDb21wb25lbnQgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFscGhhKTsKKyAgICAgICAgYWxw
aGFDb21wb25lbnQgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFscGhhKTsKICAgICB9
OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCkBAIC03OTQsNyArNzk0LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKEhTTEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlb
MF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CisgICAgcmV0
dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJy
YXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYSkgfSkpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlT3B0aW9u
YWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI3MTU2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjAxLDcgKzYwMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENv
bnRlbnRJblIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFw
cGVhciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3Ig
Y2FuIGJlIHNwZWNpZmllZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEubGlnaHRuZXNz
ID0gMC41ZjsKICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEuYWxwaGEgKj0gMC4zOGY7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0gY29udmVydFRvQ29t
cG9uZW50Qnl0ZXModG9TUkdCQShoc2xhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHVuZGVybGluZUNvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGEp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgc2VyaWFsaXphdGlvbkZvckNTUyh1bmRl
cmxpbmVDb2xvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3MTU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAwLDE3ICsxMzAwLDE3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
Ymx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzZXRTaGFkb3coRmxv
YXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH0pKTsKKyAgICBzZXRT
aGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG88U1JHQkE8dWlu
dDhfdD4+KFNSR0JBIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfSkp
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9h
dCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCks
IGJsdXIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+PihTUkdCQSB7IHIsIGcsIGIsIGEgfSkpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBh
KQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoQ01ZS0EgeyBjLCBtLCB5LCBrLCBhIH0pKSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKENNWUtBIHsgYywgbSwgeSwgaywgYSB9KSkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI3MTU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3Ig
Y29sb3IpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTUkdCQTxmbG9hdD4m
IGNvbG9yQ29tcG9uZW50cykKLSAgICA6IG1fc3R5bGUoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
Y29sb3JDb21wb25lbnRzKSkKKyAgICA6IG1fc3R5bGUoY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+
Pihjb2xvckNvbXBvbmVudHMpKQogewogfQogCkBAIC0xNDgsNyArMTQ4LDcgQEAgYm9vbCBDYW52
YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAgIHJl
dHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxD
b2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29tcG9uZW50cyk7Cisg
ICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6
Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbXBvbmVu
dHMpOwogfQogCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KFJlZlB0cjxKU09OOjpPYmoKIAogICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUo
UHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKICAgICBpZiAoIWEpCi0gICAgICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOwotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoKmEpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8dWludDhfdD4+KCpyLCAqZywgKmIpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25l
bnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KCpyLCAqZywgKmIsIGNvbnZlcnRGbG9hdEFs
cGhhVG88dWludDhfdD4oKmEpKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3Io
Y29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046Ok9iamVjdCYgY29uZmlnT2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24g
MjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBj
b25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikg
LyB2OwogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlw
bGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1
cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0
aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJr
ZW5lZCgpIGNvbnN0CkBAIC0xMDUsNyArMTA1LDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkg
Y29uc3QKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11
bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlwbGllciAqIHIsIG11bHRpcGxp
ZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNSR0JB
PHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlw
bGllciAqIGIsIGEgfSk7CiB9CiAKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdApAQCAt
MTQxLDcgKzE0MSwxNCBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
CiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QK
IHsKICAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRl
cmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKLSAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgICAgIHVzaW5nIENv
bG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZSh1bmRlcmx5aW5nQ29sb3IpPjsKKyAgICAg
ICAgaWYgY29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCisgICAgICAg
ICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29s
b3IsIGFscGhhKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRGV0ZXJt
aW5lIGlmIHRoZXJlIGlzIGEgbWVhbmluZ2Z1bCB1bmRlcnN0YW5kaW5nIG9mIGludmVyc2lvbiB0
aGF0IHdvcmtzCisgICAgICAgICAgICAvLyBiZXR0ZXIgZm9yIG5vbi1pbnZlcnRpYmxlIGNvbG9y
IHR5cGVzIGxpa2UgTGFiLgorICAgICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CisgICAgICAgIH0K
ICAgICB9KTsKIH0KIApAQCAtMTU3LDcgKzE2NCw3IEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBD
b2xvckNvbXBvbmVudHM8ZmwKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1
cm4geyBhc0V4dGVuZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygp
IH07Ci0gICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydFRvQ29tcG9uZW50RmxvYXRzKGFzSW5saW5lKCkpKSB9OworICAgIHJldHVybiB7IENvbG9y
U3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGFz
SW5saW5lKCkpKSB9OwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8g
YXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0K
ICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50
OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYXNFeHRlbmRlZCgpLmFscGhhKCkpIDogYXNJbmxpbmUoKS5hbHBoYTsgfQot
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydFRvQ29tcG9uZW50RmxvYXQoYXNJbmxpbmUoKS5h
bHBoYSk7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSA/IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oYXNFeHRlbmRlZCgpLmFscGhhKCkp
IDogYXNJbmxpbmUoKS5hbHBoYTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsg
cmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydEJ5dGVB
bHBoYVRvPGZsb2F0Pihhc0lubGluZSgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQg
ZmxvYXQgbHVtaW5hbmNlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRu
ZXNzKCkgY29uc3Q7IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5h
bmNlLgpAQCAtMzMxLDExICszMzEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4g
Q29sb3I6OnRvUwogICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1
aW50OF90PikKICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29sb3IpOwogICAgICAgICB9LAogICAgICAgICBb
XSAoY29uc3QgYXV0byYgY29sb3IpIHsKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoY29sb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGNvbG9yKSk7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKICAgICAgICAgICAgICAgICByZXR1
cm4gdG9TUkdCQShjb2xvcik7CiAgICAgICAgIH0KQEAgLTM5MSwxNSArMzkxLDI3IEBAIGlubGlu
ZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjwKIAogaW5saW5lIGJvb2wgQ29sb3I6
OmlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmNh
bGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICByZXR1
cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xvcik7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVy
bHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIHsKKyAgICAgICAgdXNp
bmcgQ29sb3JUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBlKHVuZGVybHlpbmdDb2xvcik+Owor
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6
TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+KQorICAg
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzQmxhY2sodW5kZXJseWluZ0NvbG9yKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRGVmaW5lIG1lYW5pbmdmdWwgYmxhY2sg
cG9pbnRzIGZvciBhbGwgY29sb3IgdHlwZXMuCisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6
aXNCbGFjayh0b1NSR0JBKHVuZGVybHlpbmdDb2xvcikpOworICAgICAgICB9CiAgICAgfSk7CiB9
CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYg
Y29sb3IpIHsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUoY29sb3IpOworICAgIHJl
dHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWlu
Z0NvbG9yKSB7CisgICAgICAgIHVzaW5nIENvbG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlw
ZSh1bmRlcmx5aW5nQ29sb3IpPjsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6
OkNvbXBvbmVudFR5cGU+PikKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHVu
ZGVybHlpbmdDb2xvcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IERl
ZmluZSBtZWFuaW5nZnVsIHdoaXRlIHBvaW50cyBmb3IgYWxsIGNvbG9yIHR5cGVzLgorICAgICAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpKTsK
KyAgICAgICAgfQogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENv
bG9yJiBiYWNrZAogICAgIGludCBnID0gKGJhY2tkcm9wRyAqIGJhY2tkcm9wQSAqICgweEZGIC0g
c291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUcpIC8gZDsKICAgICBpbnQgYiA9IChi
YWNrZHJvcEIgKiBiYWNrZHJvcEEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEg
KiBzb3VyY2VCKSAvIGQ7CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JB
PihyLCBnLCBiLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1
aW50OF90Pj4ociwgZywgYiwgYSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENv
bG9yJiBjb2xvcikKQEAgLTc4LDcgKzc4LDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3Qg
Q29sb3ImIGNvbG9yKQogICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywg
YWxwaGEpOwogICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEp
OwogCi0gICAgICAgIHJlc3VsdCA9IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywg
YiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PHVpbnQ4X3Q+PihyLCBnLCBiLCBhbHBoYSk7CiAKICAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49
IDAgJiYgYiA+PSAwKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDAsNyArMTAwLDcgQEAgQ29s
b3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGF1dG8gcHJlbXVsdGlw
bGllZEZyb20gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyhmcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpKTsKICAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHByZW11bHRpcGxpZWRDZWlsaW5nKHRv
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpKTsKIAotICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5k
ZWQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIGF1dG8gcHJlbXVsdGlwbGll
ZEJsZW5kZWQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8u
cmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9t
LmdyZWVuLCBwcmVtdWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHBy
b2dyZXNzKSwKQEAgLTEyMCw3ICsxMjAsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAgICAgYXV0byB0b1NSR0IgPSB0by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAot
ICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjggKzMy
LDEwMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWZsb2F0IGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoZmxvYXQgYykKKy8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IK
Ky8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpf
TWF0cml4Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5l
YXJTUkdCTWF0cml4IHsKKyAgICAgMy4yNDA0NTQyZiwgLTEuNTM3MTM4NWYsIC0wLjQ5ODUzMTRm
LAorICAgIC0wLjk2OTI2NjBmLCAgMS44NzYwMTA4ZiwgIDAuMDQxNTU2MGYsCisgICAgIDAuMDU1
NjQzNGYsIC0wLjIwNDAyNTlmLCAgMS4wNTcyMjUyZgorfTsKKworLy8gaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU1JHQgorLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5k
ZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1h
dHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggeworICAgIDAuNDEyNDU2NGYsICAwLjM1
NzU3NjFmLCAgMC4xODA0Mzc1ZiwKKyAgICAwLjIxMjY3MjlmLCAgMC43MTUxNTIyZiwgIDAuMDcy
MTc1MGYsCisgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCit9OworCisv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNv
ZGUKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJEaXNwbGF5
UDNNYXRyaXggeworICAgICAyLjQ5MzQ5NjkxMTk0MTQyNWYsICAtMC45MzEzODM2MTc5MTkxMjM5
ZiwgLTAuNDAyNzEwNzg0NDUwNzE2OGYsCisgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAxLjc2
MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKKyAgICAgMC4wMzU4NDU4MzAy
NDM3ODQ1ZiwgLTAuMDc2MTcyMzg5MjY4MDQxOGYsICAwLjk1Njg4NDUyNDAwNzY4NzJmCit9Owor
CisvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9u
LWNvZGUKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAz
VG9YWVpNYXRyaXggeworICAgIDAuNDg2NTcwOTQ4NjQ4MjE2MmYsIDAuMjY1NjY3NjkzMTY5MDkz
MWYsIDAuMTk4MjE3Mjg1MjM0MzYzZiwKKyAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTcz
ODUyMTgzNjUwNjRmLCAwLjA3OTI4NjkxNDA5Mzc0NWYsCisgICAgMC4wZiwgICAgICAgICAgICAg
ICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCit9OworCisvLyBodHRw
Oi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwK
K3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gRDUwVG9ENjVNYXRyaXggeworICAg
ICAwLjk1NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKKyAgICAtMC4wMjgyODk1Ziwg
IDEuMDA5OTQxNmYsIDAuMDIxMDA3N2YsCisgICAgIDAuMDEyMjk4MmYsIC0wLjAyMDQ4MzBmLCAx
LjMyOTkwOThmCit9OworCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5o
dG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8Mywg
Mz4gRDY1VG9ENTBNYXRyaXggeworICAgICAxLjA0NzgxMTJmLCAwLjAyMjg4NjZmLCAtMC4wNTAx
MjcwZiwKKyAgICAgMC4wMjk1NDI0ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCisgICAgLTAu
MDA5MjM0NWYsIDAuMDE1MDQzNmYsICAwLjc1MjEzMTZmCit9OworCitmbG9hdCBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQgYykKIHsKKyAgICBBU1NFUlQoYyA+PSAwKTsK
KyAgICBBU1NFUlQoYyA8PSAxKTsKKwogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKICAgICAgICAg
cmV0dXJuIDEyLjkyZiAqIGM7CiAKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oMS4wNTVmICog
c3RkOjpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4wNTVmLCAwLCAxKTsKIH0KIAotZmxvYXQgcmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQorZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudENsYW1waW5nKGZsb2F0IGMpCiB7CisgICAgQVNTRVJUKGMgPj0gMCk7CisgICAgQVNT
RVJUKGMgPD0gMSk7CisgICAgCiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCiAgICAgICAgIHJldHVy
biBjIC8gMTIuOTJmOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsg
MC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCitmbG9hdCBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Tm9uQ2xhbXBpbmcoZmxvYXQgYykKK3sKKyAgICBmbG9hdCBzaWduID0gc3Rk
OjpzaWduYml0KGMpID8gLTEuMGYgOiAxLjBmOworICAgIGMgPSBzdGQ6OmFicyhjKTsKKworICAg
IGlmIChjIDwgMC4wMDMxMzA4ZikKKyAgICAgICAgcmV0dXJuIDEyLjkyZiAqIGMgKiBzaWduOwor
CisgICAgcmV0dXJuICgxLjA1NWYgKiBzdGQ6OnBvdyhjLCAxLjBmIC8gMi40ZikgLSAwLjA1NWYp
ICogc2lnbjsKK30KKworZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudE5vbkNsYW1waW5n
KGZsb2F0IGMpCit7CisgICAgZmxvYXQgc2lnbiA9IHN0ZDo6c2lnbmJpdChjKSA/IC0xLjBmIDog
MS4wZjsKKyAgICBjID0gc3RkOjphYnMoYyk7CisKKyAgICBpZiAoYyA8PSAwLjA0MDQ1ZikKKyAg
ICAgICAgcmV0dXJuIGMgLyAxMi45MmYgKiBzaWduOworCisgICAgcmV0dXJuIHN0ZDo6cG93KChj
ICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZikgKiBzaWduOworfQorCisvLyBHYW1tYSBjb252ZXJz
aW9ucy4KKwogTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29s
b3IuZ3JlZW4pLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUp
LAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAog
ICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBAIC02MSw5ICsxMzUsOSBAQCBMaW5lYXJT
UkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShj
b25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAg
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRD
bGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTcx
LDkgKzE0NSw5IEBAIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGYKIExp
bmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNv
bG9yLmdyZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVl
KSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwK
ICAgICAgICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtODEsODEgKzE1NSw0OSBAQCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzCiBEaXNwbGF5UDM8ZmxvYXQ+IHRv
RGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJl
dHVybiB7Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAg
ICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAg
ICAgfTsKIH0KIAorLy8gTWF0cml4IGNvbnZlcnNpb25zLgorCiBMaW5lYXJTUkdCQTxmbG9hdD4g
dG9MaW5lYXJTUkdCQShjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5k
Ymxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKLSAgICBjb25zdGV4
cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKLSAgICAgICAgIDMu
MjQwNDU0MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1MzE0ZiwKLSAgICAgICAgLTAuOTY5MjY2MGYs
ICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKLSAgICAgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAy
NTlmLCAgMS4wNTcyMjUyZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyU1JHQkEoeHl6VG9M
aW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxw
aGE8TGluZWFyU1JHQkE8ZmxvYXQ+Pih4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRD
b2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8Zmxv
YXQ+IHRvWFlaQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKLSAgICAvLyBodHRwOi8vd3d3LmJydWNl
bGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxpbmVhclNSR0JUb1hZWk1hdHJpeCB7Ci0gICAgICAg
IDAuNDEyNDU2NGYsICAwLjM1NzU3NjFmLCAgMC4xODA0Mzc1ZiwKLSAgICAgICAgMC4yMTI2NzI5
ZiwgIDAuNzE1MTUyMmYsICAwLjA3MjE3NTBmLAotICAgICAgICAwLjAxOTMzMzlmLCAgMC4xMTkx
OTIwZiwgIDAuOTUwMzA0MWYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEobGluZWFyU1JHQlRv
WFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFla
QTxmbG9hdD4+KGxpbmVhclNSR0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAogTGluZWFyRGlzcGxheVAzPGZsb2F0
PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8g
aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2Rl
Ci0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlzcGxheVAzTWF0
cml4IHsKLSAgICAgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlm
LCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKLSAgICAgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAx
Ljc2MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKLSAgICAgICAgIDAuMDM1
ODQ1ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1MjQwMDc2ODcy
ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyRGlzcGxheVAzKHh5elRvTGluZWFyRGlzcGxh
eVAzTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8TGlu
ZWFyRGlzcGxheVAzPGZsb2F0Pj4oeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8
ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKLSAg
ICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9u
LWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAzVG9Y
WVpNYXRyaXggewotICAgICAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5MzE2OTA5
MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCi0gICAgICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAu
NjkxNzM4NTIxODM2NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKLSAgICAgICAgMC4wZiwgICAg
ICAgICAgICAgICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCi0gICAg
fTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgIHJldHVy
biBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFlaQTxmbG9hdD4+KGxpbmVhckRp
c3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKSkpOwogfQogCisvLyBDaHJvbWF0aWMgQWRhcHRhdGlvbiBjb252ZXJzaW9u
cy4KKwogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDUwV2hpdGVQb2ludFRvRDY1V2hp
dGVQb2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cDovL3d3dy5i
cnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ1MFRvRDY1TWF0cml4IHsKLSAgICAgICAgIDAuOTU1
NTc2NmYsIC0wLjAyMzAzOTNmLCAwLjA2MzE2MzZmLAotICAgICAgICAtMC4wMjgyODk1ZiwgIDEu
MDA5OTQxNmYsIDAuMDIxMDA3N2YsCi0gICAgICAgICAwLjAxMjI5ODJmLCAtMC4wMjA0ODMwZiwg
MS4zMjk5MDk4ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENTBUb0Q2NU1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICBy
ZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENTBU
b0Q2NU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcikpKTsKIH0KIAogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDY1V2hpdGVQb2lu
dFRvRDUwV2hpdGVQb2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0
cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1s
Ci0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ2NVRvRDUwTWF0cml4IHsKLSAgICAg
ICAgIDEuMDQ3ODExMmYsIDAuMDIyODg2NmYsIC0wLjA1MDEyNzBmLAotICAgICAgICAgMC4wMjk1
NDI0ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCi0gICAgICAgIC0wLjAwOTIzNDVmLCAwLjAx
NTA0MzZmLCAgMC43NTIxMzE2ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENjVUb0Q1ME1h
dHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikp
KTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8Zmxv
YXQ+PihENjVUb0Q1ME1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gTGFiIGNvbnZlcnNpb25zLgorCiBzdGF0aWMgY29u
c3RleHByIGZsb2F0IExBQmUgPSAyMTYuMGYgLyAyNDM4OS4wZjsKIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgTEFCayA9IDI0Mzg5LjBmIC8gMjcuMGY7CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IEQ1
MFdoaXRlVmFsdWVzW10gPSB7IDAuOTY0MjJmLCAxLjBmLCAwLjgyNTIxZiB9OwpAQCAtMjIxLDYg
KzI2Myw5IEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG8KICAgICBy
ZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGNvbG9yV2l0aEQ1MFdoaXRlUG9pbnQuYWxwaGEgfTsK
IH0KIAorCisvLyBMQ0ggY29udmVyc2lvbnMuCisKIExDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBM
YWI8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNv
bG9yLTQvI2xhYi10by1sY2gKQEAgLTI0Nyw2ICsyOTIsOCBAQCBMYWI8ZmxvYXQ+IHRvTGFiKGNv
bnN0IExDSEE8ZmxvYXQ+JiBjb2xvCiAgICAgfTsKIH0KIAorLy8gSFNMIGNvbnZlcnNpb25zLgor
CiBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAv
LyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS4KQEAgLTMzMiw2
ICszNzksOCBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgCiAgICAg
fTsKIH0KIAorLy8gQ01ZSyBjb252ZXJzaW9ucy4KKwogU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29u
c3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBhdXRvIFtjLCBtLCB5LCBrLCBhXSA9IGNv
bG9yOwpAQCAtMzU2LDYgKzQwNSw5IEBAIENNWUtBPGZsb2F0PiB0b0NNWUtBKGNvbnN0IFNSR0JB
PGZsb2F0PiYKICAgICByZXR1cm4geyBjLCBtLCB5LCBrLCBhIH07CiB9CiAKKworLy8gQ29tYmlu
YXRpb24gY29udmVyc2lvbnMgKGNvbnN0cnVjdGVkIGZyb20gbW9yZSBiYXNpYyBjb252ZXJzaW9u
cyBhYm92ZSkuCisKIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQogewogICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJTUkdCQShjb2xvcikpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJ
KHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0IgPC0+IExpbmVh
clJHQiAvIERpc3BsYXlQMyA8LT4gTGluZWFyRGlzcGxheVAzIGNvbnZlcnNpb24gZnVuY3Rpb25z
IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KLWZsb2F0IGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnQoZmxvYXQpOwotZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChm
bG9hdCk7CitmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQpOwor
ZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGZsb2F0KTsKKworZmxvYXQg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudE5vbkNsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRv
TGluZWFyQ29sb3JDb21wb25lbnROb25DbGFtcGluZyhmbG9hdCk7CiAKIAogLy8gQWxsIGNvbG9y
IHR5cGVzIG11c3QgYXQgbGVhc3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnMg
dG8gYW5kIGZyb20gdGhlIFhZWkEgY29sb3Igc3BhY2U6CkBAIC01Niw0MiArNTksMzYgQEAgV0VC
Q09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZQogLy8gQWRkaXRpb25zCiBXRUJD
T1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4m
KTsKIAotCiAvLyBEaXNwbGF5UDMKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+
IHRvRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVf
RVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlz
cGxheVAzPGZsb2F0PiYpOwogCi0KIC8vIExpbmVhckRpc3BsYXlQMwogV0VCQ09SRV9FWFBPUlQg
WFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIFdFQkNP
UkVfRVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3Qg
WFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZs
b2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLQogLy8g
TGFiCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGFiPGZsb2F0PiYp
OwogV0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBYWVpBPGZsb2F0PiYpOwog
Ly8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTGFi
PGZsb2F0PiYpOwogCi0KIC8vIExDSEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFla
QShjb25zdCBMQ0hBPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgTENIQTxmbG9hdD4gdG9MQ0hB
KGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExhYjxm
bG9hdD4gdG9MYWIoY29uc3QgTENIQTxmbG9hdD4mKTsKIAotCiAvLyBIU0xBCiBXRUJDT1JFX0VY
UE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgSFNMQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQ
T1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25z
CiBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYp
OwogCi0KIC8vIENNWUtBCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3Qg
Q01ZS0E8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBDTVlLQTxmbG9hdD4gdG9DTVlLQShjb25z
dCBYWVpBPGZsb2F0PiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVHlwZXMuaAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEs
MjI2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBDb21wb25lbnRUcmFpdHM7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEFscGhhVHJhaXRz
OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8dWludDhfdD4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBtaW5WYWx1ZSA9IDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IG1heFZhbHVlID0gMjU1OwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8
dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCB0cmFuc3BhcmVudCA9IDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG9wYXF1ZSA9IDI1NTsKIH07CiAKLXRlbXBs
YXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czxmbG9hdD4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgZmxvYXQgbWluVmFsdWUgPSAwLjBmOwotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWF4
VmFsdWUgPSAxLjBmOwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0IHRyYW5zcGFyZW50ID0gMC4wZjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGZsb2F0IG9wYXF1ZSA9IDEuMGY7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IENvbXBvbmVudFJhbmdlOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRSYW5n
ZTx1aW50OF90PiB7CisgICAgdWludDhfdCBtaW47CisgICAgdWludDhfdCBtYXg7Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRSYW5nZTxmbG9hdD4geworICAgIGZsb2F0IG1pbjsK
KyAgICBmbG9hdCBtYXg7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFJHQk1vZGVs
OwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMYWJNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgTENITW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhTTE1vZGVsOwor
dGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDTVlLTW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IFhZWk1vZGVsOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbXBvbmVudFJhbmdlPHVpbnQ4X3Q+
LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMjU1IH0sCisgICAgICAgIHsgMCwgMjU1IH0s
CisgICAgICAgIHsgMCwgMjU1IH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDxm
bG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb21wb25lbnRSYW5nZTxm
bG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMCwgMSB9
LAorICAgICAgICB7IDAsIDEgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbnZlcnRpYmxlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZs
b2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbXBvbmVudFJhbmdlPGZs
b2F0PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAor
ICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBMQ0hNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxD
b21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7IDAsIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgMCwgMzYwIH0KKyAg
ICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOwor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIHN0ZDo6YXJyYXk8Q29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7Cisg
ICAgICAgIHsgMCwgMzYwIH0sCisgICAgICAgIHsgMCwgMTAwIH0sCisgICAgICAgIHsgMCwgMTAw
IH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRy
dWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDTVlLTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCA0PiByYW5nZXMg
eyB7CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAwLCAx
IH0sCisgICAgICAgIHsgMCwgMSB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgWFlaTW9kZWw8
ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29tcG9uZW50UmFuZ2U8
ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9
LAorICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW52ZXJ0aWJsZSA9IGZhbHNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50cyhjb25zdCBD
b2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJuIENvbG9yVHlwZSB7IGNbMF0sIGNb
MV0sIGNbMl0sIGNbM10gfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZS4uLiBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50cyhULi4uIGNv
bXBvbmVudHMpCit7CisgICAgcmV0dXJuIENvbG9yVHlwZSB7IGNvbXBvbmVudHMuLi4gfTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwgdHlwZW5hbWUg
VD4gY29uc3RleHByIGF1dG8gY2xhbXBlZENvbXBvbmVudChUIGMpIC0+IHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3Jh
bF92PFQ+KTsKKworICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlID0gQ29sb3JUeXBlOjpNb2RlbDo6
cmFuZ2VzW0luZGV4XTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcDx0eXBlbmFtZSBDb2xvclR5cGU6
OkNvbXBvbmVudFR5cGU+KGMsIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleD4gY29uc3RleHByIHVpbnQ4X3QgY2xh
bXBlZENvbXBvbmVudChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdD4mIGMpCit7CisgICAg
cmV0dXJuIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCBJbmRleD4oY1tJbmRleF0pOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4PiBjb25zdGV4cHIg
ZmxvYXQgY2xhbXBlZENvbXBvbmVudChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjKQor
eworICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzW0lu
ZGV4XTsKKworICAgIGlmIGNvbnN0ZXhwciAocmFuZ2UubWluID09IC1zdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSAmJiByYW5nZS5tYXggPT0gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OmluZmluaXR5KCkpCisgICAgICAgIHJldHVybiBjW0luZGV4XTsKKworICAgIGlm
IGNvbnN0ZXhwciAocmFuZ2UubWluID09IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5m
aW5pdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGNbSW5kZXhdLCByYW5nZS5tYXgpOwor
CisgICAgaWYgY29uc3RleHByIChyYW5nZS5tYXggPT0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om1heChjW0luZGV4XSwgcmFuZ2Uu
bWluKTsKKworICAgIHJldHVybiBzdGQ6OmNsYW1wKGNbSW5kZXhdLCByYW5nZS5taW4sIHJhbmdl
Lm1heCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBvbmVudFR5cGUg
PSBUPiBjb25zdGV4cHIgQ29tcG9uZW50VHlwZSBjbGFtcGVkQWxwaGEoVCBhbHBoYSkKK3sKKyAg
ICByZXR1cm4gc3RkOjpjbGFtcDxDb21wb25lbnRUeXBlPihhbHBoYSwgQWxwaGFUcmFpdHM8Q29t
cG9uZW50VHlwZT46OnRyYW5zcGFyZW50LCBBbHBoYVRyYWl0czxDb21wb25lbnRUeXBlPjo6b3Bh
cXVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGNsYW1wZWRDb21wb25lbnRzKGNvbnN0IENvbG9yQ29t
cG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjbGFtcGVk
Q29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksCisgICAgICAgIGNsYW1wZWRDb21w
b25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVu
dDxDb2xvclR5cGUsIDI+KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQWxwaGEoY29tcG9u
ZW50c1szXSkKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gY2xhbXBlZENvbXBvbmVudHNFeGNl
cHRBbHBoYShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMpCit7CisgICAgcmV0
dXJuIHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGNvbXBvbmVudHMp
LAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oY29tcG9uZW50cyksCisg
ICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjb21wb25lbnRzKSwKKyAgICAg
ICAgY29tcG9uZW50c1szXQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21wb25lbnRz
KGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gbWFr
ZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHM8Q29sb3JUeXBlPihj
b21wb25lbnRzKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUg
VD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzKFQgYzEsIFQgYzIs
IFQgYzMpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENvbG9y
Q29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSks
CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksCisgICAgICAgIGNs
YW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksCisgICAgICAgIEFscGhhVHJhaXRzPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZQorICAgIH0pOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5
cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50cyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQorewor
ICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMg
eworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oYzEpLAorICAgICAgICBj
bGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLAorICAgICAgICBjbGFtcGVkQ29tcG9u
ZW50PENvbG9yVHlwZSwgMj4oYzMpLAorICAgICAgICBjbGFtcGVkQWxwaGE8VCwgdHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihhbHBoYSkKKyAgICB9KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VD
bGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGNv
bXBvbmVudHMpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNs
YW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGE8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxwaGE+
IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhKFQg
YzEsIFQgYzIsIFQgYzMsIEFscGhhIGFscGhhKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBv
bmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeworICAgICAgICBjbGFtcGVkQ29tcG9u
ZW50PENvbG9yVHlwZSwgMD4oYzEpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlw
ZSwgMT4oYzIpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLAor
ICAgICAgICBhbHBoYQorICAgIH0pOworfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUIGNvbG9yKQorewor
ICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgIEFTU0VSVChjb21wb25lbnRz
W2ldID49IFQ6Ok1vZGVsOjpyYW5nZXNbaV0ubWluKTsKKyAgICAgICAgQVNTRVJUKGNvbXBvbmVu
dHNbaV0gPD0gVDo6TW9kZWw6OnJhbmdlc1tpXS5tYXgpOworICAgIH0KKyAgICBBU1NFUlQoY29s
b3IuYWxwaGEgPj0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46OnRyYW5z
cGFyZW50KTsKKyAgICBBU1NFUlQoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUg
VDo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZSk7Cit9CisKKyNlbHNlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoVCkKK3sKK30KKworI2VuZGlmCisK
IHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9v
bCBIYXNDb2xvclNwYWNlTWVtYmVyID0gZmFsc2U7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgSGFzQ29sb3JTcGFjZU1lbWJlcjxULCBzdGQ6OnZvaWRfdDxkZWNs
dHlwZShzdGQ6OmRlY2x2YWw8VD4oKS5jb2xvclNwYWNlKT4+ID0gdHJ1ZTsKIApAQCAtNzQsMTgg
KzI4MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpCiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdCQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPFNS
R0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwotCi0gICAgY29uc3RleHBy
IFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8
VD46Om1heFZhbHVlKQorICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpTUkdCIH07CisgICAgCisg
ICAgY29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBBbHBo
YVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJlZCB9CiAgICAgICAgICwgZ3Jl
ZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsg
YWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAg
ICAgY29uc3RleHByIFNSR0JBKCkKLSAgICAgICAgOiBTUkdCQSB7IENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0
czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6
IFNSR0JBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMTAwLDExICszMTAsNiBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsg
Yy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4m
IGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNSR0JBPFQ+
JiBhLCBjb25zdCBTUkdCQTxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
YSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0xMTgsMTggKzMyMywyMCBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBMaW5lYXJTUkdCQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPExpbmVhclNSR0JBPFQ+
PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBSR0JN
b2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQjsKIAotICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdCQShUIHJlZCwgVCBncmVl
biwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBj
b25zdGV4cHIgTGluZWFyU1JHQkEoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFs
cGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBn
cmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEg
eyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAK
ICAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEoKQotICAgICAgICA6IExpbmVhclNSR0JBIHsgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1
ZSB9CisgICAgICAgIDogTGluZWFyU1JHQkEgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQog
CkBAIC0xNDQsMTEgKzM1MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xv
ckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJTUkdCQTxUPiBhc0xpbmVh
clNSR0JBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBd
LCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyU1JHQkE8VD4mIGEsIGNvbnN0IExpbmVhclNS
R0JBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9y
Q29tcG9uZW50cyhiKTsKQEAgLTE2MiwxOCArMzY0LDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERpc3Bs
YXlQMyA6IENvbG9yV2l0aEFscGhhSGVscGVyPERpc3BsYXlQMzxUPj4gewogICAgIHVzaW5nIENv
bXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpEaXNwbGF5UDM7CiAK
LSAgICBjb25zdGV4cHIgRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEg
PSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBEaXNwbGF5UDMo
VCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUp
CiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAg
ICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAg
ICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgRGlzcGxh
eVAzKCkKLSAgICAgICAgOiBEaXNwbGF5UDMgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
LCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBEaXNwbGF5UDMg
eyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0xODgsMTEgKzM5Miw2IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwg
Yy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBEaXNwbGF5UDM8VD4gYXNEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+
JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEaXNwbGF5
UDM8VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yMDYsMTcgKzQwNSwxOSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDMgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxM
aW5lYXJEaXNwbGF5UDM8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1
c2luZyBNb2RlbCA9IFJHQk1vZGVsPFQ+OwogCi0gICAgY29uc3RleHByIExpbmVhckRpc3BsYXlQ
MyhUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
YXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBU
IGJsdWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7
IHJlZCB9CiAgICAgICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUg
fQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5n
ZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIExpbmVhckRpc3BsYXlQMygpCi0gICAg
ICAgIDogTGluZWFyRGlzcGxheVAzIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGluZWFyRGlzcGxheVAz
IHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjMxLDExICs0MzIsNiBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5yZWQs
IGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgTGluZWFyRGlzcGxheVAzPFQ+IGFzTGluZWFyRGlzcGxheVAzKGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNd
IH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0o
Y29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBhLCBjb25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGIp
CiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRz
KGIpOwpAQCAtMjQ5LDE4ICs0NDUsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHBy
IGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGFiIDogQ29sb3JXaXRo
QWxwaGFIZWxwZXI8TGFiPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAg
dXNpbmcgTW9kZWwgPSBMYWJNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29s
b3JTcGFjZSA9IENvbG9yU3BhY2U6OkxhYjsKIAotICAgIGNvbnN0ZXhwciBMYWIoVCBsaWdodG5l
c3MsIFQgYSwgVCBiLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAg
ICBjb25zdGV4cHIgTGFiKFQgbGlnaHRuZXNzLCBUIGEsIFQgYiwgVCBhbHBoYSA9IEFscGhhVHJh
aXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogbGlnaHRuZXNzIHsgbGlnaHRuZXNzIH0KICAgICAg
ICAgLCBhIHsgYSB9CiAgICAgICAgICwgYiB7IGIgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEg
fQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29u
c3RleHByIExhYigpCi0gICAgICAgIDogTGFiIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1
ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5W
YWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGFiIHsgMCwg
MCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjc1LDExICs0NzMsNiBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5saWdodG5lc3Ms
IGMuYSwgYy5iLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBMYWI8VD4gYXNMYWIoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVy
biB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYWI8VD4mIGEsIGNvbnN0IExhYjxUPiYg
YikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVu
dHMoYik7CkBAIC0yOTMsMTcgKzQ4NiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JX
aXRoQWxwaGFIZWxwZXI8TENIQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOwor
ICAgIHVzaW5nIE1vZGVsID0gTENITW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgTENIQShUIGxp
Z2h0bmVzcywgVCBjaHJvbWEsIFQgaHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
YXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTENIQShUIGxpZ2h0bmVzcywgVCBjaHJvbWEsIFQgaHVl
LCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiBsaWdodG5lc3Mg
eyBsaWdodG5lc3MgfQogICAgICAgICAsIGNocm9tYSB7IGNocm9tYSB9CiAgICAgICAgICwgaHVl
IHsgaHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2Vy
dEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBMQ0hBKCkKLSAgICAgICAg
OiBMQ0hBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+
OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRz
PFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTENIQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAg
ICB9CiAKQEAgLTMxOCwxMSArNTEzLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHBy
IENvbG9yQ29tcAogICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMu
YWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExDSEE8VD4gYXNM
Q0hBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBj
WzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTENIQTxUPiYgYSwgY29uc3QgTENIQTxUPiYgYikKIHsKICAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBA
IC0zMzYsMTcgKzUyNiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIDogQ29sb3JXaXRoQWxwaGFI
ZWxwZXI8SFNMQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5n
IE1vZGVsID0gSFNMTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgSFNMQShUIGh1ZSwgVCBzYXR1
cmF0aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFs
dWUpCisgICAgY29uc3RleHByIEhTTEEoVCBodWUsIFQgc2F0dXJhdGlvbiwgVCBsaWdodG5lc3Ms
IFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGh1ZSB7IGh1ZSB9
CiAgICAgICAgICwgc2F0dXJhdGlvbiB7IHNhdHVyYXRpb24gfQogICAgICAgICAsIGxpZ2h0bmVz
cyB7IGxpZ2h0bmVzcyB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAg
ICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgSFNMQSgpCi0g
ICAgICAgIDogSFNMQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRy
YWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVu
dFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IEhTTEEgeyAwLCAwLCAwLCAwIH0KICAg
ICB7CiAgICAgfQogCkBAIC0zNjMsMTEgKzU1NSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxp
Z2h0bmVzcywgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
SFNMQTxUPiBhc0hTTEEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVy
biB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIU0xBPFQ+JiBhLCBjb25zdCBIU0xBPFQ+
JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9u
ZW50cyhiKTsKQEAgLTM4Miw4ICs1NjksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyCiAvLyBGSVhNRTogV2hlbiBDb2xvckNvbXBvbmVudHMgc3VwcG9ydHMgbW9y
ZSB0aGFuIGxlbmd0aCA9PSA0LCBhZGQgY29udmVyc2lvbiB0by9mcm9tIENvbG9yQ29tcG9uZW50
czxUPiBmb3IgQ01ZS0EKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDTVlLQSA6IENvbG9y
V2l0aEFscGhhSGVscGVyPENNWUtBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7
CisgICAgdXNpbmcgTW9kZWwgPSBDTVlLTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgQ01ZS0Eo
VCBjeWFuLCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0gQ29tcG9uZW50
VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgQ01ZS0EoVCBjeWFuLCBUIG1hZ2Vu
dGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkK
ICAgICAgICAgOiBjeWFuIHsgY3lhbiB9CiAgICAgICAgICwgbWFnZW50YSB7IG1hZ2VudGEgfQog
ICAgICAgICAsIHllbGxvdyB7IHllbGxvdyB9CkBAIC0zOTMsNyArNTgxLDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIDogQ29sbwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBD
TVlLQSgpCi0gICAgICAgIDogQ01ZS0EgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBD
b21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
LCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlIH0KKyAgICAgICAgOiBDTVlLQSB7IDAsIDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAK
QEAgLTQxNywxNyArNjA1LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFhZWkEgOiBDb2xvcldpdGhBbHBo
YUhlbHBlcjxYWVpBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNp
bmcgTW9kZWwgPSBYWVpNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBYWVpBKFQgeCwgVCB5LCBU
IHosIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhw
ciBYWVpBKFQgeCwgVCB5LCBUIHosIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQog
ICAgICAgICA6IHggeyB4IH0KICAgICAgICAgLCB5IHsgeSB9CiAgICAgICAgICwgeiB7IHogfQog
ICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgq
dGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIFhZWkEoKQotICAgICAgICA6IFhZWkEgeyBD
b21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
LCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlIH0KKyAgICAgICAgOiBYWVpBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAt
NDQyLDExICs2MzIsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21w
CiAgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjb25zdGV4cHIgWFlaQTxUPiBhc1hZWkEoY29uc3QgQ29sb3JDb21wb25lbnRz
PFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBYWVpB
PFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTQ2MSwxNyArNjQ2LDE3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+IGMKIHsKICAgICBzd2l0Y2ggKGNvbG9y
U3BhY2UpIHsKICAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBzdGQ6
Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzU1JHQkEoY29tcG9uZW50
cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1
bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAgICBj
YXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0
ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNMaW5lYXJTUkdCQShjb21wb25lbnRzKSk7
CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIG1ha2VGcm9tQ29tcG9uZW50czxMaW5lYXJTUkdCQTxUPj4oY29tcG9uZW50cykpOwogICAg
IGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uo
c3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0Rpc3BsYXlQMyhjb21wb25lbnRzKSk7
CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIG1ha2VGcm9tQ29tcG9uZW50czxEaXNwbGF5UDM8VD4+KGNvbXBvbmVudHMpKTsKICAgICBj
YXNlIENvbG9yU3BhY2U6OkxhYjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9y
d2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNMYWIoY29tcG9uZW50cykpOworICAgICAgICByZXR1
cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNv
bXBvbmVudHM8TGFiPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihm
dW5jdG9yKSwgYXNTUkdCQShjb21wb25lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0
ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPFQ+
Pihjb21wb25lbnRzKSk7CiB9CiAKIC8vIFBhY2tlZCBDb2xvciBGb3JtYXRzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgU1JHQkE8
dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogICAgICAgICByZXR1cm4geyAwLCAw
LCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oZmFzdERpdmlkZUJ5MjU1KHIgKiBh
KSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7Cisg
ICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90
Pj4oZmFzdERpdmlkZUJ5MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERp
dmlkZUJ5MjU1KGIgKiBhKSwgYSk7CiB9CiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRD
ZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQpAQCAtODgsNyArODgsNyBAQCBTUkdCQTx1aW50
OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCCiAgICAgICAgIHJldHVybiB7IDAsIDAsIDAs
IDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCiAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1
cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAy
NTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEg
KyAyNTQpLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhh
PFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRl
QnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKIH0K
IAogc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHVp
bnQ4X3QgYywgdWludDhfdCBhKQpAQCAtMTAxLDcgKzEwMSw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHVu
cHJlbXVsdGlwbGllZChTUkdCQTx1aW4KICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwog
ICAgIGlmICghYSB8fCBhID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5
dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlw
bGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21w
b25lbnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBvbmVu
dEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVs
dGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIyICs0NSwx
NCBAQCBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JHCiBTUkdCQTx1aW50
OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90Pik7CiBTUkdCQTx1aW50OF90
PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4pOwogCi11aW50OF90IGNvbnZlcnRQcmVz
Y2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQpOwordWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JH
QkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0KTsKIAotdWludDhfdCBjb252ZXJ0VG9Db21wb25lbnRC
eXRlKGZsb2F0KTsKLWNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50
OF90KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4X3Qp
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xhbXBU
b0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50VHlwZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb21wb25l
bnRUeXBlPiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVudFR5
cGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRCeXRlVG8odWlu
dDhfdCk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRGbG9hdFRvKGZs
b2F0KTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4g
Q29sb3JUeXBlPHVpbnQ4X3Q+IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9yVHlw
ZTxmbG9hdD4mKTsKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5
cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhj
b25zdCBDb2xvclR5cGU8dWludDhfdD4mKTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+
IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4gQ29tcG9uZW50VHlwZT4gY29uc3RleHBy
IENvbG9yVHlwZTx1aW50OF90PiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMoQ29tcG9uZW50VHlwZS4u
Lik7Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBl
bmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFtcFRv
Q29tcG9uZW50RmxvYXRzKENvbXBvbmVudFR5cGUuLi4pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gVCBjb252ZXJ0VG8oY29uc3QgVSYpOwordGVtcGxhdGU8PiBTUkdCQTxmbG9h
dD4gY29udmVydFRvKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+Jik7Cit0ZW1wbGF0ZTw+IFNSR0JBPHVp
bnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlmaW5n
RWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7CiAKQEAg
LTc3LDcxICs2OSw0OSBAQCBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWlu
CiBjb25zdGV4cHIgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAogCi1pbmxp
bmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCi17Ci0g
ICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQoZiksIDBsLCAyNTVsKTsKLX0KLQotaW5s
aW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewotICAgIHJldHVy
biBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYgKiAyNTUuMGYpLCAwbCwgMjU1bCk7Ci19Ci0KLWNv
bnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90IGJ5dGUpCitpbmxp
bmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0IHZh
bHVlKQogewotICAgIHJldHVybiBieXRlIC8gMjU1LjBmOworICAgIHJldHVybiBzdGQ6OmNsYW1w
KHN0ZDo6bHJvdW5kKHZhbHVlKSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
b21wb25lbnRUeXBlPiBjb25zdGV4cHIgdWludDhfdCBjbGFtcFRvQ29tcG9uZW50Qnl0ZShDb21w
b25lbnRUeXBlIGNvbXBvbmVudCkKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcDxDb21wb25lbnRU
eXBlPihjb21wb25lbnQsIDAsIDI1NSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbXBvbmVu
dFR5cGU+IGNvbnN0ZXhwciBmbG9hdCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoQ29tcG9uZW50VHlw
ZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4oY29t
cG9uZW50LCAwLCAxKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdGV4cHIgdWludDhfdCBjb252ZXJ0
Q29tcG9uZW50Qnl0ZVRvPHVpbnQ4X3Q+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNvbnN0
ZXhwciB1aW50OF90IGNvbnZlcnRCeXRlQWxwaGFUbzx1aW50OF90Pih1aW50OF90IHZhbHVlKQog
ewogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8PiBjb25zdGV4cHIgZmxvYXQgY29u
dmVydENvbXBvbmVudEJ5dGVUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkKK3RlbXBsYXRlPD4gY29u
c3RleHByIGZsb2F0IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOworICAgIHJldHVybiB2
YWx1ZSAvIDI1NS4wZjsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgdWludDhfdCBjb252ZXJ0Q29t
cG9uZW50RmxvYXRUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIHVp
bnQ4X3QgY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xh
bXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1bCk7CiB9CiAKLXRlbXBsYXRl
PD4gaW5saW5lIGZsb2F0IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGZsb2F0PihmbG9hdCB2YWx1
ZSkKK3RlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRGbG9hdEFscGhhVG88ZmxvYXQ+KGZs
b2F0IHZhbHVlKQogewotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOwor
ICAgIHJldHVybiBjbGFtcGVkQWxwaGEodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0
eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNv
bnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4mIGNvbG9yKQordGVt
cGxhdGU8PiBpbmxpbmUgU1JHQkE8ZmxvYXQ+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTx1aW50OF90
PiYgY29sb3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29s
b3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1swXSks
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGUoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sz
XSkgfTsKLX0KKyAgICBhdXRvIGNvbnZlcnRUb1NSR0JBRmxvYXQgPSBbXSh1aW50OF90IHZhbHVl
KSAtPiBmbG9hdCB7CisgICAgICAgIHJldHVybiB2YWx1ZSAvIDI1NS4wZjsKKyAgICB9OwogCi10
ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIg
Q29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBl
PHVpbnQ4X3Q+JiBjb2xvcikKLXsKICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcik7Ci0gICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9u
ZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0
VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQo
Y29tcG9uZW50c1szXSkgfTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBv
bmVudHNbMF0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9T
UkdCQUZsb2F0KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNb
M10pIH07CiB9CiAKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWludDhf
dD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKENvbXBvbmVudFR5cGUuLi4gY29tcG9uZW50cykKK3Rl
bXBsYXRlPD4gaW5saW5lIFNSR0JBPHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxmbG9h
dD4mIGNvbG9yKQogewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRCeXRlKGNvbXBvbmVu
dHMpLi4uIH07Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUJ5dGUgPSBbXShmbG9hdCB2YWx1
ZSkgLT4gdWludDhfdCB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZh
bHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOworICAgIH07CiAKLXRlbXBsYXRlPHRlbXBsYXRlPHR5
cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNv
bnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNsYW1wVG9Db21wb25lbnRGbG9hdHMoQ29tcG9uZW50
VHlwZS4uLiBjb21wb25lbnRzKQotewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRGbG9h
dChjb21wb25lbnRzKS4uLiB9OworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1sw
XSksIGNvbnZlcnRUb1NSR0JBQnl0ZShjb21wb25lbnRzWzFdKSwgY29udmVydFRvU1JHQkFCeXRl
KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1szXSkgfTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5
cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQpAQCAtMTU3LDUwICsxMjcsNjEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENv
bG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNvcHkg
PSBjb2xvcjsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEJ5dGVUbzxkZWNsdHlw
ZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRC
eXRlQWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxw
aGEpOwogICAgIHJldHVybiBjb3B5OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+
IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9y
LCBmbG9hdCBvdmVycmlkZUFscGhhKQogewogICAgIGF1dG8gY29weSA9IGNvbG9yOwotICAgIGNv
cHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4o
b3ZlcnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88dHlw
ZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1
cm4gY29weTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29s
b3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBj
b2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9yQnlN
b2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50KSB7
Ci0gICAgICAgIHJldHVybiBDb21wb25lbnRUcmFpdHM8ZGVjbHR5cGUoY29tcG9uZW50KT46Om1h
eFZhbHVlIC0gY29tcG9uZW50OwotICAgIH0pOwotICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29t
cG9uZW50Qnl0ZVRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKLSAgICBy
ZXR1cm4gY29weTsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52ZXJ0
aWJsZSk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7
CisgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAzOyArK2kpCisgICAgICAgIGNvcHlbaV0gPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNb
aV0ubWF4IC0gY29tcG9uZW50c1tpXTsKKyAgICBjb3B5WzNdID0gY29udmVydEJ5dGVBbHBoYVRv
PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisKKyAg
ICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY29weSk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJp
ZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKIHsK
LSAgICBhdXRvIGNvcHkgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29s
b3IsIFtdIChhdXRvIGNvbXBvbmVudCkgewotICAgICAgICByZXR1cm4gQ29tcG9uZW50VHJhaXRz
PGRlY2x0eXBlKGNvbXBvbmVudCk+OjptYXhWYWx1ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsKLSAg
ICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBo
YSk+KG92ZXJyaWRlQWxwaGEpOwotICAgIHJldHVybiBjb3B5OworICAgIHN0YXRpY19hc3NlcnQo
Q29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKKworICAgIGF1dG8gY29tcG9uZW50cyA9
IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgY29weVtpXSA9
IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlc1tpXS5tYXggLSBjb21wb25lbnRzW2ldOworICAgIGNv
cHlbM10gPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50
VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENv
bG9yVHlwZT4oY29weSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3Rl
eHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIGNvbnN0ZXhw
ciBhdXRvIG1pbiA9IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+OjptaW5WYWx1ZTsKLSAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRUcmFp
dHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JN
b2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pik7CiAKICAgICBhdXRvIFtj
MSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKLSAgICByZXR1cm4gYzEgPT0gbWluICYmIGMyID09
IG1pbiAmJiBjMyA9PSBtaW4gJiYgYWxwaGEgPT0gbWF4OworICAgIGNvbnN0ZXhwciBhdXRvIHJh
bmdlcyA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlczsKKyAgICByZXR1cm4gYzEgPT0gcmFuZ2Vz
WzBdLm1pbiAmJiBjMiA9PSByYW5nZXNbMV0ubWluICYmIGMzID09IHJhbmdlc1syXS5taW4gJiYg
YWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6
b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBib29s
IGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0byBt
YXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6
bWF4VmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xv
clR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
Pik7CiAKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKLSAgICByZXR1cm4g
YzEgPT0gbWF4ICYmIGMyID09IG1heCAmJiBjMyA9PSBtYXggJiYgYWxwaGEgPT0gbWF4OworICAg
IGNvbnN0ZXhwciBhdXRvIHJhbmdlcyA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlczsKKyAgICBy
ZXR1cm4gYzEgPT0gcmFuZ2VzWzBdLm1heCAmJiBjMiA9PSByYW5nZXNbMV0ubWF4ICYmIGMzID09
IHJhbmdlc1syXS5tYXggJiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBl
OjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11
bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIE9w
dGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAgICAgICBjb21wb25lbnRBcnJheVtp
XSA9IGNvbXBvbmVudDsKICAgICB9CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0
ZXMoU1JHQkEgeyBjb21wb25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBvbmVu
dEFycmF5WzNdLCBjb21wb25lbnRBcnJheVswXSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+PihTUkdCQSB7IGNvbXBvbmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJheVsy
XSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVudEFycmF5WzBdIH0pOwogfQogCiBSZWY8SW5i
YW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZUF0dHJp
YnV0ZXMoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJpbmcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1DCiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3Qs
IDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBp
KyspIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAg
ICAgICAgICAgY29sb3IgPSByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAg
ICAgICAgICAgICBjb2xvciA9IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xv
cik7CiAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3Vu
ZChjb2xvciAqIDI1NSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFycmF5
OwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5z
Zm9ybUMKICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9yID0g
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yKTsKICAgICAgICAgICAgICAg
ICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24gMjcx
NTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiByb3VuZEFuZAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAK
LSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyByLCBnLCBiLCBhIH0p
OworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgciwgZywgYiwg
YSB9KTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNw
cAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgQ29s
b3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcgogICAgIGlmICghcGl4ZWxbM10p
CiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAotICAgIHJldHVybiBj
bGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVs
WzNdKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFNSR0JB
PHVpbnQ4X3Q+PihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBp
eGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CiB9CiAKIHZvaWQg
TmF0aXZlSW1hZ2U6OmNsZWFyU3ViaW1hZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTkgKzkx
LDE5IEBAIGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHIKIHsKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9yID0g
YXNTUkdCQShncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFr
ZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4KG1f
YW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsKLSAg
ICAgICAgY29sb3IgPSBhc1NSR0JBKHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBj
b2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9yTWF0
cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50
cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgSFVFX1JP
VEFURTogewotICAgICAgICBjb2xvciA9IGFzU1JHQkEoaHVlUm90YXRlQ29sb3JNYXRyaXgobV9h
bW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+
PihodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVu
dHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1cmF0
aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBv
bmVudHM8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5z
Zm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTI0MCw3ICsyNDAsNyBAQCBi
b29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhCiAgICAgICAgIDAuMDMwZiwg
LTAuNzQxZiwgLTAuMDg5ZiwgMC4wZiwgMS4wZiwKICAgICAgICAgMC4wMzBmLCAgMC4wNTlmLCAt
MC44OTBmLCAwLjBmLCAxLjBmCiAgICAgfTsKLSAgICBjb2xvciA9IGFzU1JHQkEodG9EYXJrTW9k
ZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhodWVS
b3RhdGVkU1JHQkEpKSk7CisgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PGZsb2F0Pj4odG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0Nv
bG9yQ29tcG9uZW50cyhodWVSb3RhdGVkU1JHQkEpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6
aW52CiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYsIDAuMGYsIDEuMjVmLAogICAg
ICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAxLjI1ZgogICAgIH07Ci0gICAg
YXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZSA9IGFzU1JHQkEodG9MaWdodE1vZGVNYXRyaXgudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAg
YXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZSA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8
ZmxvYXQ+Pih0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIAogICAgIC8vIENvbnZlcnQgdG8gSFNMLgogICAgIGF1
dG8gaHNsYSA9IHRvSFNMQShjb252ZXJ0ZWRUb0xpZ2h0TW9kZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNyw3ICsxMTcsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9y
KENvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252
ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxT
UkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEz
Niw3ICsxMzYsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0VG9D
b21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2
aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nv
bG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCi0gICAgOiBDb2xv
cihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpCisgICAg
OiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRpY19j
YXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhhKSB9
KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMyAr
OTIsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAgICAg
ICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAgICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBp
eGVsIGF0WDowIHk6MF07CiAKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxT
UkdCQT4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOworICAgICAgICBy
ZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0sIHBp
eGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAgIH0KIAogICAgIFtyZ2JDb2xvciBnZXRS
ZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVu
dCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAgIHJl
dHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihy
ZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7
CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2Fz
dDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
YWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9D
b2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihEMkQxX0NP
TE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7
IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCisgICAgOiBDb2xvcihjb252
ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwg
Y29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyAr
MTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBDT01Q
dHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdp
dGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQogewotICAgIGF1dG8gY29sb3JLZXkg
PSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9y
LmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBjb2xvcktleSA9IGNvbnZlcnRUbzxTUkdCQTx1aW50
OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwogCiAg
ICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBpZiAoIW1femVyb0JydXNoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjcxNTY0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiAK
ICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJs
dWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAgIHJldHVybiBjb252ZXJ0VG9D
b21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1
ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNv
bnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29t
cG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwNiw3ICs1MDYs
NyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVudUJhY2tncm91bmRDb2xvCiAgICAgTlNVSW50
ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6
MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSwg
cGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0Nv
bXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIHBp
eGVsWzNdKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKENTU1ZhbHVl
SUQgY3NzVmFsdWVJRCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZp
c2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRp
b25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkx
LDcgQEAgcHVibGljOgogICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2ltcGxlVG8uYmx1ZSwgc2ltcGxlVG9B
dEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZSk7CiAgICAgICAgIGZsb2F0
IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20u
YWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYSwgc2lt
cGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKLSAgICAgICAgYW5pbWF0ZWQgPSBjbGFtcFRv
Q29tcG9uZW50Qnl0ZXM8U1JHQkE+KHN0ZDo6bHJvdW5kKHJlZCksIHN0ZDo6bHJvdW5kKGdyZWVu
KSwgc3RkOjpscm91bmQoYmx1ZSksIHN0ZDo6bHJvdW5kKGFscGhhKSk7CisgICAgICAgIGFuaW1h
dGVkID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc3RkOjpscm91bmQo
cmVkKSwgc3RkOjpscm91bmQoZ3JlZW4pLCBzdGQ6Omxyb3VuZChibHVlKSwgc3RkOjpscm91bmQo
YWxwaGEpKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFuY2Uo
U1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29uc3Qg
b3ZlcnJpZGUKQEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgICAgICBhdXRvIHNpbXBs
ZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25vcmVz
IGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0gICAg
ICAgIG1fdG8gPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHNpbXBsZVRvLnJlZCArIHNp
bXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRv
LmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOworICAgICAgICBtX3RvID0gbWFrZUNsYW1waW5nQ29t
cG9uZW50czxTUkdCQTx1aW50OF90Pj4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNp
bXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZy
b20uYmx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhTVkdF
bGVtZW50KiwgY29uc3QgU3RyaW5nJik7Cg==
</data>
<flag name="commit-queue"
          id="435654"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417851</attachid>
            <date>2021-01-18 16:19:13 -0800</date>
            <delta_ts>2021-01-18 18:55:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210118161912.patch</filename>
            <type>text/plain</type>
            <size>81407</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIG9mIGFkZGluZyBzdXBwb3J0
IGZvciBFeHRlbmRlZC1zUkdCIHRvIGNvbG9yIHR5cGVzLAorICAgICAgICB0aGlzIGFkZHMgY29u
c3RleHByIG1ldGFkYXRhIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb2xvcgorICAg
ICAgICB0eXBlcyB3aXRoIHRoZSBjb3JyZWN0IGNsYW1wZWQgKG9yIHVuY2xhbXBlZCkgdmFsdWVz
IGFuZCBhZG9wdHMgdGhlbQorICAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuCisKKyAg
ICAgICAgLSBSZW1vdmVzICJjb21wb25lbnQgYnl0ZXMiIGFuZCAiY29tcG9uZW50IGZsb2F0cyIg
Y29uY2VwdHMgcmVwbGFjaW5nCisgICAgICAgICAgd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIGNv
bG9yIHR5cGVzIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnM6CisgICAgICAgICAgCisgICAgICAgICAg
ICBjb252ZXJ0VG9Db21wb25lbnRCeXRlcy9jb252ZXJ0VG9Db21wb25lbnRGbG9hdHMgLT4gY29u
dmVydFRvPENvbG9yVHlwZTxUPj4KKyAgICAgICAgICAgIGNsYW1wVG9Db21wb25lbnRCeXRlcy9j
bGFtcFRvQ29tcG9uZW50RmxvYXRzIC0+IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8Q29sb3JUeXBl
PFQ+PgorCisgICAgICAgIC0gQWRkcyBNb2RlbCB0eXBlIGFsaWFzZXMgdG8gZWFjaCBjb2xvciB0
eXBlIHdoaWNoIGNhbiBzcGVjaWZ5IHRyYWl0cyAKKyAgICAgICAgICBmb3IgdGhhdCB0eXBlIG9m
IGNvbG9yLiBUaGVzZSB0cmFpdHMgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgdmFsaWQgCisg
ICAgICAgICAgY29tcG9uZW50IHJhbmdlcyBhbmQgd2hldGhlciB0aGUgY29sb3IgY2FuIGJlIGlu
dmVydGVkLiBNb3JlIHdpbGwgYmUgCisgICAgICAgICAgYWRkZWQgKGxpa2Ugd2hpdGUgcG9pbnQg
YW5kIGJhc2UgY29sb3Igc3BhY2UpIHRvIGhlbHAgc2ltcGxpZnkgdXRpbGl0eSAKKyAgICAgICAg
ICBhbmQgY29udmVyc2lvbiBjb2RlLiAKKworICAgICAgICAtIEFkZHMgYXNzZXJ0aW9ucyB0byBl
YWNoIGNvbG9yIHR5cGUgY29uc3RydWN0b3IgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZAorICAgICAg
ICAgIGFyZSB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlcyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBNb2Rl
bCkuCisKKyAgICAgICAgLSBSZW1vdmVkIGFzRm9vKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYp
IGZ1bmN0aW9ucywgd2hpY2ggd2VyZSBhIGxpdHRsZSAKKyAgICAgICAgICB0byAgc2ltaWxhcmx5
IG5hbWVkIHRvIHRoZSB0b0ZvbygpIGZ1bmN0aW9ucy4gSW5zdGVhZCwgdGhlIGdlbmVyaWMgCisg
ICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZTxUPj4gKG9yIGl0J3MgY2xhbXBp
bmcgdmFyaWFudHMpIGNhbiBiZSB1c2VkCisgICAgICAgICAgdG8gY29udmVydCBmcm9tIENvbG9y
Q29tcG9uZW50cyB0byBjb2xvciB0eXBlcy4KKworICAgICAgICAtIEFkZHMgQWxwaGFUcmFpdHMg
dG8gbW9kZWwgYWxwaGEgdmFsdWVzIGFzIHRoZXNlIGFyZSBjb25zaXN0ZW50IGJldHdlZW4KKyAg
ICAgICAgICBjb2xvciB0eXBlcyBhbmQgb25seSBjaGFuZ2UgYmFzZWQgb24gY29tcG9uZW50IHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6
CisKIDIwMjEtMDEtMTggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHJlY2VudGx5IGFkZGVkIGdsdWUgY29kZTogUmVuZGVyTGF5
ZXI6OihzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgLyBzZXRTY3JvbGxTaG91bGRD
bGVhckxhdGNoZWRTdGF0ZSAvIHNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMjcxNTY0
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGlj
IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleAogCiAjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfQ09MT1IpCiAgICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpDb2xvcldlbGwpIHsKLSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhjb3JlT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9y
ID0gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCBj
b2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAyNzE1NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAgLSAo
TlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Q29sb3JTdHJpbmdWYQogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAg
ICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG88U1JH
QkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1ZSgpKTsKICAgICAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiICU3LjVmICU3LjVmICU3LjVm
IDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlXTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAyNzE1NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM4NSw3ICsyMzg1LDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gQChi
YWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCkpOwogCiAgICAgICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29t
cG9uZW50RmxvYXRzKGJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgICAgICBh
dXRvIGNvbG9yID0gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oYmFja2luZ09iamVjdC0+Y29sb3JW
YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
InJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3Iu
Ymx1ZV07CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9yZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xv
ci5yZWQpKQogICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5n
cmVlbikpCiAgICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1
ZSkpCi0gICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21w
b25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkpCisgICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFw
cGVyKG93bmVyLCBjb2xvci5hbHBoYUFzRmxvYXQoKSkpCiAgICAgewogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAko
cmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJG
YXN0UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOyAvLyBGSVhNRTogQWxyZWFkeSBjbGFtcGVkLCBk
b2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdl
L3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBhbmQgcmVwbGFjZSBjYWxsIHRvIGNs
YW1wVG9Db21wb25lbnRCeXRlcyB3aXRoIGRpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWlu
dDhfdD4uCisgICAgICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4
X3Q+PihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7IC8vIEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQs
IGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRlIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRh
Z2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50OF90IGFuZCByZXBsYWNlIGNhbGwgdG8g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3Ry
dWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50
YXguCkBAIC01MDUsNyArNTA1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKGN1
cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocmVkLCBncmVlbiwgYmx1ZSk7IC8v
IEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQsIGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRl
IHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50
OF90IGFuZCByZXBsYWNlIGNhbGwgdG8gY2xhbXBUb0NvbXBvbmVudEJ5dGVzIHdpdGggZGlyZWN0
IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KKyAgICAgICAgcmV0dXJuIG1ha2VDbGFt
cGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHJlZCwgZ3JlZW4sIGJsdWUpOyAvLyBGSVhN
RTogQWxyZWFkeSBjbGFtcGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJz
ZUNvbG9ySW50T3JQZXJjZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBh
bmQgcmVwbGFjZSBjYWxsIHRvIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+
IHdpdGggZGlyZWN0IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KICAgICB9CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxNTY0
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIHVpbnQ4X3QgY2xh
bXBSR0JDb21wb25lbnQoZG91YmxlIAogICAgIGlmIChpc1BlcmNlbnRhZ2UpCiAgICAgICAgIHZh
bHVlID0gdmFsdWUgLyAxMDAuMCAqIDI1NS4wOwogCi0gICAgcmV0dXJuIGNvbnZlcnRQcmVzY2Fs
ZWRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JH
QkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlUkdCUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTczOSw3ICs3MzksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIH0KLSAgICAgICAgYWxw
aGFDb21wb25lbnQgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFscGhhKTsKKyAgICAgICAgYWxw
aGFDb21wb25lbnQgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFscGhhKTsKICAgICB9
OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCkBAIC03OTQsNyArNzk0LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKEhTTEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlb
MF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CisgICAgcmV0
dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJy
YXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYSkgfSkpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlT3B0aW9u
YWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI3MTU2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjAxLDcgKzYwMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENv
bnRlbnRJblIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFw
cGVhciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3Ig
Y2FuIGJlIHNwZWNpZmllZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEubGlnaHRuZXNz
ID0gMC41ZjsKICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEuYWxwaGEgKj0gMC4zOGY7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0gY29udmVydFRvQ29t
cG9uZW50Qnl0ZXModG9TUkdCQShoc2xhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHVuZGVybGluZUNvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGEp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgc2VyaWFsaXphdGlvbkZvckNTUyh1bmRl
cmxpbmVDb2xvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3MTU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAwLDE3ICsxMzAwLDE3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
Ymx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzZXRTaGFkb3coRmxv
YXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH0pKTsKKyAgICBzZXRT
aGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG88U1JHQkE8dWlu
dDhfdD4+KFNSR0JBIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfSkp
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9h
dCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCks
IGJsdXIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+PihTUkdCQSB7IHIsIGcsIGIsIGEgfSkpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBh
KQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoQ01ZS0EgeyBjLCBtLCB5LCBrLCBhIH0pKSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKENNWUtBIHsgYywgbSwgeSwgaywgYSB9KSkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI3MTU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3Ig
Y29sb3IpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTUkdCQTxmbG9hdD4m
IGNvbG9yQ29tcG9uZW50cykKLSAgICA6IG1fc3R5bGUoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
Y29sb3JDb21wb25lbnRzKSkKKyAgICA6IG1fc3R5bGUoY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+
Pihjb2xvckNvbXBvbmVudHMpKQogewogfQogCkBAIC0xNDgsNyArMTQ4LDcgQEAgYm9vbCBDYW52
YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAgIHJl
dHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxD
b2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29tcG9uZW50cyk7Cisg
ICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6
Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbXBvbmVu
dHMpOwogfQogCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KFJlZlB0cjxKU09OOjpPYmoKIAogICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUo
UHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKICAgICBpZiAoIWEpCi0gICAgICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOwotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoKmEpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8dWludDhfdD4+KCpyLCAqZywgKmIpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25l
bnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KCpyLCAqZywgKmIsIGNvbnZlcnRGbG9hdEFs
cGhhVG88dWludDhfdD4oKmEpKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3Io
Y29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046Ok9iamVjdCYgY29uZmlnT2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24g
MjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBj
b25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikg
LyB2OwogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlw
bGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1
cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0
aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJr
ZW5lZCgpIGNvbnN0CkBAIC0xMDUsNyArMTA1LDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkg
Y29uc3QKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11
bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlwbGllciAqIHIsIG11bHRpcGxp
ZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNSR0JB
PHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlw
bGllciAqIGIsIGEgfSk7CiB9CiAKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdApAQCAt
MTQxLDcgKzE0MSwxNCBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
CiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QK
IHsKICAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRl
cmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKLSAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgICAgIHVzaW5nIENv
bG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZSh1bmRlcmx5aW5nQ29sb3IpPjsKKyAgICAg
ICAgaWYgY29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCisgICAgICAg
ICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29s
b3IsIGFscGhhKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRGV0ZXJt
aW5lIGlmIHRoZXJlIGlzIGEgbWVhbmluZ2Z1bCB1bmRlcnN0YW5kaW5nIG9mIGludmVyc2lvbiB0
aGF0IHdvcmtzCisgICAgICAgICAgICAvLyBiZXR0ZXIgZm9yIG5vbi1pbnZlcnRpYmxlIGNvbG9y
IHR5cGVzIGxpa2UgTGFiLgorICAgICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CisgICAgICAgIH0K
ICAgICB9KTsKIH0KIApAQCAtMTU3LDcgKzE2NCw3IEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBD
b2xvckNvbXBvbmVudHM8ZmwKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1
cm4geyBhc0V4dGVuZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygp
IH07Ci0gICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydFRvQ29tcG9uZW50RmxvYXRzKGFzSW5saW5lKCkpKSB9OworICAgIHJldHVybiB7IENvbG9y
U3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGFz
SW5saW5lKCkpKSB9OwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8g
YXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0K
ICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50
OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYXNFeHRlbmRlZCgpLmFscGhhKCkpIDogYXNJbmxpbmUoKS5hbHBoYTsgfQot
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydFRvQ29tcG9uZW50RmxvYXQoYXNJbmxpbmUoKS5h
bHBoYSk7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSA/IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oYXNFeHRlbmRlZCgpLmFscGhhKCkp
IDogYXNJbmxpbmUoKS5hbHBoYTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsg
cmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydEJ5dGVB
bHBoYVRvPGZsb2F0Pihhc0lubGluZSgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQg
ZmxvYXQgbHVtaW5hbmNlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRu
ZXNzKCkgY29uc3Q7IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5h
bmNlLgpAQCAtMzMxLDExICszMzEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4g
Q29sb3I6OnRvUwogICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1
aW50OF90PikKICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29sb3IpOwogICAgICAgICB9LAogICAgICAgICBb
XSAoY29uc3QgYXV0byYgY29sb3IpIHsKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoY29sb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGNvbG9yKSk7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKICAgICAgICAgICAgICAgICByZXR1
cm4gdG9TUkdCQShjb2xvcik7CiAgICAgICAgIH0KQEAgLTM5MSwxNSArMzkxLDI3IEBAIGlubGlu
ZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjwKIAogaW5saW5lIGJvb2wgQ29sb3I6
OmlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmNh
bGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICByZXR1
cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xvcik7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVy
bHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIHsKKyAgICAgICAgdXNp
bmcgQ29sb3JUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBlKHVuZGVybHlpbmdDb2xvcik+Owor
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6
TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+KQorICAg
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzQmxhY2sodW5kZXJseWluZ0NvbG9yKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRGVmaW5lIG1lYW5pbmdmdWwgYmxhY2sg
cG9pbnRzIGZvciBhbGwgY29sb3IgdHlwZXMuCisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6
aXNCbGFjayh0b1NSR0JBKHVuZGVybHlpbmdDb2xvcikpOworICAgICAgICB9CiAgICAgfSk7CiB9
CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYg
Y29sb3IpIHsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUoY29sb3IpOworICAgIHJl
dHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWlu
Z0NvbG9yKSB7CisgICAgICAgIHVzaW5nIENvbG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlw
ZSh1bmRlcmx5aW5nQ29sb3IpPjsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6
OkNvbXBvbmVudFR5cGU+PikKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHVu
ZGVybHlpbmdDb2xvcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IERl
ZmluZSBtZWFuaW5nZnVsIHdoaXRlIHBvaW50cyBmb3IgYWxsIGNvbG9yIHR5cGVzLgorICAgICAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpKTsK
KyAgICAgICAgfQogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENv
bG9yJiBiYWNrZAogICAgIGludCBnID0gKGJhY2tkcm9wRyAqIGJhY2tkcm9wQSAqICgweEZGIC0g
c291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUcpIC8gZDsKICAgICBpbnQgYiA9IChi
YWNrZHJvcEIgKiBiYWNrZHJvcEEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEg
KiBzb3VyY2VCKSAvIGQ7CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JB
PihyLCBnLCBiLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1
aW50OF90Pj4ociwgZywgYiwgYSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENv
bG9yJiBjb2xvcikKQEAgLTc4LDcgKzc4LDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3Qg
Q29sb3ImIGNvbG9yKQogICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywg
YWxwaGEpOwogICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEp
OwogCi0gICAgICAgIHJlc3VsdCA9IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywg
YiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PHVpbnQ4X3Q+PihyLCBnLCBiLCBhbHBoYSk7CiAKICAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49
IDAgJiYgYiA+PSAwKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDAsNyArMTAwLDcgQEAgQ29s
b3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGF1dG8gcHJlbXVsdGlw
bGllZEZyb20gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyhmcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpKTsKICAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHByZW11bHRpcGxpZWRDZWlsaW5nKHRv
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpKTsKIAotICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5k
ZWQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIGF1dG8gcHJlbXVsdGlwbGll
ZEJsZW5kZWQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8u
cmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9t
LmdyZWVuLCBwcmVtdWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHBy
b2dyZXNzKSwKQEAgLTEyMCw3ICsxMjAsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAgICAgYXV0byB0b1NSR0IgPSB0by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAot
ICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjggKzMy
LDEwMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWZsb2F0IGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoZmxvYXQgYykKKy8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IK
Ky8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpf
TWF0cml4Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5l
YXJTUkdCTWF0cml4IHsKKyAgICAgMy4yNDA0NTQyZiwgLTEuNTM3MTM4NWYsIC0wLjQ5ODUzMTRm
LAorICAgIC0wLjk2OTI2NjBmLCAgMS44NzYwMTA4ZiwgIDAuMDQxNTU2MGYsCisgICAgIDAuMDU1
NjQzNGYsIC0wLjIwNDAyNTlmLCAgMS4wNTcyMjUyZgorfTsKKworLy8gaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU1JHQgorLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5k
ZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1h
dHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggeworICAgIDAuNDEyNDU2NGYsICAwLjM1
NzU3NjFmLCAgMC4xODA0Mzc1ZiwKKyAgICAwLjIxMjY3MjlmLCAgMC43MTUxNTIyZiwgIDAuMDcy
MTc1MGYsCisgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCit9OworCisv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNv
ZGUKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJEaXNwbGF5
UDNNYXRyaXggeworICAgICAyLjQ5MzQ5NjkxMTk0MTQyNWYsICAtMC45MzEzODM2MTc5MTkxMjM5
ZiwgLTAuNDAyNzEwNzg0NDUwNzE2OGYsCisgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAxLjc2
MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKKyAgICAgMC4wMzU4NDU4MzAy
NDM3ODQ1ZiwgLTAuMDc2MTcyMzg5MjY4MDQxOGYsICAwLjk1Njg4NDUyNDAwNzY4NzJmCit9Owor
CisvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9u
LWNvZGUKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAz
VG9YWVpNYXRyaXggeworICAgIDAuNDg2NTcwOTQ4NjQ4MjE2MmYsIDAuMjY1NjY3NjkzMTY5MDkz
MWYsIDAuMTk4MjE3Mjg1MjM0MzYzZiwKKyAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTcz
ODUyMTgzNjUwNjRmLCAwLjA3OTI4NjkxNDA5Mzc0NWYsCisgICAgMC4wZiwgICAgICAgICAgICAg
ICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCit9OworCisvLyBodHRw
Oi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwK
K3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gRDUwVG9ENjVNYXRyaXggeworICAg
ICAwLjk1NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKKyAgICAtMC4wMjgyODk1Ziwg
IDEuMDA5OTQxNmYsIDAuMDIxMDA3N2YsCisgICAgIDAuMDEyMjk4MmYsIC0wLjAyMDQ4MzBmLCAx
LjMyOTkwOThmCit9OworCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5o
dG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8Mywg
Mz4gRDY1VG9ENTBNYXRyaXggeworICAgICAxLjA0NzgxMTJmLCAwLjAyMjg4NjZmLCAtMC4wNTAx
MjcwZiwKKyAgICAgMC4wMjk1NDI0ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCisgICAgLTAu
MDA5MjM0NWYsIDAuMDE1MDQzNmYsICAwLjc1MjEzMTZmCit9OworCitmbG9hdCBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQgYykKIHsKKyAgICBBU1NFUlQoYyA+PSAwKTsK
KyAgICBBU1NFUlQoYyA8PSAxKTsKKwogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKICAgICAgICAg
cmV0dXJuIDEyLjkyZiAqIGM7CiAKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oMS4wNTVmICog
c3RkOjpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4wNTVmLCAwLCAxKTsKIH0KIAotZmxvYXQgcmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQorZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudENsYW1waW5nKGZsb2F0IGMpCiB7CisgICAgQVNTRVJUKGMgPj0gMCk7CisgICAgQVNT
RVJUKGMgPD0gMSk7CisgICAgCiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCiAgICAgICAgIHJldHVy
biBjIC8gMTIuOTJmOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsg
MC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCitmbG9hdCBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Tm9uQ2xhbXBpbmcoZmxvYXQgYykKK3sKKyAgICBmbG9hdCBzaWduID0gc3Rk
OjpzaWduYml0KGMpID8gLTEuMGYgOiAxLjBmOworICAgIGMgPSBzdGQ6OmFicyhjKTsKKworICAg
IGlmIChjIDwgMC4wMDMxMzA4ZikKKyAgICAgICAgcmV0dXJuIDEyLjkyZiAqIGMgKiBzaWduOwor
CisgICAgcmV0dXJuICgxLjA1NWYgKiBzdGQ6OnBvdyhjLCAxLjBmIC8gMi40ZikgLSAwLjA1NWYp
ICogc2lnbjsKK30KKworZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudE5vbkNsYW1waW5n
KGZsb2F0IGMpCit7CisgICAgZmxvYXQgc2lnbiA9IHN0ZDo6c2lnbmJpdChjKSA/IC0xLjBmIDog
MS4wZjsKKyAgICBjID0gc3RkOjphYnMoYyk7CisKKyAgICBpZiAoYyA8PSAwLjA0MDQ1ZikKKyAg
ICAgICAgcmV0dXJuIGMgLyAxMi45MmYgKiBzaWduOworCisgICAgcmV0dXJuIHN0ZDo6cG93KChj
ICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZikgKiBzaWduOworfQorCisvLyBHYW1tYSBjb252ZXJz
aW9ucy4KKwogTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29s
b3IuZ3JlZW4pLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUp
LAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAog
ICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBAIC02MSw5ICsxMzUsOSBAQCBMaW5lYXJT
UkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShj
b25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAg
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRD
bGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTcx
LDkgKzE0NSw5IEBAIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGYKIExp
bmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNv
bG9yLmdyZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVl
KSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwK
ICAgICAgICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtODEsODEgKzE1NSw0OSBAQCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzCiBEaXNwbGF5UDM8ZmxvYXQ+IHRv
RGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJl
dHVybiB7Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAg
ICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAg
ICAgfTsKIH0KIAorLy8gTWF0cml4IGNvbnZlcnNpb25zLgorCiBMaW5lYXJTUkdCQTxmbG9hdD4g
dG9MaW5lYXJTUkdCQShjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5k
Ymxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKLSAgICBjb25zdGV4
cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKLSAgICAgICAgIDMu
MjQwNDU0MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1MzE0ZiwKLSAgICAgICAgLTAuOTY5MjY2MGYs
ICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKLSAgICAgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAy
NTlmLCAgMS4wNTcyMjUyZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyU1JHQkEoeHl6VG9M
aW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxw
aGE8TGluZWFyU1JHQkE8ZmxvYXQ+Pih4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRD
b2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8Zmxv
YXQ+IHRvWFlaQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKLSAgICAvLyBodHRwOi8vd3d3LmJydWNl
bGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxpbmVhclNSR0JUb1hZWk1hdHJpeCB7Ci0gICAgICAg
IDAuNDEyNDU2NGYsICAwLjM1NzU3NjFmLCAgMC4xODA0Mzc1ZiwKLSAgICAgICAgMC4yMTI2NzI5
ZiwgIDAuNzE1MTUyMmYsICAwLjA3MjE3NTBmLAotICAgICAgICAwLjAxOTMzMzlmLCAgMC4xMTkx
OTIwZiwgIDAuOTUwMzA0MWYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEobGluZWFyU1JHQlRv
WFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFla
QTxmbG9hdD4+KGxpbmVhclNSR0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAogTGluZWFyRGlzcGxheVAzPGZsb2F0
PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8g
aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2Rl
Ci0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlzcGxheVAzTWF0
cml4IHsKLSAgICAgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlm
LCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKLSAgICAgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAx
Ljc2MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKLSAgICAgICAgIDAuMDM1
ODQ1ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1MjQwMDc2ODcy
ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyRGlzcGxheVAzKHh5elRvTGluZWFyRGlzcGxh
eVAzTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8TGlu
ZWFyRGlzcGxheVAzPGZsb2F0Pj4oeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8
ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKLSAg
ICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9u
LWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAzVG9Y
WVpNYXRyaXggewotICAgICAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5MzE2OTA5
MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCi0gICAgICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAu
NjkxNzM4NTIxODM2NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKLSAgICAgICAgMC4wZiwgICAg
ICAgICAgICAgICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCi0gICAg
fTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgIHJldHVy
biBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFlaQTxmbG9hdD4+KGxpbmVhckRp
c3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKSkpOwogfQogCisvLyBDaHJvbWF0aWMgQWRhcHRhdGlvbiBjb252ZXJzaW9u
cy4KKwogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDUwV2hpdGVQb2ludFRvRDY1V2hp
dGVQb2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cDovL3d3dy5i
cnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ1MFRvRDY1TWF0cml4IHsKLSAgICAgICAgIDAuOTU1
NTc2NmYsIC0wLjAyMzAzOTNmLCAwLjA2MzE2MzZmLAotICAgICAgICAtMC4wMjgyODk1ZiwgIDEu
MDA5OTQxNmYsIDAuMDIxMDA3N2YsCi0gICAgICAgICAwLjAxMjI5ODJmLCAtMC4wMjA0ODMwZiwg
MS4zMjk5MDk4ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENTBUb0Q2NU1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICBy
ZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENTBU
b0Q2NU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcikpKTsKIH0KIAogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDY1V2hpdGVQb2lu
dFRvRDUwV2hpdGVQb2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0
cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1s
Ci0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ2NVRvRDUwTWF0cml4IHsKLSAgICAg
ICAgIDEuMDQ3ODExMmYsIDAuMDIyODg2NmYsIC0wLjA1MDEyNzBmLAotICAgICAgICAgMC4wMjk1
NDI0ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCi0gICAgICAgIC0wLjAwOTIzNDVmLCAwLjAx
NTA0MzZmLCAgMC43NTIxMzE2ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENjVUb0Q1ME1h
dHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikp
KTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8Zmxv
YXQ+PihENjVUb0Q1ME1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gTGFiIGNvbnZlcnNpb25zLgorCiBzdGF0aWMgY29u
c3RleHByIGZsb2F0IExBQmUgPSAyMTYuMGYgLyAyNDM4OS4wZjsKIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgTEFCayA9IDI0Mzg5LjBmIC8gMjcuMGY7CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IEQ1
MFdoaXRlVmFsdWVzW10gPSB7IDAuOTY0MjJmLCAxLjBmLCAwLjgyNTIxZiB9OwpAQCAtMjIxLDYg
KzI2Myw5IEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG8KICAgICBy
ZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGNvbG9yV2l0aEQ1MFdoaXRlUG9pbnQuYWxwaGEgfTsK
IH0KIAorCisvLyBMQ0ggY29udmVyc2lvbnMuCisKIExDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBM
YWI8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNv
bG9yLTQvI2xhYi10by1sY2gKQEAgLTI0Nyw2ICsyOTIsOCBAQCBMYWI8ZmxvYXQ+IHRvTGFiKGNv
bnN0IExDSEE8ZmxvYXQ+JiBjb2xvCiAgICAgfTsKIH0KIAorLy8gSFNMIGNvbnZlcnNpb25zLgor
CiBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAv
LyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS4KQEAgLTMzMiw2
ICszNzksOCBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgCiAgICAg
fTsKIH0KIAorLy8gQ01ZSyBjb252ZXJzaW9ucy4KKwogU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29u
c3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBhdXRvIFtjLCBtLCB5LCBrLCBhXSA9IGNv
bG9yOwpAQCAtMzU2LDYgKzQwNSw5IEBAIENNWUtBPGZsb2F0PiB0b0NNWUtBKGNvbnN0IFNSR0JB
PGZsb2F0PiYKICAgICByZXR1cm4geyBjLCBtLCB5LCBrLCBhIH07CiB9CiAKKworLy8gQ29tYmlu
YXRpb24gY29udmVyc2lvbnMgKGNvbnN0cnVjdGVkIGZyb20gbW9yZSBiYXNpYyBjb252ZXJzaW9u
cyBhYm92ZSkuCisKIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQogewogICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJTUkdCQShjb2xvcikpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJ
KHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0IgPC0+IExpbmVh
clJHQiAvIERpc3BsYXlQMyA8LT4gTGluZWFyRGlzcGxheVAzIGNvbnZlcnNpb24gZnVuY3Rpb25z
IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KLWZsb2F0IGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnQoZmxvYXQpOwotZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChm
bG9hdCk7CitmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQpOwor
ZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGZsb2F0KTsKKworZmxvYXQg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudE5vbkNsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRv
TGluZWFyQ29sb3JDb21wb25lbnROb25DbGFtcGluZyhmbG9hdCk7CiAKIAogLy8gQWxsIGNvbG9y
IHR5cGVzIG11c3QgYXQgbGVhc3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnMg
dG8gYW5kIGZyb20gdGhlIFhZWkEgY29sb3Igc3BhY2U6CkBAIC01Niw0MiArNTksMzYgQEAgV0VC
Q09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZQogLy8gQWRkaXRpb25zCiBXRUJD
T1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4m
KTsKIAotCiAvLyBEaXNwbGF5UDMKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+
IHRvRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVf
RVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlz
cGxheVAzPGZsb2F0PiYpOwogCi0KIC8vIExpbmVhckRpc3BsYXlQMwogV0VCQ09SRV9FWFBPUlQg
WFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIFdFQkNP
UkVfRVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3Qg
WFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZs
b2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLQogLy8g
TGFiCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGFiPGZsb2F0PiYp
OwogV0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBYWVpBPGZsb2F0PiYpOwog
Ly8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTGFi
PGZsb2F0PiYpOwogCi0KIC8vIExDSEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFla
QShjb25zdCBMQ0hBPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgTENIQTxmbG9hdD4gdG9MQ0hB
KGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExhYjxm
bG9hdD4gdG9MYWIoY29uc3QgTENIQTxmbG9hdD4mKTsKIAotCiAvLyBIU0xBCiBXRUJDT1JFX0VY
UE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgSFNMQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQ
T1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25z
CiBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYp
OwogCi0KIC8vIENNWUtBCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3Qg
Q01ZS0E8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBDTVlLQTxmbG9hdD4gdG9DTVlLQShjb25z
dCBYWVpBPGZsb2F0PiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVHlwZXMuaAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEs
MjE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBDb21wb25lbnRUcmFpdHM7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEFscGhhVHJhaXRz
OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8dWludDhfdD4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBtaW5WYWx1ZSA9IDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IG1heFZhbHVlID0gMjU1OwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8
dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCB0cmFuc3BhcmVudCA9IDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG9wYXF1ZSA9IDI1NTsKIH07CiAKLXRlbXBs
YXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czxmbG9hdD4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgZmxvYXQgbWluVmFsdWUgPSAwLjBmOwotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWF4
VmFsdWUgPSAxLjBmOwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0IHRyYW5zcGFyZW50ID0gMC4wZjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGZsb2F0IG9wYXF1ZSA9IDEuMGY7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRSYW5nZSB7CisgICAgVCBtaW47CisgICAgVCBtYXg7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFJHQk1vZGVsOwordGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBMYWJNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTENITW9kZWw7
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhTTE1vZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBDTVlLTW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFhZWk1vZGVsOwor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8dWludDhfdD4sIDM+IHJhbmdlcyB7
IHsKKyAgICAgICAgeyAwLCAyNTUgfSwKKyAgICAgICAgeyAwLCAyNTUgfSwKKyAgICAgICAgeyAw
LCAyNTUgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxl
ID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAz
PiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAg
ICAgeyAwLCAxIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0
aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBMYWJNb2RlbDxmbG9hdD4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0
PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAg
ICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBMQ0hNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xv
ckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgMCwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAwLCAzNjAgfQor
ICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2Vz
IHsgeworICAgICAgICB7IDAsIDM2MCB9LAorICAgICAgICB7IDAsIDEwMCB9LAorICAgICAgICB7
IDAsIDEwMCB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGli
bGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ01ZS01vZGVsPGZsb2F0PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+
LCA0PiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAg
ICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMCwgMSB9CisgICAgfSB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29s
b3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAor
ICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21D
b21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4gQ29s
b3JUeXBlIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBj
bGFtcGVkQ29tcG9uZW50KFQgYykgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Cit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsX3Y8VD4pOworCisgICAgY29u
c3RleHByIGF1dG8gcmFuZ2UgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5kZXhdOworICAg
IHJldHVybiBzdGQ6OmNsYW1wPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4oYywg
cmFuZ2UubWluLCByYW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHVuc2lnbmVkIEluZGV4PiBjb25zdGV4cHIgdWludDhfdCBjbGFtcGVkQ29tcG9uZW50KGNvbnN0
IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgYykKK3sKKyAgICByZXR1cm4gY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIEluZGV4PihjW0luZGV4XSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdW5zaWduZWQgSW5kZXg+IGNvbnN0ZXhwciBmbG9hdCBjbGFtcGVkQ29tcG9u
ZW50KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGMpCit7CisgICAgY29uc3RleHByIGF1
dG8gcmFuZ2UgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5kZXhdOworCisgICAgaWYgY29u
c3RleHByIChyYW5nZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpICYmIHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSkKKyAgICAgICAgcmV0dXJuIGNbSW5kZXhdOworCisgICAgaWYgY29uc3RleHByIChyYW5nZS5t
aW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAgICBy
ZXR1cm4gc3RkOjptaW4oY1tJbmRleF0sIHJhbmdlLm1heCk7CisKKyAgICBpZiBjb25zdGV4cHIg
KHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4KGNbSW5kZXhdLCByYW5nZS5taW4pOworCisgICAgcmV0dXJu
IHN0ZDo6Y2xhbXAoY1tJbmRleF0sIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcG9uZW50VHlwZSA9IFQ+IGNvbnN0ZXhwciBDb21w
b25lbnRUeXBlIGNsYW1wZWRBbHBoYShUIGFscGhhKQoreworICAgIHJldHVybiBzdGQ6OmNsYW1w
PENvbXBvbmVudFR5cGU+KGFscGhhLCBBbHBoYVRyYWl0czxDb21wb25lbnRUeXBlPjo6dHJhbnNw
YXJlbnQsIEFscGhhVHJhaXRzPENvbXBvbmVudFR5cGU+OjpvcGFxdWUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VD4gY2xhbXBlZENvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25l
bnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBl
LCAwPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+
KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oY29t
cG9uZW50cyksCisgICAgICAgIGNsYW1wZWRBbHBoYShjb21wb25lbnRzWzNdKQorICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxUPiBjbGFtcGVkQ29tcG9uZW50c0V4Y2VwdEFscGhhKGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjbGFt
cGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksCisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDI+KGNvbXBvbmVudHMpLAorICAgICAgICBjb21wb25lbnRzWzNdCisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JUeXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25l
bnRzPFQ+JiBjb21wb25lbnRzKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29s
b3JUeXBlPihjbGFtcGVkQ29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JU
eXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHMoVCBjMSwgVCBjMiwgVCBjMykKK3sKKyAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAg
ICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENv
bXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xv
clR5cGUsIDI+KGMzKSwKKyAgICAgICAgQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPjo6b3BhcXVlCisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21w
b25lbnRzKFQgYzEsIFQgYzIsIFQgYzMsIFQgYWxwaGEpCit7CisgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAxPihjMiksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihj
MyksCisgICAgICAgIGNsYW1wZWRBbHBoYTxULCB0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+KGFscGhhKQorICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4
Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICBy
ZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNFeGNl
cHRBbHBoYTxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9yVHlw
ZSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGEoVCBjMSwgVCBjMiwgVCBjMywgQWxw
aGEgYWxwaGEpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENv
bG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihj
MSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksCisgICAgICAg
IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksCisgICAgICAgIGFscGhhCisgICAg
fSk7Cit9CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQgY29sb3IpCit7CisgICAgYXV0byBjb21wb25lbnRz
ID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCAzOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGNvbXBvbmVudHNbaV0gPj0gVDo6TW9kZWw6OnJh
bmdlc1tpXS5taW4pOworICAgICAgICBBU1NFUlQoY29tcG9uZW50c1tpXSA8PSBUOjpNb2RlbDo6
cmFuZ2VzW2ldLm1heCk7CisgICAgfQorICAgIEFTU0VSVChjb2xvci5hbHBoYSA+PSBBbHBoYVRy
YWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQpOworICAgIEFTU0VS
VChjb2xvci5hbHBoYSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6
b3BhcXVlKTsKK30KKworI2Vsc2UKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZv
aWQgYXNzZXJ0SW5SYW5nZShUKQoreworfQorCisjZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWUs
IHR5cGVuYW1lID0gdm9pZD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0NvbG9yU3BhY2VNZW1i
ZXIgPSBmYWxzZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBI
YXNDb2xvclNwYWNlTWVtYmVyPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxU
PigpLmNvbG9yU3BhY2UpPj4gPSB0cnVlOwogCkBAIC03NCwxOCArMjcwLDIwIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFBhcmVudD4gc3RydWN0IENvbG9yV2kKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IFNSR0JBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8U1JHQkE8VD4+IHsKICAgICB1c2lu
ZyBDb21wb25lbnRUeXBlID0gVDsKLSAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OlNSR0I7Ci0KLSAgICBjb25zdGV4cHIgU1JHQkEoVCByZWQsIFQgZ3Jl
ZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAg
dXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29s
b3JTcGFjZSB7IENvbG9yU3BhY2U6OlNSR0IgfTsKKyAgICAKKyAgICBjb25zdGV4cHIgU1JHQkEo
VCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUp
CiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAg
ICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAg
ICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgU1JHQkEo
KQotICAgICAgICA6IFNSR0JBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9u
ZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogU1JHQkEgeyAwLCAwLCAwLCAw
IH0KICAgICB7CiAgICAgfQogCkBAIC0xMDAsMTEgKzI5OCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5i
bHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdC
QTxUPiBhc1NSR0JBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4g
eyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgU1JHQkE8VD4mIGEsIGNvbnN0IFNSR0JBPFQ+
JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9u
ZW50cyhiKTsKQEAgLTExOCwxOCArMzExLDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JB
IDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TGluZWFyU1JHQkE8VD4+IHsKICAgICB1c2luZyBDb21w
b25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1vZGVsPFQ+OwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6TGluZWFyUkdCOwogCi0g
ICAgY29uc3RleHByIExpbmVhclNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEg
PSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdC
QShUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1
ZSkKICAgICAgICAgOiByZWQgeyByZWQgfQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAg
ICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7Cisg
ICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBMaW5l
YXJTUkdCQSgpCi0gICAgICAgIDogTGluZWFyU1JHQkEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBMaW5l
YXJTUkdCQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTE0NCwxMSArMzM5LDYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7
IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIExpbmVhclNSR0JBPFQ+IGFzTGluZWFyU1JHQkEoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBMaW5lYXJTUkdCQTxUPiYgYSwgY29uc3QgTGluZWFyU1JHQkE8VD4mIGIpCiB7CiAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAt
MTYyLDE4ICszNTIsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3Bl
cgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGlzcGxheVAzIDogQ29sb3JXaXRoQWxw
aGFIZWxwZXI8RGlzcGxheVAzPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Cisg
ICAgdXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8g
Y29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKIAotICAgIGNvbnN0ZXhwciBEaXNw
bGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxU
Pjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIERpc3BsYXlQMyhUIHJlZCwgVCBncmVlbiwgVCBi
bHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiByZWQgeyBy
ZWQgfQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAgICAgICAsIGJsdWUgeyBibHVlIH0K
ICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2Uo
KnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBEaXNwbGF5UDMoKQotICAgICAgICA6IERp
c3BsYXlQMyB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0
czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IERpc3BsYXlQMyB7IDAsIDAsIDAsIDAgfQogICAg
IHsKICAgICB9CiAKQEAgLTE4OCwxMSArMzgwLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMu
YWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIERpc3BsYXlQMzxU
PiBhc0Rpc3BsYXlQMyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJu
IHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERpc3BsYXlQMzxUPiYgYSwgY29uc3QgRGlz
cGxheVAzPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0Nv
bG9yQ29tcG9uZW50cyhiKTsKQEAgLTIwNiwxNyArMzkzLDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExp
bmVhckRpc3BsYXlQMyA6IENvbG9yV2l0aEFscGhhSGVscGVyPExpbmVhckRpc3BsYXlQMzxUPj4g
ewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9k
ZWw8VD47CiAKLSAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBU
IGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0
ZXhwciBMaW5lYXJEaXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFs
cGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBn
cmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEg
eyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAK
ICAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKCkKLSAgICAgICAgOiBMaW5lYXJEaXNwbGF5
UDMgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlIH0KKyAgICAgICAgOiBMaW5lYXJEaXNwbGF5UDMgeyAwLCAwLCAwLCAwIH0KICAg
ICB7CiAgICAgfQogCkBAIC0yMzEsMTEgKzQyMCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBj
LmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJEaXNw
bGF5UDM8VD4gYXNMaW5lYXJEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaW5lYXJEaXNwbGF5
UDM8VD4mIGEsIGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYikKIHsKICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yNDksMTggKzQz
MywyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMYWIgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMYWI8VD4+
IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IExhYk1v
ZGVsPFQ+OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFj
ZTo6TGFiOwogCi0gICAgY29uc3RleHByIExhYihUIGxpZ2h0bmVzcywgVCBhLCBUIGIsIFQgYWxw
aGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBMYWIoVCBs
aWdodG5lc3MsIFQgYSwgVCBiLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAg
ICAgICAgOiBsaWdodG5lc3MgeyBsaWdodG5lc3MgfQogICAgICAgICAsIGEgeyBhIH0KICAgICAg
ICAgLCBiIHsgYiB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBh
c3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgTGFiKCkKLSAgICAg
ICAgOiBMYWIgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFp
dHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBMYWIgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAg
ICAgfQogCkBAIC0yNzUsMTEgKzQ2MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5hLCBjLmIsIGMuYWxwaGEg
fTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExhYjxUPiBhc0xhYihjb25z
dCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExhYjxUPiYgYSwgY29uc3QgTGFiPFQ+JiBiKQogewogICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTI5MywxNyAr
NDc0LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExDSEEgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMQ0hB
PFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBM
Q0hNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBMQ0hBKFQgbGlnaHRuZXNzLCBUIGNocm9tYSwg
VCBodWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0
ZXhwciBMQ0hBKFQgbGlnaHRuZXNzLCBUIGNocm9tYSwgVCBodWUsIFQgYWxwaGEgPSBBbHBoYVRy
YWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGxpZ2h0bmVzcyB7IGxpZ2h0bmVzcyB9CiAgICAg
ICAgICwgY2hyb21hIHsgY2hyb21hIH0KICAgICAgICAgLCBodWUgeyBodWUgfQogICAgICAgICAs
IGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAg
ICAgfQogCiAgICAgY29uc3RleHByIExDSEEoKQotICAgICAgICA6IExDSEEgeyBDb21wb25lbnRU
cmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25l
bnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAg
ICAgICAgOiBMQ0hBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMzE4LDExICs1
MDEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0
dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgTENIQTxUPiBhc0xDSEEoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMQ0hBPFQ+JiBhLCBjb25zdCBMQ0hBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTMzNiwxNyArNTE0LDE5IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhTTEEgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxIU0xBPFQ+PiB7CiAg
ICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBIU0xNb2RlbDxU
PjsKIAotICAgIGNvbnN0ZXhwciBIU0xBKFQgaHVlLCBUIHNhdHVyYXRpb24sIFQgbGlnaHRuZXNz
LCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIg
SFNMQShUIGh1ZSwgVCBzYXR1cmF0aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBoYSA9IEFscGhhVHJh
aXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogaHVlIHsgaHVlIH0KICAgICAgICAgLCBzYXR1cmF0
aW9uIHsgc2F0dXJhdGlvbiB9CiAgICAgICAgICwgbGlnaHRuZXNzIHsgbGlnaHRuZXNzIH0KICAg
ICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRo
aXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBIU0xBKCkKLSAgICAgICAgOiBIU0xBIHsgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1
ZSB9CisgICAgICAgIDogSFNMQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTM2
MywxMSArNTQzLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAog
ICAgIHJldHVybiB7IGMuaHVlLCBjLnNhdHVyYXRpb24sIGMubGlnaHRuZXNzLCBjLmFscGhhIH07
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBIU0xBPFQ+IGFzSFNMQShjb25z
dCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEhTTEE8VD4mIGEsIGNvbnN0IEhTTEE8VD4mIGIpCiB7CiAgICAgcmV0dXJu
IGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAtMzgyLDgg
KzU1Nyw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIC8vIEZJ
WE1FOiBXaGVuIENvbG9yQ29tcG9uZW50cyBzdXBwb3J0cyBtb3JlIHRoYW4gbGVuZ3RoID09IDQs
IGFkZCBjb252ZXJzaW9uIHRvL2Zyb20gQ29sb3JDb21wb25lbnRzPFQ+IGZvciBDTVlLQQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8Q01Z
S0E8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9
IENNWUtNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBDTVlLQShUIGN5YW4sIFQgbWFnZW50YSwg
VCB5ZWxsb3csIFQgYmxhY2ssIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVl
KQorICAgIGNvbnN0ZXhwciBDTVlLQShUIGN5YW4sIFQgbWFnZW50YSwgVCB5ZWxsb3csIFQgYmxh
Y2ssIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGN5YW4geyBj
eWFuIH0KICAgICAgICAgLCBtYWdlbnRhIHsgbWFnZW50YSB9CiAgICAgICAgICwgeWVsbG93IHsg
eWVsbG93IH0KQEAgLTM5Myw3ICs1NjksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q01ZS0EgOiBDb2xvCiAgICAgfQogCiAgICAgY29uc3RleHByIENNWUtBKCkKLSAgICAgICAgOiBD
TVlLQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IENN
WUtBIHsgMCwgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtNDE3LDE3ICs1OTMsMTkg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPFhZWkE8VD4+IHsK
ICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFhZWk1vZGVs
PFQ+OwogCi0gICAgY29uc3RleHByIFhZWkEoVCB4LCBUIHksIFQgeiwgVCBhbHBoYSA9IENvbXBv
bmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIFhZWkEoVCB4LCBUIHksIFQg
eiwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogeCB7IHggfQog
ICAgICAgICAsIHkgeyB5IH0KICAgICAgICAgLCB6IHsgeiB9CiAgICAgICAgICwgYWxwaGEgeyBh
bHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAg
ICBjb25zdGV4cHIgWFlaQSgpCi0gICAgICAgIDogWFlaQSB7IENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IFhZ
WkEgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC00NDIsMTEgKzYyMCw2IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLngs
IGMueSwgYy56LCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBYWVpBPFQ+IGFzWFlaQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0
dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFhZWkE8VD4mIGEsIGNvbnN0IFhZWkE8
VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21w
b25lbnRzKGIpOwpAQCAtNDU3LDIxICs2MzAsMjIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKwogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4gY29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNh
bGxXaXRoQ29sb3JUeXBlKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cywgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBGdW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICBzd2l0Y2ggKGNv
bG9yU3BhY2UpIHsKICAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBz
dGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzU1JHQkEoY29tcG9u
ZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+
KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAg
ICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tl
KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNMaW5lYXJTUkdCQShjb21wb25lbnRz
KSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxMaW5lYXJTUkdCQTxUPj4oY29tcG9uZW50cykpOwog
ICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0Rpc3BsYXlQMyhjb21wb25lbnRz
KSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxEaXNwbGF5UDM8VD4+KGNvbXBvbmVudHMpKTsKICAg
ICBjYXNlIENvbG9yU3BhY2U6OkxhYjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNMYWIoY29tcG9uZW50cykpOworICAgICAgICBy
ZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJv
bUNvbXBvbmVudHM8TGFiPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9y
PihmdW5jdG9yKSwgYXNTUkdCQShjb21wb25lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6aW52b2tl
KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPFNSR0JB
PFQ+Pihjb21wb25lbnRzKSk7CiB9CiAKIC8vIFBhY2tlZCBDb2xvciBGb3JtYXRzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgU1JH
QkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogICAgICAgICByZXR1cm4geyAw
LCAwLCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7Ci0g
ICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oZmFzdERpdmlkZUJ5MjU1KHIg
KiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7
CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50
OF90Pj4oZmFzdERpdmlkZUJ5MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFz
dERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7CiB9CiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxp
ZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQpAQCAtODgsNyArODgsNyBAQCBTUkdCQTx1
aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCCiAgICAgICAgIHJldHVybiB7IDAsIDAs
IDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCiAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICBy
ZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihmYXN0RGl2aWRlQnkyNTUociAqIGEg
KyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAq
IGEgKyAyNTQpLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFs
cGhhPFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2
aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsK
IH0KIAogc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRl
KHVpbnQ4X3QgYywgdWludDhfdCBhKQpAQCAtMTAxLDcgKzEwMSw3IEBAIFNSR0JBPHVpbnQ4X3Q+
IHVucHJlbXVsdGlwbGllZChTUkdCQTx1aW4KICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9y
OwogICAgIGlmICghYSB8fCBhID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVu
dEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVs
dGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdD
b21wb25lbnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBv
bmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJl
bXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIyICs0
NSwxNCBAQCBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JHCiBTUkdCQTx1
aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90Pik7CiBTUkdCQTx1aW50
OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4pOwogCi11aW50OF90IGNvbnZlcnRQ
cmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQpOwordWludDhfdCBjb252ZXJ0UHJlc2NhbGVk
U1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0KTsKIAotdWludDhfdCBjb252ZXJ0VG9Db21wb25l
bnRCeXRlKGZsb2F0KTsKLWNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1
aW50OF90KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4
X3QpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xh
bXBUb0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50VHlwZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb21w
b25lbnRUeXBlPiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVu
dFR5cGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRCeXRlVG8o
dWludDhfdCk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRGbG9hdFRv
KGZsb2F0KTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gQ29sb3JUeXBlPHVpbnQ4X3Q+IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9y
VHlwZTxmbG9hdD4mKTsKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xv
clR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
cyhjb25zdCBDb2xvclR5cGU8dWludDhfdD4mKTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5h
bWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4gQ29tcG9uZW50VHlwZT4gY29uc3Rl
eHByIENvbG9yVHlwZTx1aW50OF90PiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMoQ29tcG9uZW50VHlw
ZS4uLik7Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFt
cFRvQ29tcG9uZW50RmxvYXRzKENvbXBvbmVudFR5cGUuLi4pOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gVCBjb252ZXJ0VG8oY29uc3QgVSYpOwordGVtcGxhdGU8PiBTUkdCQTxm
bG9hdD4gY29udmVydFRvKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+Jik7Cit0ZW1wbGF0ZTw+IFNSR0JB
PHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlm
aW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7CiAK
QEAgLTc3LDcxICs2OSw0OSBAQCBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUo
dWluCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAogCi1p
bmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCi17
Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQoZiksIDBsLCAyNTVsKTsKLX0KLQot
aW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewotICAgIHJl
dHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYgKiAyNTUuMGYpLCAwbCwgMjU1bCk7Ci19Ci0K
LWNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90IGJ5dGUpCitp
bmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0
IHZhbHVlKQogewotICAgIHJldHVybiBieXRlIC8gMjU1LjBmOworICAgIHJldHVybiBzdGQ6OmNs
YW1wKHN0ZDo6bHJvdW5kKHZhbHVlKSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgdWludDhfdCBjbGFtcFRvQ29tcG9uZW50Qnl0ZShD
b21wb25lbnRUeXBlIGNvbXBvbmVudCkKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcDxDb21wb25l
bnRUeXBlPihjb21wb25lbnQsIDAsIDI1NSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbXBv
bmVudFR5cGU+IGNvbnN0ZXhwciBmbG9hdCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoQ29tcG9uZW50
VHlwZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4o
Y29tcG9uZW50LCAwLCAxKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdGV4cHIgdWludDhfdCBjb252
ZXJ0Q29tcG9uZW50Qnl0ZVRvPHVpbnQ4X3Q+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNv
bnN0ZXhwciB1aW50OF90IGNvbnZlcnRCeXRlQWxwaGFUbzx1aW50OF90Pih1aW50OF90IHZhbHVl
KQogewogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8PiBjb25zdGV4cHIgZmxvYXQg
Y29udmVydENvbXBvbmVudEJ5dGVUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkKK3RlbXBsYXRlPD4g
Y29uc3RleHByIGZsb2F0IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOworICAgIHJldHVy
biB2YWx1ZSAvIDI1NS4wZjsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgdWludDhfdCBjb252ZXJ0
Q29tcG9uZW50RmxvYXRUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5l
IHVpbnQ4X3QgY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIHN0ZDo6
Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1bCk7CiB9CiAKLXRlbXBs
YXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGZsb2F0PihmbG9hdCB2
YWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRGbG9hdEFscGhhVG88ZmxvYXQ+
KGZsb2F0IHZhbHVlKQogewotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50RmxvYXQodmFsdWUp
OworICAgIHJldHVybiBjbGFtcGVkQWxwaGEodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0
ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgQ29sb3JUeXBlPHVpbnQ4X3Q+
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4mIGNvbG9yKQor
dGVtcGxhdGU8PiBpbmxpbmUgU1JHQkE8ZmxvYXQ+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTx1aW50
OF90PiYgY29sb3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sw
XSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50
c1szXSkgfTsKLX0KKyAgICBhdXRvIGNvbnZlcnRUb1NSR0JBRmxvYXQgPSBbXSh1aW50OF90IHZh
bHVlKSAtPiBmbG9hdCB7CisgICAgICAgIHJldHVybiB2YWx1ZSAvIDI1NS4wZjsKKyAgICB9Owog
Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4
cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JU
eXBlPHVpbnQ4X3Q+JiBjb2xvcikKLXsKICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcik7Ci0gICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29t
cG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252
ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50Rmxv
YXQoY29tcG9uZW50c1szXSkgfTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUZsb2F0KGNv
bXBvbmVudHNbMF0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0
VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVu
dHNbM10pIH07CiB9CiAKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWlu
dDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKENvbXBvbmVudFR5cGUuLi4gY29tcG9uZW50cykK
K3RlbXBsYXRlPD4gaW5saW5lIFNSR0JBPHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxm
bG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRCeXRlKGNvbXBv
bmVudHMpLi4uIH07Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUJ5dGUgPSBbXShmbG9hdCB2
YWx1ZSkgLT4gdWludDhfdCB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5k
KHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOworICAgIH07CiAKLXRlbXBsYXRlPHRlbXBsYXRl
PHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+
IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNsYW1wVG9Db21wb25lbnRGbG9hdHMoQ29tcG9u
ZW50VHlwZS4uLiBjb21wb25lbnRzKQotewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRG
bG9hdChjb21wb25lbnRzKS4uLiB9OworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50
c1swXSksIGNvbnZlcnRUb1NSR0JBQnl0ZShjb21wb25lbnRzWzFdKSwgY29udmVydFRvU1JHQkFC
eXRlKGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1szXSkgfTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xv
clR5cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlw
ZSYgY29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQpAQCAtMTU3LDUwICsxMjcsNjEgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdQogdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0
IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNv
cHkgPSBjb2xvcjsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEJ5dGVUbzxkZWNs
dHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZl
cnRCeXRlQWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRl
QWxwaGEpOwogICAgIHJldHVybiBjb3B5OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQogewogICAgIGF1dG8gY29weSA9IGNvbG9yOwotICAg
IGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxkZWNsdHlwZShjb3B5LmFscGhh
KT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICBy
ZXR1cm4gY29weTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIg
Q29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9y
QnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50
KSB7Ci0gICAgICAgIHJldHVybiBDb21wb25lbnRUcmFpdHM8ZGVjbHR5cGUoY29tcG9uZW50KT46
Om1heFZhbHVlIC0gY29tcG9uZW50OwotICAgIH0pOwotICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0
Q29tcG9uZW50Qnl0ZVRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKLSAg
ICByZXR1cm4gY29weTsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52
ZXJ0aWJsZSk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cik7CisgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGNvcHlbaV0gPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5n
ZXNbaV0ubWF4IC0gY29tcG9uZW50c1tpXTsKKyAgICBjb3B5WzNdID0gY29udmVydEJ5dGVBbHBo
YVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisK
KyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY29weSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
IHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQo
Y29sb3IsIFtdIChhdXRvIGNvbXBvbmVudCkgewotICAgICAgICByZXR1cm4gQ29tcG9uZW50VHJh
aXRzPGRlY2x0eXBlKGNvbXBvbmVudCk+OjptYXhWYWx1ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsK
LSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5h
bHBoYSk+KG92ZXJyaWRlQWxwaGEpOwotICAgIHJldHVybiBjb3B5OworICAgIHN0YXRpY19hc3Nl
cnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKKworICAgIGF1dG8gY29tcG9uZW50
cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRz
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgY29weVtp
XSA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlc1tpXS5tYXggLSBjb21wb25lbnRzW2ldOworICAg
IGNvcHlbM10gPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
PENvbG9yVHlwZT4oY29weSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29u
c3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIGNvbnN0
ZXhwciBhdXRvIG1pbiA9IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBv
bmVudFR5cGU+OjptaW5WYWx1ZTsKLSAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRU
cmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBS
R0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pik7CiAKICAgICBhdXRv
IFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKLSAgICByZXR1cm4gYzEgPT0gbWluICYmIGMy
ID09IG1pbiAmJiBjMyA9PSBtaW4gJiYgYWxwaGEgPT0gbWF4OworICAgIGNvbnN0ZXhwciBhdXRv
IHJhbmdlcyA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlczsKKyAgICByZXR1cm4gYzEgPT0gcmFu
Z2VzWzBdLm1pbiAmJiBjMiA9PSByYW5nZXNbMV0ubWluICYmIGMzID09IHJhbmdlc1syXS5taW4g
JiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBi
b29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0
byBtYXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pjo6bWF4VmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBD
b2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+Pik7CiAKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKLSAgICByZXR1
cm4gYzEgPT0gbWF4ICYmIGMyID09IG1heCAmJiBjMyA9PSBtYXggJiYgYWxwaGEgPT0gbWF4Owor
ICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlcyA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlczsKKyAg
ICByZXR1cm4gYzEgPT0gcmFuZ2VzWzBdLm1heCAmJiBjMiA9PSByYW5nZXNbMV0ubWF4ICYmIGMz
ID09IHJhbmdlc1syXS5tYXggJiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFz
dE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGlj
IE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAgICAgICBjb21wb25lbnRBcnJh
eVtpXSA9IGNvbXBvbmVudDsKICAgICB9CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXMoU1JHQkEgeyBjb21wb25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBv
bmVudEFycmF5WzNdLCBjb21wb25lbnRBcnJheVswXSB9KTsKKyAgICByZXR1cm4gY29udmVydFRv
PFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IGNvbXBvbmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJh
eVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVudEFycmF5WzBdIH0pOwogfQogCiBSZWY8
SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZUF0
dHJpYnV0ZXMoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJpbmcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1DCiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2
OyBpKyspIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAg
ICAgICAgICAgICAgY29sb3IgPSByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhj
b2xvcik7CiAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihy
b3VuZChjb2xvciAqIDI1NSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFy
cmF5OwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRy
YW5zZm9ybUMKICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9y
ID0gbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yKTsKICAgICAgICAgICAg
ICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24g
MjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JB
PHVpbnQ4X3Q+PiByb3VuZEFuZAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyByLCBnLCBiLCBh
IH0pOworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgciwgZywg
YiwgYSB9KTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNH
LmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAg
Q29sb3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcgogICAgIGlmICghcGl4ZWxb
M10pCiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzNdKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFNS
R0JBPHVpbnQ4X3Q+PihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAv
IHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CiB9CiAKIHZv
aWQgTmF0aXZlSW1hZ2U6OmNsZWFyU3ViaW1hZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5jcHAJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTkg
KzkxLDE5IEBAIGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHIKIHsKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9y
ID0gYXNTUkdCQShncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4
KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsK
LSAgICAgICAgY29sb3IgPSBhc1NSR0JBKHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5z
Zm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAg
ICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9y
TWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgSFVF
X1JPVEFURTogewotICAgICAgICBjb2xvciA9IGFzU1JHQkEoaHVlUm90YXRlQ29sb3JNYXRyaXgo
bV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8Zmxv
YXQ+PihodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1
cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0Nv
bXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTI0MCw3ICsyNDAsNyBA
QCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhCiAgICAgICAgIDAuMDMw
ZiwgLTAuNzQxZiwgLTAuMDg5ZiwgMC4wZiwgMS4wZiwKICAgICAgICAgMC4wMzBmLCAgMC4wNTlm
LCAtMC44OTBmLCAwLjBmLCAxLjBmCiAgICAgfTsKLSAgICBjb2xvciA9IGFzU1JHQkEodG9EYXJr
TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyho
dWVSb3RhdGVkU1JHQkEpKSk7CisgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNS
R0JBPGZsb2F0Pj4odG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhodWVSb3RhdGVkU1JHQkEpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bjo6aW52CiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYsIDAuMGYsIDEuMjVmLAog
ICAgICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAxLjI1ZgogICAgIH07Ci0g
ICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZSA9IGFzU1JHQkEodG9MaWdodE1vZGVNYXRyaXgu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7Cisg
ICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZSA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8ZmxvYXQ+Pih0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIAogICAgIC8vIENvbnZlcnQgdG8gSFNMLgogICAg
IGF1dG8gaHNsYSA9IHRvSFNMQShjb252ZXJ0ZWRUb0xpZ2h0TW9kZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw3ICsxMTcsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNv
bG9yKENvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRU
bzxTUkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTEzNiw3ICsxMzYsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1D
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdC
QTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAko
cmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCi0gICAgOiBD
b2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihj
b2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpCisg
ICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhh
KSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
MyArOTIsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAg
ICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAgICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVs
OnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOworICAgICAg
ICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0s
IHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAgIH0KIAogICAgIFtyZ2JDb2xvciBn
ZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBv
bmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAg
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0
PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkg
fSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNf
Y2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9u
ZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9y
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihEMkQx
X0NPTE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCisgICAgOiBDb2xvcihj
b252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3Iu
YiwgY29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
NyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBD
T01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVz
aFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQogewotICAgIGF1dG8gY29sb3JL
ZXkgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNv
bG9yLmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBjb2xvcktleSA9IGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwog
CiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBpZiAoIW1femVyb0JydXNoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjcxNTY0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3Ip
CiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50
IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAgIHJldHVybiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Ymx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJu
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVk
Q29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwNiw3ICs1
MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVudUJhY2tncm91bmRDb2xvCiAgICAgTlNV
SW50ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDow
IHk6MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFsw
XSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGlu
Z0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0s
IHBpeGVsWzNdKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKENTU1Zh
bHVlSUQgY3NzVmFsdWVJRCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25B
ZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShy
ZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcg
KzkxLDcgQEAgcHVibGljOgogICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9n
cmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2ltcGxlVG8uYmx1ZSwgc2ltcGxl
VG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZSk7CiAgICAgICAgIGZs
b2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZy
b20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYSwg
c2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKLSAgICAgICAgYW5pbWF0ZWQgPSBjbGFt
cFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHN0ZDo6bHJvdW5kKHJlZCksIHN0ZDo6bHJvdW5kKGdy
ZWVuKSwgc3RkOjpscm91bmQoYmx1ZSksIHN0ZDo6bHJvdW5kKGFscGhhKSk7CisgICAgICAgIGFu
aW1hdGVkID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc3RkOjpscm91
bmQocmVkKSwgc3RkOjpscm91bmQoZ3JlZW4pLCBzdGQ6Omxyb3VuZChibHVlKSwgc3RkOjpscm91
bmQoYWxwaGEpKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFu
Y2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29u
c3Qgb3ZlcnJpZGUKQEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgICAgICBhdXRvIHNp
bXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25v
cmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0g
ICAgICAgIG1fdG8gPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHNpbXBsZVRvLnJlZCAr
IHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBs
ZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOworICAgICAgICBtX3RvID0gbWFrZUNsYW1waW5n
Q29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQs
IHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBs
ZUZyb20uYmx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhT
VkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzE1OTMpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wMS0xOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5n
IGxvZ2ljIHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgVXBkYXRlIHRlc3RzIHRv
IHVzZSBuZXcgY29udmVydFRvPD4gZnVuY3Rpb25zLgorCiAyMDIxLTAxLTE4ICBGdWppaSBIaXJv
bm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5k
ZXJUcmVlXSBBU1NFUlQoIW1fY2hhbm5lbCkgZmFpbGVkIGluIFdlYlNvY2tldDo6Y29udGV4dERl
c3Ryb3llZApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVz
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9F
UShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNs
YUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1
aW50OD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRy
aXBwZWRDb2xvcik7CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xf
QmxhY2spCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xv
ci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAg
RVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTc4LDcgKzc4LDcg
QEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlw
cGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOwor
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDg+Pih0b1NS
R0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3Ip
OwogfQogCkBAIC05NCw3ICs5NCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNz
KTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRl
cyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252
ZXJ0VG88U1JHQkE8dWludDg+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShj
b2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMTAsNyArMTEwLDcgQEAgVEVTVChD
b2xvciwgUkdCVG9IU0xfQmx1ZSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5l
c3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRv
IHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4Pj4odG9TUkdCQShoc2xh
Q29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApA
QCAtMTI2LDcgKzEyNiw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0RhcmtHcmF5KQogICAgIAog
ICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVz
cyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0
ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29u
dmVydFRvPFNSR0JBPHVpbnQ4Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEo
Y29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQyLDcgKzE0Miw3IEBAIFRFU1Qo
Q29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRu
ZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xv
ciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OD4+KHRvU1JHQkEoaHNs
YUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAK
QEAgLTE1OCw3ICsxNTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkpCiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3Mp
OwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVz
KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZl
cnRUbzxTUkdCQTx1aW50OD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNv
bG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZp
c2lvbiAyNzE1NjQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5k
ZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiAgICAgfQogCiAgICAgYXV0byBjb21wb25lbnRCeXRl
cyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAxMjgsIDYzLCAxMjcgfTsKLSAgICBDb2xvciByZ2Ix
IHsgY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbXBvbmVudEJ5dGVzKSB9OworICAgIENvbG9y
IHJnYjEgeyBjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykgfTsKICAgICBD
b2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKICAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7
CiAgICAgRVhQRUNUX05FKHJnYjIsIHJnYjEpOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFRFU1QoRXh0
ZW5kZWRDb2xvciwgSGFzaCkKICAgICB9CiAKICAgICBhdXRvIGNvbXBvbmVudEJ5dGVzID0gU1JH
QkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OwotICAgIENvbG9yIHJnYjEgeyBjb252
ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29tcG9uZW50Qnl0ZXMpIH07CisgICAgQ29sb3IgcmdiMSB7
IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9OwogICAgIENvbG9yIHJn
YjIgeyBjb21wb25lbnRCeXRlcyB9OwogICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5o
YXNoKCkpOwogfQo=
</data>
<flag name="commit-queue"
          id="435661"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417855</attachid>
            <date>2021-01-18 18:26:12 -0800</date>
            <delta_ts>2021-01-18 18:30:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210118182611.patch</filename>
            <type>text/plain</type>
            <size>81423</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIG9mIGFkZGluZyBzdXBwb3J0
IGZvciBFeHRlbmRlZC1zUkdCIHRvIGNvbG9yIHR5cGVzLAorICAgICAgICB0aGlzIGFkZHMgY29u
c3RleHByIG1ldGFkYXRhIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb2xvcgorICAg
ICAgICB0eXBlcyB3aXRoIHRoZSBjb3JyZWN0IGNsYW1wZWQgKG9yIHVuY2xhbXBlZCkgdmFsdWVz
IGFuZCBhZG9wdHMgdGhlbQorICAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuCisKKyAg
ICAgICAgLSBSZW1vdmVzICJjb21wb25lbnQgYnl0ZXMiIGFuZCAiY29tcG9uZW50IGZsb2F0cyIg
Y29uY2VwdHMgcmVwbGFjaW5nCisgICAgICAgICAgd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIGNv
bG9yIHR5cGVzIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnM6CisgICAgICAgICAgCisgICAgICAgICAg
ICBjb252ZXJ0VG9Db21wb25lbnRCeXRlcy9jb252ZXJ0VG9Db21wb25lbnRGbG9hdHMgLT4gY29u
dmVydFRvPENvbG9yVHlwZTxUPj4KKyAgICAgICAgICAgIGNsYW1wVG9Db21wb25lbnRCeXRlcy9j
bGFtcFRvQ29tcG9uZW50RmxvYXRzIC0+IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8Q29sb3JUeXBl
PFQ+PgorCisgICAgICAgIC0gQWRkcyBNb2RlbCB0eXBlIGFsaWFzZXMgdG8gZWFjaCBjb2xvciB0
eXBlIHdoaWNoIGNhbiBzcGVjaWZ5IHRyYWl0cyAKKyAgICAgICAgICBmb3IgdGhhdCB0eXBlIG9m
IGNvbG9yLiBUaGVzZSB0cmFpdHMgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgdmFsaWQgCisg
ICAgICAgICAgY29tcG9uZW50IHJhbmdlcyBhbmQgd2hldGhlciB0aGUgY29sb3IgY2FuIGJlIGlu
dmVydGVkLiBNb3JlIHdpbGwgYmUgCisgICAgICAgICAgYWRkZWQgKGxpa2Ugd2hpdGUgcG9pbnQg
YW5kIGJhc2UgY29sb3Igc3BhY2UpIHRvIGhlbHAgc2ltcGxpZnkgdXRpbGl0eSAKKyAgICAgICAg
ICBhbmQgY29udmVyc2lvbiBjb2RlLiAKKworICAgICAgICAtIEFkZHMgYXNzZXJ0aW9ucyB0byBl
YWNoIGNvbG9yIHR5cGUgY29uc3RydWN0b3IgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZAorICAgICAg
ICAgIGFyZSB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlcyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBNb2Rl
bCkuCisKKyAgICAgICAgLSBSZW1vdmVkIGFzRm9vKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYp
IGZ1bmN0aW9ucywgd2hpY2ggd2VyZSBhIGxpdHRsZSAKKyAgICAgICAgICB0byAgc2ltaWxhcmx5
IG5hbWVkIHRvIHRoZSB0b0ZvbygpIGZ1bmN0aW9ucy4gSW5zdGVhZCwgdGhlIGdlbmVyaWMgCisg
ICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZTxUPj4gKG9yIGl0J3MgY2xhbXBp
bmcgdmFyaWFudHMpIGNhbiBiZSB1c2VkCisgICAgICAgICAgdG8gY29udmVydCBmcm9tIENvbG9y
Q29tcG9uZW50cyB0byBjb2xvciB0eXBlcy4KKworICAgICAgICAtIEFkZHMgQWxwaGFUcmFpdHMg
dG8gbW9kZWwgYWxwaGEgdmFsdWVzIGFzIHRoZXNlIGFyZSBjb25zaXN0ZW50IGJldHdlZW4KKyAg
ICAgICAgICBjb2xvciB0eXBlcyBhbmQgb25seSBjaGFuZ2UgYmFzZWQgb24gY29tcG9uZW50IHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6
CisKIDIwMjEtMDEtMTggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHJlY2VudGx5IGFkZGVkIGdsdWUgY29kZTogUmVuZGVyTGF5
ZXI6OihzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgLyBzZXRTY3JvbGxTaG91bGRD
bGVhckxhdGNoZWRTdGF0ZSAvIHNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMjcxNTY0
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGlj
IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleAogCiAjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfQ09MT1IpCiAgICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpDb2xvcldlbGwpIHsKLSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhjb3JlT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9y
ID0gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCBj
b2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAyNzE1NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAgLSAo
TlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Q29sb3JTdHJpbmdWYQogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAg
ICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG88U1JH
QkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1ZSgpKTsKICAgICAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiICU3LjVmICU3LjVmICU3LjVm
IDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlXTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAyNzE1NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM4NSw3ICsyMzg1LDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gQChi
YWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCkpOwogCiAgICAgICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29t
cG9uZW50RmxvYXRzKGJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgICAgICBh
dXRvIGNvbG9yID0gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oYmFja2luZ09iamVjdC0+Y29sb3JW
YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
InJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3Iu
Ymx1ZV07CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9yZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xv
ci5yZWQpKQogICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5n
cmVlbikpCiAgICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1
ZSkpCi0gICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21w
b25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkpCisgICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFw
cGVyKG93bmVyLCBjb2xvci5hbHBoYUFzRmxvYXQoKSkpCiAgICAgewogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAko
cmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJG
YXN0UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOyAvLyBGSVhNRTogQWxyZWFkeSBjbGFtcGVkLCBk
b2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdl
L3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBhbmQgcmVwbGFjZSBjYWxsIHRvIGNs
YW1wVG9Db21wb25lbnRCeXRlcyB3aXRoIGRpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWlu
dDhfdD4uCisgICAgICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4
X3Q+PihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7IC8vIEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQs
IGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRlIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRh
Z2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50OF90IGFuZCByZXBsYWNlIGNhbGwgdG8g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3Ry
dWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50
YXguCkBAIC01MDUsNyArNTA1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKGN1
cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocmVkLCBncmVlbiwgYmx1ZSk7IC8v
IEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQsIGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRl
IHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50
OF90IGFuZCByZXBsYWNlIGNhbGwgdG8gY2xhbXBUb0NvbXBvbmVudEJ5dGVzIHdpdGggZGlyZWN0
IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KKyAgICAgICAgcmV0dXJuIG1ha2VDbGFt
cGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHJlZCwgZ3JlZW4sIGJsdWUpOyAvLyBGSVhN
RTogQWxyZWFkeSBjbGFtcGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJz
ZUNvbG9ySW50T3JQZXJjZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBh
bmQgcmVwbGFjZSBjYWxsIHRvIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+
IHdpdGggZGlyZWN0IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KICAgICB9CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxNTY0
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIHVpbnQ4X3QgY2xh
bXBSR0JDb21wb25lbnQoZG91YmxlIAogICAgIGlmIChpc1BlcmNlbnRhZ2UpCiAgICAgICAgIHZh
bHVlID0gdmFsdWUgLyAxMDAuMCAqIDI1NS4wOwogCi0gICAgcmV0dXJuIGNvbnZlcnRQcmVzY2Fs
ZWRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JH
QkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlUkdCUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTczOSw3ICs3MzksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIH0KLSAgICAgICAgYWxw
aGFDb21wb25lbnQgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFscGhhKTsKKyAgICAgICAgYWxw
aGFDb21wb25lbnQgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFscGhhKTsKICAgICB9
OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCkBAIC03OTQsNyArNzk0LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKEhTTEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlb
MF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CisgICAgcmV0
dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJy
YXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYSkgfSkpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlT3B0aW9u
YWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI3MTU2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjAxLDcgKzYwMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENv
bnRlbnRJblIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFw
cGVhciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3Ig
Y2FuIGJlIHNwZWNpZmllZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEubGlnaHRuZXNz
ID0gMC41ZjsKICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEuYWxwaGEgKj0gMC4zOGY7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0gY29udmVydFRvQ29t
cG9uZW50Qnl0ZXModG9TUkdCQShoc2xhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHVuZGVybGluZUNvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGEp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgc2VyaWFsaXphdGlvbkZvckNTUyh1bmRl
cmxpbmVDb2xvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3MTU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAwLDE3ICsxMzAwLDE3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
Ymx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzZXRTaGFkb3coRmxv
YXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH0pKTsKKyAgICBzZXRT
aGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG88U1JHQkE8dWlu
dDhfdD4+KFNSR0JBIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfSkp
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9h
dCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCks
IGJsdXIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+PihTUkdCQSB7IHIsIGcsIGIsIGEgfSkpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBh
KQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoQ01ZS0EgeyBjLCBtLCB5LCBrLCBhIH0pKSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKENNWUtBIHsgYywgbSwgeSwgaywgYSB9KSkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI3MTU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3Ig
Y29sb3IpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTUkdCQTxmbG9hdD4m
IGNvbG9yQ29tcG9uZW50cykKLSAgICA6IG1fc3R5bGUoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
Y29sb3JDb21wb25lbnRzKSkKKyAgICA6IG1fc3R5bGUoY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+
Pihjb2xvckNvbXBvbmVudHMpKQogewogfQogCkBAIC0xNDgsNyArMTQ4LDcgQEAgYm9vbCBDYW52
YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAgIHJl
dHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxD
b2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29tcG9uZW50cyk7Cisg
ICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6
Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbXBvbmVu
dHMpOwogfQogCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KFJlZlB0cjxKU09OOjpPYmoKIAogICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUo
UHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKICAgICBpZiAoIWEpCi0gICAgICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOwotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoKmEpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8dWludDhfdD4+KCpyLCAqZywgKmIpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25l
bnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KCpyLCAqZywgKmIsIGNvbnZlcnRGbG9hdEFs
cGhhVG88dWludDhfdD4oKmEpKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3Io
Y29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046Ok9iamVjdCYgY29uZmlnT2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24g
MjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBj
b25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikg
LyB2OwogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlw
bGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1
cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0
aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJr
ZW5lZCgpIGNvbnN0CkBAIC0xMDUsNyArMTA1LDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkg
Y29uc3QKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11
bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlwbGllciAqIHIsIG11bHRpcGxp
ZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNSR0JB
PHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlw
bGllciAqIGIsIGEgfSk7CiB9CiAKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdApAQCAt
MTQxLDcgKzE0MSwxNCBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
CiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QK
IHsKICAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRl
cmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKLSAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgICAgIHVzaW5nIENv
bG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZSh1bmRlcmx5aW5nQ29sb3IpPjsKKyAgICAg
ICAgaWYgY29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCisgICAgICAg
ICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29s
b3IsIGFscGhhKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRGV0ZXJt
aW5lIGlmIHRoZXJlIGlzIGEgbWVhbmluZ2Z1bCB1bmRlcnN0YW5kaW5nIG9mIGludmVyc2lvbiB0
aGF0IHdvcmtzCisgICAgICAgICAgICAvLyBiZXR0ZXIgZm9yIG5vbi1pbnZlcnRpYmxlIGNvbG9y
IHR5cGVzIGxpa2UgTGFiLgorICAgICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CisgICAgICAgIH0K
ICAgICB9KTsKIH0KIApAQCAtMTU3LDcgKzE2NCw3IEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBD
b2xvckNvbXBvbmVudHM8ZmwKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1
cm4geyBhc0V4dGVuZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygp
IH07Ci0gICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydFRvQ29tcG9uZW50RmxvYXRzKGFzSW5saW5lKCkpKSB9OworICAgIHJldHVybiB7IENvbG9y
U3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGFz
SW5saW5lKCkpKSB9OwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8g
YXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0K
ICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50
OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYXNFeHRlbmRlZCgpLmFscGhhKCkpIDogYXNJbmxpbmUoKS5hbHBoYTsgfQot
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydFRvQ29tcG9uZW50RmxvYXQoYXNJbmxpbmUoKS5h
bHBoYSk7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSA/IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oYXNFeHRlbmRlZCgpLmFscGhhKCkp
IDogYXNJbmxpbmUoKS5hbHBoYTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsg
cmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydEJ5dGVB
bHBoYVRvPGZsb2F0Pihhc0lubGluZSgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQg
ZmxvYXQgbHVtaW5hbmNlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRu
ZXNzKCkgY29uc3Q7IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5h
bmNlLgpAQCAtMzMxLDExICszMzEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4g
Q29sb3I6OnRvUwogICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1
aW50OF90PikKICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29sb3IpOwogICAgICAgICB9LAogICAgICAgICBb
XSAoY29uc3QgYXV0byYgY29sb3IpIHsKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoY29sb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGNvbG9yKSk7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKICAgICAgICAgICAgICAgICByZXR1
cm4gdG9TUkdCQShjb2xvcik7CiAgICAgICAgIH0KQEAgLTM5MSwxNSArMzkxLDI3IEBAIGlubGlu
ZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjwKIAogaW5saW5lIGJvb2wgQ29sb3I6
OmlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmNh
bGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICByZXR1
cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xvcik7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVy
bHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIHsKKyAgICAgICAgdXNp
bmcgQ29sb3JUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBlKHVuZGVybHlpbmdDb2xvcik+Owor
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6
TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+KQorICAg
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzQmxhY2sodW5kZXJseWluZ0NvbG9yKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRGVmaW5lIG1lYW5pbmdmdWwgYmxhY2sg
cG9pbnRzIGZvciBhbGwgY29sb3IgdHlwZXMuCisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6
aXNCbGFjayh0b1NSR0JBKHVuZGVybHlpbmdDb2xvcikpOworICAgICAgICB9CiAgICAgfSk7CiB9
CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYg
Y29sb3IpIHsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUoY29sb3IpOworICAgIHJl
dHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWlu
Z0NvbG9yKSB7CisgICAgICAgIHVzaW5nIENvbG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlw
ZSh1bmRlcmx5aW5nQ29sb3IpPjsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6
OkNvbXBvbmVudFR5cGU+PikKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHVu
ZGVybHlpbmdDb2xvcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IERl
ZmluZSBtZWFuaW5nZnVsIHdoaXRlIHBvaW50cyBmb3IgYWxsIGNvbG9yIHR5cGVzLgorICAgICAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpKTsK
KyAgICAgICAgfQogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENv
bG9yJiBiYWNrZAogICAgIGludCBnID0gKGJhY2tkcm9wRyAqIGJhY2tkcm9wQSAqICgweEZGIC0g
c291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUcpIC8gZDsKICAgICBpbnQgYiA9IChi
YWNrZHJvcEIgKiBiYWNrZHJvcEEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEg
KiBzb3VyY2VCKSAvIGQ7CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JB
PihyLCBnLCBiLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1
aW50OF90Pj4ociwgZywgYiwgYSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENv
bG9yJiBjb2xvcikKQEAgLTc4LDcgKzc4LDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3Qg
Q29sb3ImIGNvbG9yKQogICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywg
YWxwaGEpOwogICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEp
OwogCi0gICAgICAgIHJlc3VsdCA9IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywg
YiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PHVpbnQ4X3Q+PihyLCBnLCBiLCBhbHBoYSk7CiAKICAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49
IDAgJiYgYiA+PSAwKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDAsNyArMTAwLDcgQEAgQ29s
b3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGF1dG8gcHJlbXVsdGlw
bGllZEZyb20gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyhmcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpKTsKICAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHByZW11bHRpcGxpZWRDZWlsaW5nKHRv
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpKTsKIAotICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5k
ZWQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIGF1dG8gcHJlbXVsdGlwbGll
ZEJsZW5kZWQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8u
cmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9t
LmdyZWVuLCBwcmVtdWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHBy
b2dyZXNzKSwKQEAgLTEyMCw3ICsxMjAsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAgICAgYXV0byB0b1NSR0IgPSB0by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAot
ICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjggKzMy
LDEwMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWZsb2F0IGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoZmxvYXQgYykKKy8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IK
Ky8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpf
TWF0cml4Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5l
YXJTUkdCTWF0cml4IHsKKyAgICAgMy4yNDA0NTQyZiwgLTEuNTM3MTM4NWYsIC0wLjQ5ODUzMTRm
LAorICAgIC0wLjk2OTI2NjBmLCAgMS44NzYwMTA4ZiwgIDAuMDQxNTU2MGYsCisgICAgIDAuMDU1
NjQzNGYsIC0wLjIwNDAyNTlmLCAgMS4wNTcyMjUyZgorfTsKKworLy8gaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU1JHQgorLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5k
ZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1h
dHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggeworICAgIDAuNDEyNDU2NGYsICAwLjM1
NzU3NjFmLCAgMC4xODA0Mzc1ZiwKKyAgICAwLjIxMjY3MjlmLCAgMC43MTUxNTIyZiwgIDAuMDcy
MTc1MGYsCisgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCit9OworCisv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNv
ZGUKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJEaXNwbGF5
UDNNYXRyaXggeworICAgICAyLjQ5MzQ5NjkxMTk0MTQyNWYsICAtMC45MzEzODM2MTc5MTkxMjM5
ZiwgLTAuNDAyNzEwNzg0NDUwNzE2OGYsCisgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAxLjc2
MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKKyAgICAgMC4wMzU4NDU4MzAy
NDM3ODQ1ZiwgLTAuMDc2MTcyMzg5MjY4MDQxOGYsICAwLjk1Njg4NDUyNDAwNzY4NzJmCit9Owor
CisvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9u
LWNvZGUKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAz
VG9YWVpNYXRyaXggeworICAgIDAuNDg2NTcwOTQ4NjQ4MjE2MmYsIDAuMjY1NjY3NjkzMTY5MDkz
MWYsIDAuMTk4MjE3Mjg1MjM0MzYzZiwKKyAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTcz
ODUyMTgzNjUwNjRmLCAwLjA3OTI4NjkxNDA5Mzc0NWYsCisgICAgMC4wZiwgICAgICAgICAgICAg
ICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCit9OworCisvLyBodHRw
Oi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwK
K3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gRDUwVG9ENjVNYXRyaXggeworICAg
ICAwLjk1NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKKyAgICAtMC4wMjgyODk1Ziwg
IDEuMDA5OTQxNmYsIDAuMDIxMDA3N2YsCisgICAgIDAuMDEyMjk4MmYsIC0wLjAyMDQ4MzBmLCAx
LjMyOTkwOThmCit9OworCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5o
dG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8Mywg
Mz4gRDY1VG9ENTBNYXRyaXggeworICAgICAxLjA0NzgxMTJmLCAwLjAyMjg4NjZmLCAtMC4wNTAx
MjcwZiwKKyAgICAgMC4wMjk1NDI0ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCisgICAgLTAu
MDA5MjM0NWYsIDAuMDE1MDQzNmYsICAwLjc1MjEzMTZmCit9OworCitmbG9hdCBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQgYykKIHsKKyAgICBBU1NFUlQoYyA+PSAwKTsK
KyAgICBBU1NFUlQoYyA8PSAxKTsKKwogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKICAgICAgICAg
cmV0dXJuIDEyLjkyZiAqIGM7CiAKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oMS4wNTVmICog
c3RkOjpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4wNTVmLCAwLCAxKTsKIH0KIAotZmxvYXQgcmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQorZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudENsYW1waW5nKGZsb2F0IGMpCiB7CisgICAgQVNTRVJUKGMgPj0gMCk7CisgICAgQVNT
RVJUKGMgPD0gMSk7CisgICAgCiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCiAgICAgICAgIHJldHVy
biBjIC8gMTIuOTJmOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsg
MC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCitmbG9hdCBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Tm9uQ2xhbXBpbmcoZmxvYXQgYykKK3sKKyAgICBmbG9hdCBzaWduID0gc3Rk
OjpzaWduYml0KGMpID8gLTEuMGYgOiAxLjBmOworICAgIGMgPSBzdGQ6OmFicyhjKTsKKworICAg
IGlmIChjIDwgMC4wMDMxMzA4ZikKKyAgICAgICAgcmV0dXJuIDEyLjkyZiAqIGMgKiBzaWduOwor
CisgICAgcmV0dXJuICgxLjA1NWYgKiBzdGQ6OnBvdyhjLCAxLjBmIC8gMi40ZikgLSAwLjA1NWYp
ICogc2lnbjsKK30KKworZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudE5vbkNsYW1waW5n
KGZsb2F0IGMpCit7CisgICAgZmxvYXQgc2lnbiA9IHN0ZDo6c2lnbmJpdChjKSA/IC0xLjBmIDog
MS4wZjsKKyAgICBjID0gc3RkOjphYnMoYyk7CisKKyAgICBpZiAoYyA8PSAwLjA0MDQ1ZikKKyAg
ICAgICAgcmV0dXJuIGMgLyAxMi45MmYgKiBzaWduOworCisgICAgcmV0dXJuIHN0ZDo6cG93KChj
ICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZikgKiBzaWduOworfQorCisvLyBHYW1tYSBjb252ZXJz
aW9ucy4KKwogTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29s
b3IuZ3JlZW4pLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUp
LAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAog
ICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBAIC02MSw5ICsxMzUsOSBAQCBMaW5lYXJT
UkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShj
b25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAg
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRD
bGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTcx
LDkgKzE0NSw5IEBAIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGYKIExp
bmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNv
bG9yLmdyZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVl
KSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwK
ICAgICAgICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtODEsODEgKzE1NSw0OSBAQCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzCiBEaXNwbGF5UDM8ZmxvYXQ+IHRv
RGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJl
dHVybiB7Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAg
ICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAg
ICAgfTsKIH0KIAorLy8gTWF0cml4IGNvbnZlcnNpb25zLgorCiBMaW5lYXJTUkdCQTxmbG9hdD4g
dG9MaW5lYXJTUkdCQShjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5k
Ymxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKLSAgICBjb25zdGV4
cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKLSAgICAgICAgIDMu
MjQwNDU0MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1MzE0ZiwKLSAgICAgICAgLTAuOTY5MjY2MGYs
ICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKLSAgICAgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAy
NTlmLCAgMS4wNTcyMjUyZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyU1JHQkEoeHl6VG9M
aW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxw
aGE8TGluZWFyU1JHQkE8ZmxvYXQ+Pih4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRD
b2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8Zmxv
YXQ+IHRvWFlaQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKLSAgICAvLyBodHRwOi8vd3d3LmJydWNl
bGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxpbmVhclNSR0JUb1hZWk1hdHJpeCB7Ci0gICAgICAg
IDAuNDEyNDU2NGYsICAwLjM1NzU3NjFmLCAgMC4xODA0Mzc1ZiwKLSAgICAgICAgMC4yMTI2NzI5
ZiwgIDAuNzE1MTUyMmYsICAwLjA3MjE3NTBmLAotICAgICAgICAwLjAxOTMzMzlmLCAgMC4xMTkx
OTIwZiwgIDAuOTUwMzA0MWYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEobGluZWFyU1JHQlRv
WFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFla
QTxmbG9hdD4+KGxpbmVhclNSR0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAogTGluZWFyRGlzcGxheVAzPGZsb2F0
PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8g
aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2Rl
Ci0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlzcGxheVAzTWF0
cml4IHsKLSAgICAgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlm
LCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKLSAgICAgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAx
Ljc2MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKLSAgICAgICAgIDAuMDM1
ODQ1ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1MjQwMDc2ODcy
ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyRGlzcGxheVAzKHh5elRvTGluZWFyRGlzcGxh
eVAzTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8TGlu
ZWFyRGlzcGxheVAzPGZsb2F0Pj4oeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8
ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKLSAg
ICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9u
LWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAzVG9Y
WVpNYXRyaXggewotICAgICAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5MzE2OTA5
MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCi0gICAgICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAu
NjkxNzM4NTIxODM2NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKLSAgICAgICAgMC4wZiwgICAg
ICAgICAgICAgICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCi0gICAg
fTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgIHJldHVy
biBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFlaQTxmbG9hdD4+KGxpbmVhckRp
c3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKSkpOwogfQogCisvLyBDaHJvbWF0aWMgQWRhcHRhdGlvbiBjb252ZXJzaW9u
cy4KKwogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDUwV2hpdGVQb2ludFRvRDY1V2hp
dGVQb2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cDovL3d3dy5i
cnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ1MFRvRDY1TWF0cml4IHsKLSAgICAgICAgIDAuOTU1
NTc2NmYsIC0wLjAyMzAzOTNmLCAwLjA2MzE2MzZmLAotICAgICAgICAtMC4wMjgyODk1ZiwgIDEu
MDA5OTQxNmYsIDAuMDIxMDA3N2YsCi0gICAgICAgICAwLjAxMjI5ODJmLCAtMC4wMjA0ODMwZiwg
MS4zMjk5MDk4ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENTBUb0Q2NU1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICBy
ZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENTBU
b0Q2NU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcikpKTsKIH0KIAogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDY1V2hpdGVQb2lu
dFRvRDUwV2hpdGVQb2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0
cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1s
Ci0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ2NVRvRDUwTWF0cml4IHsKLSAgICAg
ICAgIDEuMDQ3ODExMmYsIDAuMDIyODg2NmYsIC0wLjA1MDEyNzBmLAotICAgICAgICAgMC4wMjk1
NDI0ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCi0gICAgICAgIC0wLjAwOTIzNDVmLCAwLjAx
NTA0MzZmLCAgMC43NTIxMzE2ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENjVUb0Q1ME1h
dHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikp
KTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8Zmxv
YXQ+PihENjVUb0Q1ME1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gTGFiIGNvbnZlcnNpb25zLgorCiBzdGF0aWMgY29u
c3RleHByIGZsb2F0IExBQmUgPSAyMTYuMGYgLyAyNDM4OS4wZjsKIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgTEFCayA9IDI0Mzg5LjBmIC8gMjcuMGY7CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IEQ1
MFdoaXRlVmFsdWVzW10gPSB7IDAuOTY0MjJmLCAxLjBmLCAwLjgyNTIxZiB9OwpAQCAtMjIxLDYg
KzI2Myw5IEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG8KICAgICBy
ZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGNvbG9yV2l0aEQ1MFdoaXRlUG9pbnQuYWxwaGEgfTsK
IH0KIAorCisvLyBMQ0ggY29udmVyc2lvbnMuCisKIExDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBM
YWI8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNv
bG9yLTQvI2xhYi10by1sY2gKQEAgLTI0Nyw2ICsyOTIsOCBAQCBMYWI8ZmxvYXQ+IHRvTGFiKGNv
bnN0IExDSEE8ZmxvYXQ+JiBjb2xvCiAgICAgfTsKIH0KIAorLy8gSFNMIGNvbnZlcnNpb25zLgor
CiBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAv
LyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS4KQEAgLTMzMiw2
ICszNzksOCBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgCiAgICAg
fTsKIH0KIAorLy8gQ01ZSyBjb252ZXJzaW9ucy4KKwogU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29u
c3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBhdXRvIFtjLCBtLCB5LCBrLCBhXSA9IGNv
bG9yOwpAQCAtMzU2LDYgKzQwNSw5IEBAIENNWUtBPGZsb2F0PiB0b0NNWUtBKGNvbnN0IFNSR0JB
PGZsb2F0PiYKICAgICByZXR1cm4geyBjLCBtLCB5LCBrLCBhIH07CiB9CiAKKworLy8gQ29tYmlu
YXRpb24gY29udmVyc2lvbnMgKGNvbnN0cnVjdGVkIGZyb20gbW9yZSBiYXNpYyBjb252ZXJzaW9u
cyBhYm92ZSkuCisKIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQogewogICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJTUkdCQShjb2xvcikpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJ
KHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0IgPC0+IExpbmVh
clJHQiAvIERpc3BsYXlQMyA8LT4gTGluZWFyRGlzcGxheVAzIGNvbnZlcnNpb24gZnVuY3Rpb25z
IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KLWZsb2F0IGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnQoZmxvYXQpOwotZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChm
bG9hdCk7CitmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQpOwor
ZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGZsb2F0KTsKKworZmxvYXQg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudE5vbkNsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRv
TGluZWFyQ29sb3JDb21wb25lbnROb25DbGFtcGluZyhmbG9hdCk7CiAKIAogLy8gQWxsIGNvbG9y
IHR5cGVzIG11c3QgYXQgbGVhc3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnMg
dG8gYW5kIGZyb20gdGhlIFhZWkEgY29sb3Igc3BhY2U6CkBAIC01Niw0MiArNTksMzYgQEAgV0VC
Q09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZQogLy8gQWRkaXRpb25zCiBXRUJD
T1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4m
KTsKIAotCiAvLyBEaXNwbGF5UDMKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+
IHRvRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVf
RVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlz
cGxheVAzPGZsb2F0PiYpOwogCi0KIC8vIExpbmVhckRpc3BsYXlQMwogV0VCQ09SRV9FWFBPUlQg
WFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIFdFQkNP
UkVfRVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3Qg
WFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZs
b2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLQogLy8g
TGFiCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGFiPGZsb2F0PiYp
OwogV0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBYWVpBPGZsb2F0PiYpOwog
Ly8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTGFi
PGZsb2F0PiYpOwogCi0KIC8vIExDSEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFla
QShjb25zdCBMQ0hBPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgTENIQTxmbG9hdD4gdG9MQ0hB
KGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExhYjxm
bG9hdD4gdG9MYWIoY29uc3QgTENIQTxmbG9hdD4mKTsKIAotCiAvLyBIU0xBCiBXRUJDT1JFX0VY
UE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgSFNMQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQ
T1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25z
CiBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYp
OwogCi0KIC8vIENNWUtBCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3Qg
Q01ZS0E8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBDTVlLQTxmbG9hdD4gdG9DTVlLQShjb25z
dCBYWVpBPGZsb2F0PiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVHlwZXMuaAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEs
MjE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBDb21wb25lbnRUcmFpdHM7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEFscGhhVHJhaXRz
OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8dWludDhfdD4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBtaW5WYWx1ZSA9IDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IG1heFZhbHVlID0gMjU1OwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8
dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCB0cmFuc3BhcmVudCA9IDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG9wYXF1ZSA9IDI1NTsKIH07CiAKLXRlbXBs
YXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czxmbG9hdD4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgZmxvYXQgbWluVmFsdWUgPSAwLjBmOwotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWF4
VmFsdWUgPSAxLjBmOwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0IHRyYW5zcGFyZW50ID0gMC4wZjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGZsb2F0IG9wYXF1ZSA9IDEuMGY7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRSYW5nZSB7CisgICAgVCBtaW47CisgICAgVCBtYXg7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFJHQk1vZGVsOwordGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBMYWJNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTENITW9kZWw7
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhTTE1vZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBDTVlLTW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFhZWk1vZGVsOwor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8dWludDhfdD4sIDM+IHJhbmdlcyB7
IHsKKyAgICAgICAgeyAwLCAyNTUgfSwKKyAgICAgICAgeyAwLCAyNTUgfSwKKyAgICAgICAgeyAw
LCAyNTUgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxl
ID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAz
PiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAg
ICAgeyAwLCAxIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0
aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBMYWJNb2RlbDxmbG9hdD4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0
PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAg
ICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBMQ0hNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xv
ckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgMCwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAwLCAzNjAgfQor
ICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2Vz
IHsgeworICAgICAgICB7IDAsIDM2MCB9LAorICAgICAgICB7IDAsIDEwMCB9LAorICAgICAgICB7
IDAsIDEwMCB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGli
bGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ01ZS01vZGVsPGZsb2F0PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+
LCA0PiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAg
ICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMCwgMSB9CisgICAgfSB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29s
b3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAor
ICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21D
b21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4gQ29s
b3JUeXBlIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBj
bGFtcGVkQ29tcG9uZW50KFQgYykgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Cit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsX3Y8VD4pOworCisgICAgY29u
c3RleHByIGF1dG8gcmFuZ2UgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5kZXhdOworICAg
IHJldHVybiBzdGQ6OmNsYW1wPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4oYywg
cmFuZ2UubWluLCByYW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHVuc2lnbmVkIEluZGV4PiBjb25zdGV4cHIgdWludDhfdCBjbGFtcGVkQ29tcG9uZW50KGNvbnN0
IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgYykKK3sKKyAgICByZXR1cm4gY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIEluZGV4PihjW0luZGV4XSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdW5zaWduZWQgSW5kZXg+IGNvbnN0ZXhwciBmbG9hdCBjbGFtcGVkQ29tcG9u
ZW50KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGMpCit7CisgICAgY29uc3RleHByIGF1
dG8gcmFuZ2UgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5kZXhdOworCisgICAgaWYgY29u
c3RleHByIChyYW5nZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpICYmIHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSkKKyAgICAgICAgcmV0dXJuIGNbSW5kZXhdOworCisgICAgaWYgY29uc3RleHByIChyYW5nZS5t
aW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAgICBy
ZXR1cm4gc3RkOjptaW4oY1tJbmRleF0sIHJhbmdlLm1heCk7CisKKyAgICBpZiBjb25zdGV4cHIg
KHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4KGNbSW5kZXhdLCByYW5nZS5taW4pOworCisgICAgcmV0dXJu
IHN0ZDo6Y2xhbXAoY1tJbmRleF0sIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcG9uZW50VHlwZSA9IFQ+IGNvbnN0ZXhwciBDb21w
b25lbnRUeXBlIGNsYW1wZWRBbHBoYShUIGFscGhhKQoreworICAgIHJldHVybiBzdGQ6OmNsYW1w
PENvbXBvbmVudFR5cGU+KGFscGhhLCBBbHBoYVRyYWl0czxDb21wb25lbnRUeXBlPjo6dHJhbnNw
YXJlbnQsIEFscGhhVHJhaXRzPENvbXBvbmVudFR5cGU+OjpvcGFxdWUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VD4gY2xhbXBlZENvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25l
bnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBl
LCAwPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+
KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oY29t
cG9uZW50cyksCisgICAgICAgIGNsYW1wZWRBbHBoYShjb21wb25lbnRzWzNdKQorICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxUPiBjbGFtcGVkQ29tcG9uZW50c0V4Y2VwdEFscGhhKGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjbGFt
cGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksCisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDI+KGNvbXBvbmVudHMpLAorICAgICAgICBjb21wb25lbnRzWzNdCisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JUeXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25l
bnRzPFQ+JiBjb21wb25lbnRzKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29s
b3JUeXBlPihjbGFtcGVkQ29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JU
eXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHMoVCBjMSwgVCBjMiwgVCBjMykKK3sKKyAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAg
ICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENv
bXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xv
clR5cGUsIDI+KGMzKSwKKyAgICAgICAgQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPjo6b3BhcXVlCisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21w
b25lbnRzKFQgYzEsIFQgYzIsIFQgYzMsIFQgYWxwaGEpCit7CisgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAxPihjMiksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihj
MyksCisgICAgICAgIGNsYW1wZWRBbHBoYTxULCB0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+KGFscGhhKQorICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4
Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICBy
ZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNFeGNl
cHRBbHBoYTxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9yVHlw
ZSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGEoVCBjMSwgVCBjMiwgVCBjMywgQWxw
aGEgYWxwaGEpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENv
bG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihj
MSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksCisgICAgICAg
IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksCisgICAgICAgIGFscGhhCisgICAg
fSk7Cit9CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQgY29sb3IpCit7CisgICAgYXV0byBjb21wb25lbnRz
ID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCAzOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGNvbXBvbmVudHNbaV0gPj0gVDo6TW9kZWw6OnJh
bmdlc1tpXS5taW4pOworICAgICAgICBBU1NFUlQoY29tcG9uZW50c1tpXSA8PSBUOjpNb2RlbDo6
cmFuZ2VzW2ldLm1heCk7CisgICAgfQorICAgIEFTU0VSVChjb2xvci5hbHBoYSA+PSBBbHBoYVRy
YWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQpOworICAgIEFTU0VS
VChjb2xvci5hbHBoYSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6
b3BhcXVlKTsKK30KKworI2Vsc2UKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZv
aWQgYXNzZXJ0SW5SYW5nZShUKQoreworfQorCisjZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWUs
IHR5cGVuYW1lID0gdm9pZD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0NvbG9yU3BhY2VNZW1i
ZXIgPSBmYWxzZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBI
YXNDb2xvclNwYWNlTWVtYmVyPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxU
PigpLmNvbG9yU3BhY2UpPj4gPSB0cnVlOwogCkBAIC03NCwxOCArMjcwLDIwIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFBhcmVudD4gc3RydWN0IENvbG9yV2kKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IFNSR0JBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8U1JHQkE8VD4+IHsKICAgICB1c2lu
ZyBDb21wb25lbnRUeXBlID0gVDsKLSAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OlNSR0I7Ci0KLSAgICBjb25zdGV4cHIgU1JHQkEoVCByZWQsIFQgZ3Jl
ZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAg
dXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29s
b3JTcGFjZSB7IENvbG9yU3BhY2U6OlNSR0IgfTsKKyAgICAKKyAgICBjb25zdGV4cHIgU1JHQkEo
VCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUp
CiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAg
ICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAg
ICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgU1JHQkEo
KQotICAgICAgICA6IFNSR0JBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9u
ZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogU1JHQkEgeyAwLCAwLCAwLCAw
IH0KICAgICB7CiAgICAgfQogCkBAIC0xMDAsMTEgKzI5OCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5i
bHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdC
QTxUPiBhc1NSR0JBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4g
eyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgU1JHQkE8VD4mIGEsIGNvbnN0IFNSR0JBPFQ+
JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9u
ZW50cyhiKTsKQEAgLTExOCwxOCArMzExLDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JB
IDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TGluZWFyU1JHQkE8VD4+IHsKICAgICB1c2luZyBDb21w
b25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1vZGVsPFQ+OwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6TGluZWFyUkdCOwogCi0g
ICAgY29uc3RleHByIExpbmVhclNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEg
PSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdC
QShUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1
ZSkKICAgICAgICAgOiByZWQgeyByZWQgfQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAg
ICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7Cisg
ICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBMaW5l
YXJTUkdCQSgpCi0gICAgICAgIDogTGluZWFyU1JHQkEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBMaW5l
YXJTUkdCQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTE0NCwxMSArMzM5LDYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7
IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIExpbmVhclNSR0JBPFQ+IGFzTGluZWFyU1JHQkEoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBMaW5lYXJTUkdCQTxUPiYgYSwgY29uc3QgTGluZWFyU1JHQkE8VD4mIGIpCiB7CiAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAt
MTYyLDE4ICszNTIsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3Bl
cgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGlzcGxheVAzIDogQ29sb3JXaXRoQWxw
aGFIZWxwZXI8RGlzcGxheVAzPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Cisg
ICAgdXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8g
Y29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKIAotICAgIGNvbnN0ZXhwciBEaXNw
bGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxU
Pjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIERpc3BsYXlQMyhUIHJlZCwgVCBncmVlbiwgVCBi
bHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiByZWQgeyBy
ZWQgfQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAgICAgICAsIGJsdWUgeyBibHVlIH0K
ICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2Uo
KnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBEaXNwbGF5UDMoKQotICAgICAgICA6IERp
c3BsYXlQMyB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0
czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IERpc3BsYXlQMyB7IDAsIDAsIDAsIDAgfQogICAg
IHsKICAgICB9CiAKQEAgLTE4OCwxMSArMzgwLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMu
YWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIERpc3BsYXlQMzxU
PiBhc0Rpc3BsYXlQMyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJu
IHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERpc3BsYXlQMzxUPiYgYSwgY29uc3QgRGlz
cGxheVAzPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0Nv
bG9yQ29tcG9uZW50cyhiKTsKQEAgLTIwNiwxNyArMzkzLDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExp
bmVhckRpc3BsYXlQMyA6IENvbG9yV2l0aEFscGhhSGVscGVyPExpbmVhckRpc3BsYXlQMzxUPj4g
ewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9k
ZWw8VD47CiAKLSAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBU
IGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0
ZXhwciBMaW5lYXJEaXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFs
cGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBn
cmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEg
eyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAK
ICAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKCkKLSAgICAgICAgOiBMaW5lYXJEaXNwbGF5
UDMgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlIH0KKyAgICAgICAgOiBMaW5lYXJEaXNwbGF5UDMgeyAwLCAwLCAwLCAwIH0KICAg
ICB7CiAgICAgfQogCkBAIC0yMzEsMTEgKzQyMCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBj
LmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJEaXNw
bGF5UDM8VD4gYXNMaW5lYXJEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaW5lYXJEaXNwbGF5
UDM8VD4mIGEsIGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYikKIHsKICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yNDksMTggKzQz
MywyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMYWIgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMYWI8VD4+
IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IExhYk1v
ZGVsPFQ+OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFj
ZTo6TGFiOwogCi0gICAgY29uc3RleHByIExhYihUIGxpZ2h0bmVzcywgVCBhLCBUIGIsIFQgYWxw
aGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBMYWIoVCBs
aWdodG5lc3MsIFQgYSwgVCBiLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAg
ICAgICAgOiBsaWdodG5lc3MgeyBsaWdodG5lc3MgfQogICAgICAgICAsIGEgeyBhIH0KICAgICAg
ICAgLCBiIHsgYiB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBh
c3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgTGFiKCkKLSAgICAg
ICAgOiBMYWIgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFp
dHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBMYWIgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAg
ICAgfQogCkBAIC0yNzUsMTEgKzQ2MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5hLCBjLmIsIGMuYWxwaGEg
fTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExhYjxUPiBhc0xhYihjb25z
dCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExhYjxUPiYgYSwgY29uc3QgTGFiPFQ+JiBiKQogewogICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTI5MywxNyAr
NDc0LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExDSEEgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMQ0hB
PFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBM
Q0hNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBMQ0hBKFQgbGlnaHRuZXNzLCBUIGNocm9tYSwg
VCBodWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0
ZXhwciBMQ0hBKFQgbGlnaHRuZXNzLCBUIGNocm9tYSwgVCBodWUsIFQgYWxwaGEgPSBBbHBoYVRy
YWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGxpZ2h0bmVzcyB7IGxpZ2h0bmVzcyB9CiAgICAg
ICAgICwgY2hyb21hIHsgY2hyb21hIH0KICAgICAgICAgLCBodWUgeyBodWUgfQogICAgICAgICAs
IGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAg
ICAgfQogCiAgICAgY29uc3RleHByIExDSEEoKQotICAgICAgICA6IExDSEEgeyBDb21wb25lbnRU
cmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25l
bnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAg
ICAgICAgOiBMQ0hBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMzE4LDExICs1
MDEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0
dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgTENIQTxUPiBhc0xDSEEoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMQ0hBPFQ+JiBhLCBjb25zdCBMQ0hBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTMzNiwxNyArNTE0LDE5IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhTTEEgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxIU0xBPFQ+PiB7CiAg
ICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBIU0xNb2RlbDxU
PjsKIAotICAgIGNvbnN0ZXhwciBIU0xBKFQgaHVlLCBUIHNhdHVyYXRpb24sIFQgbGlnaHRuZXNz
LCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIg
SFNMQShUIGh1ZSwgVCBzYXR1cmF0aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBoYSA9IEFscGhhVHJh
aXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogaHVlIHsgaHVlIH0KICAgICAgICAgLCBzYXR1cmF0
aW9uIHsgc2F0dXJhdGlvbiB9CiAgICAgICAgICwgbGlnaHRuZXNzIHsgbGlnaHRuZXNzIH0KICAg
ICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRo
aXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBIU0xBKCkKLSAgICAgICAgOiBIU0xBIHsgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1
ZSB9CisgICAgICAgIDogSFNMQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTM2
MywxMSArNTQzLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAog
ICAgIHJldHVybiB7IGMuaHVlLCBjLnNhdHVyYXRpb24sIGMubGlnaHRuZXNzLCBjLmFscGhhIH07
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBIU0xBPFQ+IGFzSFNMQShjb25z
dCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEhTTEE8VD4mIGEsIGNvbnN0IEhTTEE8VD4mIGIpCiB7CiAgICAgcmV0dXJu
IGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAtMzgyLDgg
KzU1Nyw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIC8vIEZJ
WE1FOiBXaGVuIENvbG9yQ29tcG9uZW50cyBzdXBwb3J0cyBtb3JlIHRoYW4gbGVuZ3RoID09IDQs
IGFkZCBjb252ZXJzaW9uIHRvL2Zyb20gQ29sb3JDb21wb25lbnRzPFQ+IGZvciBDTVlLQQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8Q01Z
S0E8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9
IENNWUtNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBDTVlLQShUIGN5YW4sIFQgbWFnZW50YSwg
VCB5ZWxsb3csIFQgYmxhY2ssIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVl
KQorICAgIGNvbnN0ZXhwciBDTVlLQShUIGN5YW4sIFQgbWFnZW50YSwgVCB5ZWxsb3csIFQgYmxh
Y2ssIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGN5YW4geyBj
eWFuIH0KICAgICAgICAgLCBtYWdlbnRhIHsgbWFnZW50YSB9CiAgICAgICAgICwgeWVsbG93IHsg
eWVsbG93IH0KQEAgLTM5Myw3ICs1NjksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q01ZS0EgOiBDb2xvCiAgICAgfQogCiAgICAgY29uc3RleHByIENNWUtBKCkKLSAgICAgICAgOiBD
TVlLQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IENN
WUtBIHsgMCwgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtNDE3LDE3ICs1OTMsMTkg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPFhZWkE8VD4+IHsK
ICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFhZWk1vZGVs
PFQ+OwogCi0gICAgY29uc3RleHByIFhZWkEoVCB4LCBUIHksIFQgeiwgVCBhbHBoYSA9IENvbXBv
bmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIFhZWkEoVCB4LCBUIHksIFQg
eiwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogeCB7IHggfQog
ICAgICAgICAsIHkgeyB5IH0KICAgICAgICAgLCB6IHsgeiB9CiAgICAgICAgICwgYWxwaGEgeyBh
bHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAg
ICBjb25zdGV4cHIgWFlaQSgpCi0gICAgICAgIDogWFlaQSB7IENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IFhZ
WkEgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC00NDIsMTEgKzYyMCw2IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLngs
IGMueSwgYy56LCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBYWVpBPFQ+IGFzWFlaQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0
dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFhZWkE8VD4mIGEsIGNvbnN0IFhZWkE8
VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21w
b25lbnRzKGIpOwpAQCAtNDU3LDIxICs2MzAsMjIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKwogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4gY29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNh
bGxXaXRoQ29sb3JUeXBlKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cywgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBGdW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICBzd2l0Y2ggKGNv
bG9yU3BhY2UpIHsKICAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBz
dGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzU1JHQkEoY29tcG9u
ZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+
KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAg
ICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tl
KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNMaW5lYXJTUkdCQShjb21wb25lbnRz
KSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxMaW5lYXJTUkdCQTxUPj4oY29tcG9uZW50cykpOwog
ICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0Rpc3BsYXlQMyhjb21wb25lbnRz
KSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxEaXNwbGF5UDM8VD4+KGNvbXBvbmVudHMpKTsKICAg
ICBjYXNlIENvbG9yU3BhY2U6OkxhYjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNMYWIoY29tcG9uZW50cykpOworICAgICAgICBy
ZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJv
bUNvbXBvbmVudHM8TGFiPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9y
PihmdW5jdG9yKSwgYXNTUkdCQShjb21wb25lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6aW52b2tl
KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPFNSR0JB
PFQ+Pihjb21wb25lbnRzKSk7CiB9CiAKIC8vIFBhY2tlZCBDb2xvciBGb3JtYXRzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgU1JH
QkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogICAgICAgICByZXR1cm4geyAw
LCAwLCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7Ci0g
ICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oZmFzdERpdmlkZUJ5MjU1KHIg
KiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7
CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50
OF90Pj4oZmFzdERpdmlkZUJ5MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFz
dERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7CiB9CiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxp
ZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQpAQCAtODgsNyArODgsNyBAQCBTUkdCQTx1
aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCCiAgICAgICAgIHJldHVybiB7IDAsIDAs
IDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCiAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICBy
ZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihmYXN0RGl2aWRlQnkyNTUociAqIGEg
KyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAq
IGEgKyAyNTQpLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFs
cGhhPFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2
aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsK
IH0KIAogc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRl
KHVpbnQ4X3QgYywgdWludDhfdCBhKQpAQCAtMTAxLDcgKzEwMSw3IEBAIFNSR0JBPHVpbnQ4X3Q+
IHVucHJlbXVsdGlwbGllZChTUkdCQTx1aW4KICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9y
OwogICAgIGlmICghYSB8fCBhID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVu
dEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVs
dGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdD
b21wb25lbnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBv
bmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJl
bXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIyICs0
NSwxNCBAQCBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JHCiBTUkdCQTx1
aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90Pik7CiBTUkdCQTx1aW50
OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4pOwogCi11aW50OF90IGNvbnZlcnRQ
cmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQpOwordWludDhfdCBjb252ZXJ0UHJlc2NhbGVk
U1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0KTsKIAotdWludDhfdCBjb252ZXJ0VG9Db21wb25l
bnRCeXRlKGZsb2F0KTsKLWNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1
aW50OF90KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4
X3QpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xh
bXBUb0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50VHlwZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb21w
b25lbnRUeXBlPiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVu
dFR5cGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRCeXRlVG8o
dWludDhfdCk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRGbG9hdFRv
KGZsb2F0KTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gQ29sb3JUeXBlPHVpbnQ4X3Q+IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9y
VHlwZTxmbG9hdD4mKTsKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xv
clR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
cyhjb25zdCBDb2xvclR5cGU8dWludDhfdD4mKTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5h
bWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4gQ29tcG9uZW50VHlwZT4gY29uc3Rl
eHByIENvbG9yVHlwZTx1aW50OF90PiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMoQ29tcG9uZW50VHlw
ZS4uLik7Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFt
cFRvQ29tcG9uZW50RmxvYXRzKENvbXBvbmVudFR5cGUuLi4pOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gVCBjb252ZXJ0VG8oY29uc3QgVSYpOwordGVtcGxhdGU8PiBTUkdCQTxm
bG9hdD4gY29udmVydFRvKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+Jik7Cit0ZW1wbGF0ZTw+IFNSR0JB
PHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlm
aW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7CiAK
QEAgLTc3LDcxICs2OSw0OSBAQCBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUo
dWluCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAogCi1p
bmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCi17
Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQoZiksIDBsLCAyNTVsKTsKLX0KLQot
aW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewotICAgIHJl
dHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYgKiAyNTUuMGYpLCAwbCwgMjU1bCk7Ci19Ci0K
LWNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90IGJ5dGUpCitp
bmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0
IHZhbHVlKQogewotICAgIHJldHVybiBieXRlIC8gMjU1LjBmOworICAgIHJldHVybiBzdGQ6OmNs
YW1wKHN0ZDo6bHJvdW5kKHZhbHVlKSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgdWludDhfdCBjbGFtcFRvQ29tcG9uZW50Qnl0ZShD
b21wb25lbnRUeXBlIGNvbXBvbmVudCkKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcDxDb21wb25l
bnRUeXBlPihjb21wb25lbnQsIDAsIDI1NSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbXBv
bmVudFR5cGU+IGNvbnN0ZXhwciBmbG9hdCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoQ29tcG9uZW50
VHlwZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4o
Y29tcG9uZW50LCAwLCAxKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdGV4cHIgdWludDhfdCBjb252
ZXJ0Q29tcG9uZW50Qnl0ZVRvPHVpbnQ4X3Q+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNv
bnN0ZXhwciB1aW50OF90IGNvbnZlcnRCeXRlQWxwaGFUbzx1aW50OF90Pih1aW50OF90IHZhbHVl
KQogewogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8PiBjb25zdGV4cHIgZmxvYXQg
Y29udmVydENvbXBvbmVudEJ5dGVUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkKK3RlbXBsYXRlPD4g
Y29uc3RleHByIGZsb2F0IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOworICAgIHJldHVy
biB2YWx1ZSAvIDI1NS4wZjsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgdWludDhfdCBjb252ZXJ0
Q29tcG9uZW50RmxvYXRUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5l
IHVpbnQ4X3QgY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIHN0ZDo6
Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1bCk7CiB9CiAKLXRlbXBs
YXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGZsb2F0PihmbG9hdCB2
YWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRGbG9hdEFscGhhVG88ZmxvYXQ+
KGZsb2F0IHZhbHVlKQogewotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50RmxvYXQodmFsdWUp
OworICAgIHJldHVybiBjbGFtcGVkQWxwaGEodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0
ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgQ29sb3JUeXBlPHVpbnQ4X3Q+
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4mIGNvbG9yKQor
dGVtcGxhdGU8PiBpbmxpbmUgU1JHQkE8ZmxvYXQ+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTx1aW50
OF90PiYgY29sb3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sw
XSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50
c1szXSkgfTsKLX0KKyAgICBhdXRvIGNvbnZlcnRUb1NSR0JBRmxvYXQgPSBbXSh1aW50OF90IHZh
bHVlKSAtPiBmbG9hdCB7CisgICAgICAgIHJldHVybiB2YWx1ZSAvIDI1NS4wZjsKKyAgICB9Owog
Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4
cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JU
eXBlPHVpbnQ4X3Q+JiBjb2xvcikKLXsKICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcik7Ci0gICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29t
cG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252
ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50Rmxv
YXQoY29tcG9uZW50c1szXSkgfTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUZsb2F0KGNv
bXBvbmVudHNbMF0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0
VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVu
dHNbM10pIH07CiB9CiAKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWlu
dDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKENvbXBvbmVudFR5cGUuLi4gY29tcG9uZW50cykK
K3RlbXBsYXRlPD4gaW5saW5lIFNSR0JBPHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxm
bG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRCeXRlKGNvbXBv
bmVudHMpLi4uIH07Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUJ5dGUgPSBbXShmbG9hdCB2
YWx1ZSkgLT4gdWludDhfdCB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5k
KHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOworICAgIH07CiAKLXRlbXBsYXRlPHRlbXBsYXRl
PHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+
IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNsYW1wVG9Db21wb25lbnRGbG9hdHMoQ29tcG9u
ZW50VHlwZS4uLiBjb21wb25lbnRzKQotewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRG
bG9hdChjb21wb25lbnRzKS4uLiB9OworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50
c1swXSksIGNvbnZlcnRUb1NSR0JBQnl0ZShjb21wb25lbnRzWzFdKSwgY29udmVydFRvU1JHQkFC
eXRlKGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1szXSkgfTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xv
clR5cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlw
ZSYgY29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQpAQCAtMTU3LDUwICsxMjcsNjEgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdQogdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0
IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNv
cHkgPSBjb2xvcjsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEJ5dGVUbzxkZWNs
dHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZl
cnRCeXRlQWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRl
QWxwaGEpOwogICAgIHJldHVybiBjb3B5OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQogewogICAgIGF1dG8gY29weSA9IGNvbG9yOwotICAg
IGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxkZWNsdHlwZShjb3B5LmFscGhh
KT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICBy
ZXR1cm4gY29weTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIg
Q29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9y
QnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50
KSB7Ci0gICAgICAgIHJldHVybiBDb21wb25lbnRUcmFpdHM8ZGVjbHR5cGUoY29tcG9uZW50KT46
Om1heFZhbHVlIC0gY29tcG9uZW50OwotICAgIH0pOwotICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0
Q29tcG9uZW50Qnl0ZVRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKLSAg
ICByZXR1cm4gY29weTsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52
ZXJ0aWJsZSk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cik7CisgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGNvcHlbaV0gPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5n
ZXNbaV0ubWF4IC0gY29tcG9uZW50c1tpXTsKKyAgICBjb3B5WzNdID0gY29udmVydEJ5dGVBbHBo
YVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisK
KyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY29weSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
IHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQo
Y29sb3IsIFtdIChhdXRvIGNvbXBvbmVudCkgewotICAgICAgICByZXR1cm4gQ29tcG9uZW50VHJh
aXRzPGRlY2x0eXBlKGNvbXBvbmVudCk+OjptYXhWYWx1ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsK
LSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5h
bHBoYSk+KG92ZXJyaWRlQWxwaGEpOwotICAgIHJldHVybiBjb3B5OworICAgIHN0YXRpY19hc3Nl
cnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKKworICAgIGF1dG8gY29tcG9uZW50
cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRz
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgY29weVtp
XSA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlc1tpXS5tYXggLSBjb21wb25lbnRzW2ldOworICAg
IGNvcHlbM10gPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
PENvbG9yVHlwZT4oY29weSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29u
c3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIGNvbnN0
ZXhwciBhdXRvIG1pbiA9IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBv
bmVudFR5cGU+OjptaW5WYWx1ZTsKLSAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRU
cmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBS
R0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pik7CiAKICAgICBhdXRv
IFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKLSAgICByZXR1cm4gYzEgPT0gbWluICYmIGMy
ID09IG1pbiAmJiBjMyA9PSBtaW4gJiYgYWxwaGEgPT0gbWF4OworICAgIGNvbnN0ZXhwciBhdXRv
IHJhbmdlcyA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlczsKKyAgICByZXR1cm4gYzEgPT0gcmFu
Z2VzWzBdLm1pbiAmJiBjMiA9PSByYW5nZXNbMV0ubWluICYmIGMzID09IHJhbmdlc1syXS5taW4g
JiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBi
b29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0
byBtYXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pjo6bWF4VmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBD
b2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+Pik7CiAKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKLSAgICByZXR1
cm4gYzEgPT0gbWF4ICYmIGMyID09IG1heCAmJiBjMyA9PSBtYXggJiYgYWxwaGEgPT0gbWF4Owor
ICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlcyA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlczsKKyAg
ICByZXR1cm4gYzEgPT0gcmFuZ2VzWzBdLm1heCAmJiBjMiA9PSByYW5nZXNbMV0ubWF4ICYmIGMz
ID09IHJhbmdlc1syXS5tYXggJiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFz
dE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGlj
IE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAgICAgICBjb21wb25lbnRBcnJh
eVtpXSA9IGNvbXBvbmVudDsKICAgICB9CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXMoU1JHQkEgeyBjb21wb25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBv
bmVudEFycmF5WzNdLCBjb21wb25lbnRBcnJheVswXSB9KTsKKyAgICByZXR1cm4gY29udmVydFRv
PFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IGNvbXBvbmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJh
eVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVudEFycmF5WzBdIH0pOwogfQogCiBSZWY8
SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZUF0
dHJpYnV0ZXMoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJpbmcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1DCiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2
OyBpKyspIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAg
ICAgICAgICAgICAgY29sb3IgPSByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhj
b2xvcik7CiAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihy
b3VuZChjb2xvciAqIDI1NSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFy
cmF5OwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRy
YW5zZm9ybUMKICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9y
ID0gbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yKTsKICAgICAgICAgICAg
ICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24g
MjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JB
PHVpbnQ4X3Q+PiByb3VuZEFuZAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyByLCBnLCBiLCBh
IH0pOworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgciwgZywg
YiwgYSB9KTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNH
LmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAg
Q29sb3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcgogICAgIGlmICghcGl4ZWxb
M10pCiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzNdKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFNS
R0JBPHVpbnQ4X3Q+PihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAv
IHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CiB9CiAKIHZv
aWQgTmF0aXZlSW1hZ2U6OmNsZWFyU3ViaW1hZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5jcHAJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTkg
KzkxLDE5IEBAIGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHIKIHsKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9y
ID0gYXNTUkdCQShncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4
KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsK
LSAgICAgICAgY29sb3IgPSBhc1NSR0JBKHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5z
Zm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAg
ICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9y
TWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgSFVF
X1JPVEFURTogewotICAgICAgICBjb2xvciA9IGFzU1JHQkEoaHVlUm90YXRlQ29sb3JNYXRyaXgo
bV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8Zmxv
YXQ+PihodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1
cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0Nv
bXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTI0MCw3ICsyNDAsNyBA
QCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhCiAgICAgICAgIDAuMDMw
ZiwgLTAuNzQxZiwgLTAuMDg5ZiwgMC4wZiwgMS4wZiwKICAgICAgICAgMC4wMzBmLCAgMC4wNTlm
LCAtMC44OTBmLCAwLjBmLCAxLjBmCiAgICAgfTsKLSAgICBjb2xvciA9IGFzU1JHQkEodG9EYXJr
TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyho
dWVSb3RhdGVkU1JHQkEpKSk7CisgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNS
R0JBPGZsb2F0Pj4odG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhodWVSb3RhdGVkU1JHQkEpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bjo6aW52CiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYsIDAuMGYsIDEuMjVmLAog
ICAgICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAxLjI1ZgogICAgIH07Ci0g
ICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZSA9IGFzU1JHQkEodG9MaWdodE1vZGVNYXRyaXgu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7Cisg
ICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZSA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8ZmxvYXQ+Pih0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIAogICAgIC8vIENvbnZlcnQgdG8gSFNMLgogICAg
IGF1dG8gaHNsYSA9IHRvSFNMQShjb252ZXJ0ZWRUb0xpZ2h0TW9kZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw3ICsxMTcsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNv
bG9yKENvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRU
bzxTUkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTEzNiw3ICsxMzYsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1D
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdC
QTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAko
cmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCi0gICAgOiBD
b2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihj
b2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpCisg
ICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhh
KSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
MyArOTIsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAg
ICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAgICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVs
OnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOworICAgICAg
ICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0s
IHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAgIH0KIAogICAgIFtyZ2JDb2xvciBn
ZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBv
bmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAg
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0
PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkg
fSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNf
Y2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9u
ZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9y
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihEMkQx
X0NPTE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCisgICAgOiBDb2xvcihj
b252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3Iu
YiwgY29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
NyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBD
T01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVz
aFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQogewotICAgIGF1dG8gY29sb3JL
ZXkgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNv
bG9yLmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBjb2xvcktleSA9IGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwog
CiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBpZiAoIW1femVyb0JydXNoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjcxNTY0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3Ip
CiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50
IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAgIHJldHVybiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Ymx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJu
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVk
Q29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwNiw3ICs1
MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVudUJhY2tncm91bmRDb2xvCiAgICAgTlNV
SW50ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDow
IHk6MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFsw
XSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGlu
Z0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0s
IHBpeGVsWzNdKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKENTU1Zh
bHVlSUQgY3NzVmFsdWVJRCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25B
ZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShy
ZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcg
KzkxLDcgQEAgcHVibGljOgogICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9n
cmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2ltcGxlVG8uYmx1ZSwgc2ltcGxl
VG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZSk7CiAgICAgICAgIGZs
b2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZy
b20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYSwg
c2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKLSAgICAgICAgYW5pbWF0ZWQgPSBjbGFt
cFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHN0ZDo6bHJvdW5kKHJlZCksIHN0ZDo6bHJvdW5kKGdy
ZWVuKSwgc3RkOjpscm91bmQoYmx1ZSksIHN0ZDo6bHJvdW5kKGFscGhhKSk7CisgICAgICAgIGFu
aW1hdGVkID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc3RkOjpscm91
bmQocmVkKSwgc3RkOjpscm91bmQoZ3JlZW4pLCBzdGQ6Omxyb3VuZChibHVlKSwgc3RkOjpscm91
bmQoYWxwaGEpKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFu
Y2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29u
c3Qgb3ZlcnJpZGUKQEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgICAgICBhdXRvIHNp
bXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25v
cmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0g
ICAgICAgIG1fdG8gPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHNpbXBsZVRvLnJlZCAr
IHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBs
ZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOworICAgICAgICBtX3RvID0gbWFrZUNsYW1waW5n
Q29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQs
IHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBs
ZUZyb20uYmx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhT
VkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzE1OTMpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wMS0xOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5n
IGxvZ2ljIHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgVXBkYXRlIHRlc3RzIHRv
IHVzZSBuZXcgY29udmVydFRvPD4gZnVuY3Rpb25zLgorCiAyMDIxLTAxLTE4ICBGdWppaSBIaXJv
bm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5k
ZXJUcmVlXSBBU1NFUlQoIW1fY2hhbm5lbCkgZmFpbGVkIGluIFdlYlNvY2tldDo6Y29udGV4dERl
c3Ryb3llZApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVz
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9F
UShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNs
YUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5k
VHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNjIsNyArNjIsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9CbGFjaykKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNv
bG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRv
Q29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwog
ICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC03OCw3ICs3
OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShj
b2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3Ip
KTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+
Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVk
Q29sb3IpOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVu
KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGln
aHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25l
bnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQ
RUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTExMCw3ICsxMTAsNyBA
QCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlw
cGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOwor
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRv
U1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xv
cik7CiB9CiAKQEAgLTEyNiw3ICsxMjYsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3Jh
eSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xv
ci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAg
ICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQyLDcgKzE0
Miw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9y
KSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90
Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBl
ZENvbG9yKTsKIH0KIApAQCAtMTU4LDcgKzE1OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xp
Z2h0R3JheSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNv
bG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRv
Q29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwog
ICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xv
clRlc3RzLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3
ICsxMDksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogICAgIH0KIAogICAgIGF1
dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07
Ci0gICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb21wb25lbnRCeXRl
cykgfTsKKyAgICBDb2xvciByZ2IxIHsgY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29tcG9uZW50
Qnl0ZXMpIH07CiAgICAgQ29sb3IgcmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07CiAgICAgRVhQRUNU
X05FKHJnYjEsIHJnYjIpOwogICAgIEVYUEVDVF9ORShyZ2IyLCByZ2IxKTsKQEAgLTEzOCw3ICsx
MzgsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gpCiAgICAgfQogCiAgICAgYXV0byBjb21w
b25lbnRCeXRlcyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAxMjgsIDYzLCAxMjcgfTsKLSAgICBD
b2xvciByZ2IxIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbXBvbmVudEJ5dGVzKSB9Owor
ICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykg
fTsKICAgICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKICAgICBFWFBFQ1RfTkUocmdi
MS5oYXNoKCksIHJnYjIuaGFzaCgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417856</attachid>
            <date>2021-01-18 18:30:16 -0800</date>
            <delta_ts>2021-01-19 14:48:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210118183015.patch</filename>
            <type>text/plain</type>
            <size>82044</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTU4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIG9mIGFkZGluZyBzdXBwb3J0
IGZvciBFeHRlbmRlZC1zUkdCIHRvIGNvbG9yIHR5cGVzLAorICAgICAgICB0aGlzIGFkZHMgY29u
c3RleHByIG1ldGFkYXRhIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb2xvcgorICAg
ICAgICB0eXBlcyB3aXRoIHRoZSBjb3JyZWN0IGNsYW1wZWQgKG9yIHVuY2xhbXBlZCkgdmFsdWVz
IGFuZCBhZG9wdHMgdGhlbQorICAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuCisKKyAg
ICAgICAgLSBSZW1vdmVzICJjb21wb25lbnQgYnl0ZXMiIGFuZCAiY29tcG9uZW50IGZsb2F0cyIg
Y29uY2VwdHMgcmVwbGFjaW5nCisgICAgICAgICAgd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIGNv
bG9yIHR5cGVzIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnM6CisgICAgICAgICAgCisgICAgICAgICAg
ICBjb252ZXJ0VG9Db21wb25lbnRCeXRlcy9jb252ZXJ0VG9Db21wb25lbnRGbG9hdHMgLT4gY29u
dmVydFRvPENvbG9yVHlwZTxUPj4KKyAgICAgICAgICAgIGNsYW1wVG9Db21wb25lbnRCeXRlcy9j
bGFtcFRvQ29tcG9uZW50RmxvYXRzIC0+IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8Q29sb3JUeXBl
PFQ+PgorCisgICAgICAgIC0gQWRkcyBNb2RlbCB0eXBlIGFsaWFzZXMgdG8gZWFjaCBjb2xvciB0
eXBlIHdoaWNoIGNhbiBzcGVjaWZ5IHRyYWl0cyAKKyAgICAgICAgICBmb3IgdGhhdCB0eXBlIG9m
IGNvbG9yLiBUaGVzZSB0cmFpdHMgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgdmFsaWQgCisg
ICAgICAgICAgY29tcG9uZW50IHJhbmdlcyBhbmQgd2hldGhlciB0aGUgY29sb3IgY2FuIGJlIGlu
dmVydGVkLiBNb3JlIHdpbGwgYmUgCisgICAgICAgICAgYWRkZWQgKGxpa2Ugd2hpdGUgcG9pbnQg
YW5kIGJhc2UgY29sb3Igc3BhY2UpIHRvIGhlbHAgc2ltcGxpZnkgdXRpbGl0eSAKKyAgICAgICAg
ICBhbmQgY29udmVyc2lvbiBjb2RlLiAKKworICAgICAgICAtIEFkZHMgYXNzZXJ0aW9ucyB0byBl
YWNoIGNvbG9yIHR5cGUgY29uc3RydWN0b3IgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZAorICAgICAg
ICAgIGFyZSB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlcyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBNb2Rl
bCkuCisKKyAgICAgICAgLSBSZW1vdmVkIGFzRm9vKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYp
IGZ1bmN0aW9ucywgd2hpY2ggd2VyZSBhIGxpdHRsZSAKKyAgICAgICAgICB0byAgc2ltaWxhcmx5
IG5hbWVkIHRvIHRoZSB0b0ZvbygpIGZ1bmN0aW9ucy4gSW5zdGVhZCwgdGhlIGdlbmVyaWMgCisg
ICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZTxUPj4gKG9yIGl0J3MgY2xhbXBp
bmcgdmFyaWFudHMpIGNhbiBiZSB1c2VkCisgICAgICAgICAgdG8gY29udmVydCBmcm9tIENvbG9y
Q29tcG9uZW50cyB0byBjb2xvciB0eXBlcy4KKworICAgICAgICAtIEFkZHMgQWxwaGFUcmFpdHMg
dG8gbW9kZWwgYWxwaGEgdmFsdWVzIGFzIHRoZXNlIGFyZSBjb25zaXN0ZW50IGJldHdlZW4KKyAg
ICAgICAgICBjb2xvciB0eXBlcyBhbmQgb25seSBjaGFuZ2UgYmFzZWQgb24gY29tcG9uZW50IHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6
CisKIDIwMjEtMDEtMTggIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHJlY2VudGx5IGFkZGVkIGdsdWUgY29kZTogUmVuZGVyTGF5
ZXI6OihzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgLyBzZXRTY3JvbGxTaG91bGRD
bGVhckxhdGNoZWRTdGF0ZSAvIHNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMjcxNTY0
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGlj
IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleAogCiAjaWYgRU5BQkxFKElOUFVUX1RZ
UEVfQ09MT1IpCiAgICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpDb2xvcldlbGwpIHsKLSAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhjb3JlT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9y
ID0gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCBj
b2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAyNzE1NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ0Nyw3ICsxNDQ3LDcgQEAgLSAo
TlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5Q29sb3JTdHJpbmdWYQogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgaWYgKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAg
ICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoc2VsZi5heEJhY2tpbmdP
YmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG88U1JH
QkE8ZmxvYXQ+PihzZWxmLmF4QmFja2luZ09iamVjdC0+Y29sb3JWYWx1ZSgpKTsKICAgICAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiICU3LjVmICU3LjVmICU3LjVm
IDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlXTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAyNzE1NjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM4NSw3ICsyMzg1LDcgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICByZXR1cm4gQChi
YWNraW5nT2JqZWN0LT5pc1NlbGVjdGVkKCkpOwogCiAgICAgICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc0NvbG9yV2VsbCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29t
cG9uZW50RmxvYXRzKGJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CisgICAgICAgICAgICBh
dXRvIGNvbG9yID0gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oYmFja2luZ09iamVjdC0+Y29sb3JW
YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
InJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3Iu
Ymx1ZV07CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9yZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xv
ci5yZWQpKQogICAgICAgICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5n
cmVlbikpCiAgICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1
ZSkpCi0gICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21w
b25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkpCisgICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFw
cGVyKG93bmVyLCBjb2xvci5hbHBoYUFzRmxvYXQoKSkpCiAgICAgewogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAko
cmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJG
YXN0UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgaWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOyAvLyBGSVhNRTogQWxyZWFkeSBjbGFtcGVkLCBk
b2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdl
L3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBhbmQgcmVwbGFjZSBjYWxsIHRvIGNs
YW1wVG9Db21wb25lbnRCeXRlcyB3aXRoIGRpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWlu
dDhfdD4uCisgICAgICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4
X3Q+PihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7IC8vIEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQs
IGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRlIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRh
Z2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50OF90IGFuZCByZXBsYWNlIGNhbGwgdG8g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3Ry
dWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50
YXguCkBAIC01MDUsNyArNTA1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKGN1
cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocmVkLCBncmVlbiwgYmx1ZSk7IC8v
IEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQsIGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRl
IHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50
OF90IGFuZCByZXBsYWNlIGNhbGwgdG8gY2xhbXBUb0NvbXBvbmVudEJ5dGVzIHdpdGggZGlyZWN0
IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KKyAgICAgICAgcmV0dXJuIG1ha2VDbGFt
cGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHJlZCwgZ3JlZW4sIGJsdWUpOyAvLyBGSVhN
RTogQWxyZWFkeSBjbGFtcGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJz
ZUNvbG9ySW50T3JQZXJjZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBh
bmQgcmVwbGFjZSBjYWxsIHRvIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+
IHdpdGggZGlyZWN0IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KICAgICB9CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcxNTY0
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgc3RhdGljIHVpbnQ4X3QgY2xh
bXBSR0JDb21wb25lbnQoZG91YmxlIAogICAgIGlmIChpc1BlcmNlbnRhZ2UpCiAgICAgICAgIHZh
bHVlID0gdmFsdWUgLyAxMDAuMCAqIDI1NS4wOwogCi0gICAgcmV0dXJuIGNvbnZlcnRQcmVzY2Fs
ZWRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JH
QkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlUkdCUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTczOSw3ICs3MzksNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAgICAgICAgIH0KLSAgICAgICAgYWxw
aGFDb21wb25lbnQgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGFscGhhKTsKKyAgICAgICAgYWxw
aGFDb21wb25lbnQgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFscGhhKTsKICAgICB9
OwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCkBAIC03OTQsNyArNzk0LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKEhTTEE8ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlb
MF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvckFycmF5WzJdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CisgICAgcmV0
dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJy
YXlbMV0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYSkgfSkpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IHBhcnNlT3B0aW9u
YWxBbHBoYShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI3MTU2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjAxLDcgKzYwMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENv
bnRlbnRJblIKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFw
cGVhciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3Ig
Y2FuIGJlIHNwZWNpZmllZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEubGlnaHRuZXNz
ID0gMC41ZjsKICAgICAgICAgICAgICAgICAgICAgICAgIGhzbGEuYWxwaGEgKj0gMC4zOGY7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuZGVybGluZUNvbG9yID0gY29udmVydFRvQ29t
cG9uZW50Qnl0ZXModG9TUkdCQShoc2xhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHVuZGVybGluZUNvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGEp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBDU1NWYWx1ZUN1cnJlbnRjb2xvcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Db2xvciwgc2VyaWFsaXphdGlvbkZvckNTUyh1bmRl
cmxpbmVDb2xvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3MTU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAwLDE3ICsxMzAwLDE3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
Ymx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzZXRTaGFkb3coRmxv
YXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH0pKTsKKyAgICBzZXRT
aGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG88U1JHQkE8dWlu
dDhfdD4+KFNSR0JBIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfSkp
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9h
dCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCks
IGJsdXIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+PihTUkdCQSB7IHIsIGcsIGIsIGEgfSkpOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBh
KQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoQ01ZS0EgeyBjLCBtLCB5LCBrLCBhIH0pKSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKENNWUtBIHsgYywgbSwgeSwgaywgYSB9KSkpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI3MTU2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3Ig
Y29sb3IpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTUkdCQTxmbG9hdD4m
IGNvbG9yQ29tcG9uZW50cykKLSAgICA6IG1fc3R5bGUoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
Y29sb3JDb21wb25lbnRzKSkKKyAgICA6IG1fc3R5bGUoY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+
Pihjb2xvckNvbXBvbmVudHMpKQogewogfQogCkBAIC0xNDgsNyArMTQ4LDcgQEAgYm9vbCBDYW52
YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAgIHJl
dHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxD
b2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29tcG9uZW50cyk7Cisg
ICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6
Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbXBvbmVu
dHMpOwogfQogCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
KFJlZlB0cjxKU09OOjpPYmoKIAogICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUo
UHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKICAgICBpZiAoIWEpCi0gICAgICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOwotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoKmEpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8dWludDhfdD4+KCpyLCAqZywgKmIpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25l
bnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KCpyLCAqZywgKmIsIGNvbnZlcnRGbG9hdEFs
cGhhVG88dWludDhfdD4oKmEpKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3Io
Y29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046Ok9iamVjdCYgY29uZmlnT2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24g
MjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBj
b25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikg
LyB2OwogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlw
bGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1
cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0
aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJr
ZW5lZCgpIGNvbnN0CkBAIC0xMDUsNyArMTA1LDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkg
Y29uc3QKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11
bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlwbGllciAqIHIsIG11bHRpcGxp
ZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNSR0JB
PHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlw
bGllciAqIGIsIGEgfSk7CiB9CiAKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdApAQCAt
MTQxLDcgKzE0MSwxNCBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
CiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QK
IHsKICAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChjb25zdCBhdXRvJiB1bmRl
cmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKLSAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7CisgICAgICAgIHVzaW5nIENv
bG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZSh1bmRlcmx5aW5nQ29sb3IpPjsKKyAgICAg
ICAgaWYgY29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCisgICAgICAg
ICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29s
b3IsIGFscGhhKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRGV0ZXJt
aW5lIGlmIHRoZXJlIGlzIGEgbWVhbmluZ2Z1bCB1bmRlcnN0YW5kaW5nIG9mIGludmVyc2lvbiB0
aGF0IHdvcmtzCisgICAgICAgICAgICAvLyBiZXR0ZXIgZm9yIG5vbi1pbnZlcnRpYmxlIGNvbG9y
IHR5cGVzIGxpa2UgTGFiLgorICAgICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CisgICAgICAgIH0K
ICAgICB9KTsKIH0KIApAQCAtMTU3LDcgKzE2NCw3IEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBD
b2xvckNvbXBvbmVudHM8ZmwKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1
cm4geyBhc0V4dGVuZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygp
IH07Ci0gICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydFRvQ29tcG9uZW50RmxvYXRzKGFzSW5saW5lKCkpKSB9OworICAgIHJldHVybiB7IENvbG9y
U3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGFz
SW5saW5lKCkpKSB9OwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8g
YXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0K
ICAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50
OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYXNFeHRlbmRlZCgpLmFscGhhKCkpIDogYXNJbmxpbmUoKS5hbHBoYTsgfQot
ICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydFRvQ29tcG9uZW50RmxvYXQoYXNJbmxpbmUoKS5h
bHBoYSk7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSA/IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oYXNFeHRlbmRlZCgpLmFscGhhKCkp
IDogYXNJbmxpbmUoKS5hbHBoYTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsg
cmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydEJ5dGVB
bHBoYVRvPGZsb2F0Pihhc0lubGluZSgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQg
ZmxvYXQgbHVtaW5hbmNlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRu
ZXNzKCkgY29uc3Q7IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5h
bmNlLgpAQCAtMzMxLDExICszMzEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4g
Q29sb3I6OnRvUwogICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1
aW50OF90PikKICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29sb3IpOwogICAgICAgICB9LAogICAgICAgICBb
XSAoY29uc3QgYXV0byYgY29sb3IpIHsKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19zYW1lX3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoY29sb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGNvbG9yKSk7CiAgICAgICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKICAgICAgICAgICAgICAgICByZXR1
cm4gdG9TUkdCQShjb2xvcik7CiAgICAgICAgIH0KQEAgLTM5MSwxNSArMzkxLDI3IEBAIGlubGlu
ZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjwKIAogaW5saW5lIGJvb2wgQ29sb3I6
OmlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmNh
bGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICByZXR1
cm4gV2ViQ29yZTo6aXNCbGFjayhjb2xvcik7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVy
bHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIHsKKyAgICAgICAgdXNp
bmcgQ29sb3JUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBlKHVuZGVybHlpbmdDb2xvcik+Owor
ICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6
TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+KQorICAg
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzQmxhY2sodW5kZXJseWluZ0NvbG9yKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRGVmaW5lIG1lYW5pbmdmdWwgYmxhY2sg
cG9pbnRzIGZvciBhbGwgY29sb3IgdHlwZXMuCisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6
aXNCbGFjayh0b1NSR0JBKHVuZGVybHlpbmdDb2xvcikpOworICAgICAgICB9CiAgICAgfSk7CiB9
CiAKIGlubGluZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYg
Y29sb3IpIHsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUoY29sb3IpOworICAgIHJl
dHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWlu
Z0NvbG9yKSB7CisgICAgICAgIHVzaW5nIENvbG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlw
ZSh1bmRlcmx5aW5nQ29sb3IpPjsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVf
djx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6
OkNvbXBvbmVudFR5cGU+PikKKyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHVu
ZGVybHlpbmdDb2xvcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IERl
ZmluZSBtZWFuaW5nZnVsIHdoaXRlIHBvaW50cyBmb3IgYWxsIGNvbG9yIHR5cGVzLgorICAgICAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpKTsK
KyAgICAgICAgfQogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENv
bG9yJiBiYWNrZAogICAgIGludCBnID0gKGJhY2tkcm9wRyAqIGJhY2tkcm9wQSAqICgweEZGIC0g
c291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUcpIC8gZDsKICAgICBpbnQgYiA9IChi
YWNrZHJvcEIgKiBiYWNrZHJvcEEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEg
KiBzb3VyY2VCKSAvIGQ7CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JB
PihyLCBnLCBiLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1
aW50OF90Pj4ociwgZywgYiwgYSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENv
bG9yJiBjb2xvcikKQEAgLTc4LDcgKzc4LDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3Qg
Q29sb3ImIGNvbG9yKQogICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywg
YWxwaGEpOwogICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEp
OwogCi0gICAgICAgIHJlc3VsdCA9IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywg
YiwgYWxwaGEpOworICAgICAgICByZXN1bHQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PHVpbnQ4X3Q+PihyLCBnLCBiLCBhbHBoYSk7CiAKICAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49
IDAgJiYgYiA+PSAwKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDAsNyArMTAwLDcgQEAgQ29s
b3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGF1dG8gcHJlbXVsdGlw
bGllZEZyb20gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyhmcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpKTsKICAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHByZW11bHRpcGxpZWRDZWlsaW5nKHRv
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpKTsKIAotICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5k
ZWQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIGF1dG8gcHJlbXVsdGlwbGll
ZEJsZW5kZWQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8u
cmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9t
LmdyZWVuLCBwcmVtdWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHBy
b2dyZXNzKSwKQEAgLTEyMCw3ICsxMjAsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAgICAgYXV0byB0b1NSR0IgPSB0by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAot
ICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjggKzMy
LDEwMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWZsb2F0IGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoZmxvYXQgYykKKy8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IK
Ky8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpf
TWF0cml4Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5l
YXJTUkdCTWF0cml4IHsKKyAgICAgMy4yNDA0NTQyZiwgLTEuNTM3MTM4NWYsIC0wLjQ5ODUzMTRm
LAorICAgIC0wLjk2OTI2NjBmLCAgMS44NzYwMTA4ZiwgIDAuMDQxNTU2MGYsCisgICAgIDAuMDU1
NjQzNGYsIC0wLjIwNDAyNTlmLCAgMS4wNTcyMjUyZgorfTsKKworLy8gaHR0cHM6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvU1JHQgorLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5k
ZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1h
dHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggeworICAgIDAuNDEyNDU2NGYsICAwLjM1
NzU3NjFmLCAgMC4xODA0Mzc1ZiwKKyAgICAwLjIxMjY3MjlmLCAgMC43MTUxNTIyZiwgIDAuMDcy
MTc1MGYsCisgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCit9OworCisv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNv
ZGUKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJEaXNwbGF5
UDNNYXRyaXggeworICAgICAyLjQ5MzQ5NjkxMTk0MTQyNWYsICAtMC45MzEzODM2MTc5MTkxMjM5
ZiwgLTAuNDAyNzEwNzg0NDUwNzE2OGYsCisgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAxLjc2
MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKKyAgICAgMC4wMzU4NDU4MzAy
NDM3ODQ1ZiwgLTAuMDc2MTcyMzg5MjY4MDQxOGYsICAwLjk1Njg4NDUyNDAwNzY4NzJmCit9Owor
CisvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9u
LWNvZGUKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAz
VG9YWVpNYXRyaXggeworICAgIDAuNDg2NTcwOTQ4NjQ4MjE2MmYsIDAuMjY1NjY3NjkzMTY5MDkz
MWYsIDAuMTk4MjE3Mjg1MjM0MzYzZiwKKyAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTcz
ODUyMTgzNjUwNjRmLCAwLjA3OTI4NjkxNDA5Mzc0NWYsCisgICAgMC4wZiwgICAgICAgICAgICAg
ICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCit9OworCisvLyBodHRw
Oi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwK
K3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gRDUwVG9ENjVNYXRyaXggeworICAg
ICAwLjk1NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKKyAgICAtMC4wMjgyODk1Ziwg
IDEuMDA5OTQxNmYsIDAuMDIxMDA3N2YsCisgICAgIDAuMDEyMjk4MmYsIC0wLjAyMDQ4MzBmLCAx
LjMyOTkwOThmCit9OworCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5o
dG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8Mywg
Mz4gRDY1VG9ENTBNYXRyaXggeworICAgICAxLjA0NzgxMTJmLCAwLjAyMjg4NjZmLCAtMC4wNTAx
MjcwZiwKKyAgICAgMC4wMjk1NDI0ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCisgICAgLTAu
MDA5MjM0NWYsIDAuMDE1MDQzNmYsICAwLjc1MjEzMTZmCit9OworCitmbG9hdCBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQgYykKIHsKKyAgICBBU1NFUlQoYyA+PSAwKTsK
KyAgICBBU1NFUlQoYyA8PSAxKTsKKwogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKICAgICAgICAg
cmV0dXJuIDEyLjkyZiAqIGM7CiAKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oMS4wNTVmICog
c3RkOjpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4wNTVmLCAwLCAxKTsKIH0KIAotZmxvYXQgcmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQorZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudENsYW1waW5nKGZsb2F0IGMpCiB7CisgICAgQVNTRVJUKGMgPj0gMCk7CisgICAgQVNT
RVJUKGMgPD0gMSk7CisgICAgCiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCiAgICAgICAgIHJldHVy
biBjIC8gMTIuOTJmOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsg
MC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCitmbG9hdCBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Tm9uQ2xhbXBpbmcoZmxvYXQgYykKK3sKKyAgICBmbG9hdCBzaWduID0gc3Rk
OjpzaWduYml0KGMpID8gLTEuMGYgOiAxLjBmOworICAgIGMgPSBzdGQ6OmFicyhjKTsKKworICAg
IGlmIChjIDwgMC4wMDMxMzA4ZikKKyAgICAgICAgcmV0dXJuIDEyLjkyZiAqIGMgKiBzaWduOwor
CisgICAgcmV0dXJuICgxLjA1NWYgKiBzdGQ6OnBvdyhjLCAxLjBmIC8gMi40ZikgLSAwLjA1NWYp
ICogc2lnbjsKK30KKworZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudE5vbkNsYW1waW5n
KGZsb2F0IGMpCit7CisgICAgZmxvYXQgc2lnbiA9IHN0ZDo6c2lnbmJpdChjKSA/IC0xLjBmIDog
MS4wZjsKKyAgICBjID0gc3RkOjphYnMoYyk7CisKKyAgICBpZiAoYyA8PSAwLjA0MDQ1ZikKKyAg
ICAgICAgcmV0dXJuIGMgLyAxMi45MmYgKiBzaWduOworCisgICAgcmV0dXJuIHN0ZDo6cG93KChj
ICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZikgKiBzaWduOworfQorCisvLyBHYW1tYSBjb252ZXJz
aW9ucy4KKwogTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29s
b3IuZ3JlZW4pLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUp
LAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAog
ICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBAIC02MSw5ICsxMzUsOSBAQCBMaW5lYXJT
UkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShj
b25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAg
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRD
bGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTcx
LDkgKzE0NSw5IEBAIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGYKIExp
bmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNv
bG9yLmdyZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVl
KSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwK
ICAgICAgICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtODEsODEgKzE1NSw0OSBAQCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzCiBEaXNwbGF5UDM8ZmxvYXQ+IHRv
RGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJl
dHVybiB7Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAg
ICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAg
ICAgfTsKIH0KIAorLy8gTWF0cml4IGNvbnZlcnNpb25zLgorCiBMaW5lYXJTUkdCQTxmbG9hdD4g
dG9MaW5lYXJTUkdCQShjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5k
Ymxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKLSAgICBjb25zdGV4
cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKLSAgICAgICAgIDMu
MjQwNDU0MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1MzE0ZiwKLSAgICAgICAgLTAuOTY5MjY2MGYs
ICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKLSAgICAgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAy
NTlmLCAgMS4wNTcyMjUyZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyU1JHQkEoeHl6VG9M
aW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxw
aGE8TGluZWFyU1JHQkE8ZmxvYXQ+Pih4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRD
b2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8Zmxv
YXQ+IHRvWFlaQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKLSAgICAvLyBodHRwOi8vd3d3LmJydWNl
bGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxpbmVhclNSR0JUb1hZWk1hdHJpeCB7Ci0gICAgICAg
IDAuNDEyNDU2NGYsICAwLjM1NzU3NjFmLCAgMC4xODA0Mzc1ZiwKLSAgICAgICAgMC4yMTI2NzI5
ZiwgIDAuNzE1MTUyMmYsICAwLjA3MjE3NTBmLAotICAgICAgICAwLjAxOTMzMzlmLCAgMC4xMTkx
OTIwZiwgIDAuOTUwMzA0MWYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEobGluZWFyU1JHQlRv
WFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFla
QTxmbG9hdD4+KGxpbmVhclNSR0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAogTGluZWFyRGlzcGxheVAzPGZsb2F0
PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8g
aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2Rl
Ci0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlzcGxheVAzTWF0
cml4IHsKLSAgICAgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlm
LCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKLSAgICAgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAx
Ljc2MjY2NDA2MDMxODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKLSAgICAgICAgIDAuMDM1
ODQ1ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1MjQwMDc2ODcy
ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyRGlzcGxheVAzKHh5elRvTGluZWFyRGlzcGxh
eVAzTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8TGlu
ZWFyRGlzcGxheVAzPGZsb2F0Pj4oeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8
ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKLSAg
ICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9u
LWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAzVG9Y
WVpNYXRyaXggewotICAgICAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5MzE2OTA5
MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCi0gICAgICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAu
NjkxNzM4NTIxODM2NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKLSAgICAgICAgMC4wZiwgICAg
ICAgICAgICAgICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCi0gICAg
fTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgIHJldHVy
biBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFlaQTxmbG9hdD4+KGxpbmVhckRp
c3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKSkpOwogfQogCisvLyBDaHJvbWF0aWMgQWRhcHRhdGlvbiBjb252ZXJzaW9u
cy4KKwogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDUwV2hpdGVQb2ludFRvRDY1V2hp
dGVQb2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cDovL3d3dy5i
cnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ1MFRvRDY1TWF0cml4IHsKLSAgICAgICAgIDAuOTU1
NTc2NmYsIC0wLjAyMzAzOTNmLCAwLjA2MzE2MzZmLAotICAgICAgICAtMC4wMjgyODk1ZiwgIDEu
MDA5OTQxNmYsIDAuMDIxMDA3N2YsCi0gICAgICAgICAwLjAxMjI5ODJmLCAtMC4wMjA0ODMwZiwg
MS4zMjk5MDk4ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENTBUb0Q2NU1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICBy
ZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENTBU
b0Q2NU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcikpKTsKIH0KIAogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDY1V2hpdGVQb2lu
dFRvRDUwV2hpdGVQb2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0
cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1s
Ci0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ2NVRvRDUwTWF0cml4IHsKLSAgICAg
ICAgIDEuMDQ3ODExMmYsIDAuMDIyODg2NmYsIC0wLjA1MDEyNzBmLAotICAgICAgICAgMC4wMjk1
NDI0ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCi0gICAgICAgIC0wLjAwOTIzNDVmLCAwLjAx
NTA0MzZmLCAgMC43NTIxMzE2ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENjVUb0Q1ME1h
dHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikp
KTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8Zmxv
YXQ+PihENjVUb0Q1ME1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gTGFiIGNvbnZlcnNpb25zLgorCiBzdGF0aWMgY29u
c3RleHByIGZsb2F0IExBQmUgPSAyMTYuMGYgLyAyNDM4OS4wZjsKIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgTEFCayA9IDI0Mzg5LjBmIC8gMjcuMGY7CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IEQ1
MFdoaXRlVmFsdWVzW10gPSB7IDAuOTY0MjJmLCAxLjBmLCAwLjgyNTIxZiB9OwpAQCAtMjIxLDYg
KzI2Myw5IEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG8KICAgICBy
ZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGNvbG9yV2l0aEQ1MFdoaXRlUG9pbnQuYWxwaGEgfTsK
IH0KIAorCisvLyBMQ0ggY29udmVyc2lvbnMuCisKIExDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBM
YWI8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNv
bG9yLTQvI2xhYi10by1sY2gKQEAgLTI0Nyw2ICsyOTIsOCBAQCBMYWI8ZmxvYXQ+IHRvTGFiKGNv
bnN0IExDSEE8ZmxvYXQ+JiBjb2xvCiAgICAgfTsKIH0KIAorLy8gSFNMIGNvbnZlcnNpb25zLgor
CiBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAv
LyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS4KQEAgLTMzMiw2
ICszNzksOCBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgCiAgICAg
fTsKIH0KIAorLy8gQ01ZSyBjb252ZXJzaW9ucy4KKwogU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29u
c3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBhdXRvIFtjLCBtLCB5LCBrLCBhXSA9IGNv
bG9yOwpAQCAtMzU2LDYgKzQwNSw5IEBAIENNWUtBPGZsb2F0PiB0b0NNWUtBKGNvbnN0IFNSR0JB
PGZsb2F0PiYKICAgICByZXR1cm4geyBjLCBtLCB5LCBrLCBhIH07CiB9CiAKKworLy8gQ29tYmlu
YXRpb24gY29udmVyc2lvbnMgKGNvbnN0cnVjdGVkIGZyb20gbW9yZSBiYXNpYyBjb252ZXJzaW9u
cyBhYm92ZSkuCisKIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9y
KQogewogICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJTUkdCQShjb2xvcikpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJ
KHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMSBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBUaGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0IgPC0+IExpbmVh
clJHQiAvIERpc3BsYXlQMyA8LT4gTGluZWFyRGlzcGxheVAzIGNvbnZlcnNpb24gZnVuY3Rpb25z
IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCKS4KLWZsb2F0IGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnQoZmxvYXQpOwotZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChm
bG9hdCk7CitmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQpOwor
ZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGZsb2F0KTsKKworZmxvYXQg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudE5vbkNsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRv
TGluZWFyQ29sb3JDb21wb25lbnROb25DbGFtcGluZyhmbG9hdCk7CiAKIAogLy8gQWxsIGNvbG9y
IHR5cGVzIG11c3QgYXQgbGVhc3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnMg
dG8gYW5kIGZyb20gdGhlIFhZWkEgY29sb3Igc3BhY2U6CkBAIC01Niw0MiArNTksMzYgQEAgV0VC
Q09SRV9FWFBPUlQgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZQogLy8gQWRkaXRpb25zCiBXRUJD
T1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4m
KTsKIAotCiAvLyBEaXNwbGF5UDMKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShj
b25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+
IHRvRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVf
RVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlz
cGxheVAzPGZsb2F0PiYpOwogCi0KIC8vIExpbmVhckRpc3BsYXlQMwogV0VCQ09SRV9FWFBPUlQg
WFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIFdFQkNP
UkVfRVhQT1JUIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3Qg
WFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZs
b2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLQogLy8g
TGFiCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGFiPGZsb2F0PiYp
OwogV0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBYWVpBPGZsb2F0PiYpOwog
Ly8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTGFi
PGZsb2F0PiYpOwogCi0KIC8vIExDSEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFla
QShjb25zdCBMQ0hBPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgTENIQTxmbG9hdD4gdG9MQ0hB
KGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExhYjxm
bG9hdD4gdG9MYWIoY29uc3QgTENIQTxmbG9hdD4mKTsKIAotCiAvLyBIU0xBCiBXRUJDT1JFX0VY
UE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgSFNMQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQ
T1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25z
CiBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYp
OwogCi0KIC8vIENNWUtBCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3Qg
Q01ZS0E8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBDTVlLQTxmbG9hdD4gdG9DTVlLQShjb25z
dCBYWVpBPGZsb2F0PiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVHlwZXMuaAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEs
MjE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBDb21wb25lbnRUcmFpdHM7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEFscGhhVHJhaXRz
OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8dWludDhfdD4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBtaW5WYWx1ZSA9IDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IG1heFZhbHVlID0gMjU1OwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8
dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCB0cmFuc3BhcmVudCA9IDA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG9wYXF1ZSA9IDI1NTsKIH07CiAKLXRlbXBs
YXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czxmbG9hdD4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgZmxvYXQgbWluVmFsdWUgPSAwLjBmOwotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWF4
VmFsdWUgPSAxLjBmOwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0IHRyYW5zcGFyZW50ID0gMC4wZjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGZsb2F0IG9wYXF1ZSA9IDEuMGY7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRSYW5nZSB7CisgICAgVCBtaW47CisgICAgVCBtYXg7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFJHQk1vZGVsOwordGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBMYWJNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTENITW9kZWw7
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhTTE1vZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBDTVlLTW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFhZWk1vZGVsOwor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8dWludDhfdD4sIDM+IHJhbmdlcyB7
IHsKKyAgICAgICAgeyAwLCAyNTUgfSwKKyAgICAgICAgeyAwLCAyNTUgfSwKKyAgICAgICAgeyAw
LCAyNTUgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxl
ID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAz
PiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAg
ICAgeyAwLCAxIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0
aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBMYWJNb2RlbDxmbG9hdD4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0
PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAg
ICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBMQ0hNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xv
ckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgMCwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAwLCAzNjAgfQor
ICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2Vz
IHsgeworICAgICAgICB7IDAsIDM2MCB9LAorICAgICAgICB7IDAsIDEwMCB9LAorICAgICAgICB7
IDAsIDEwMCB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGli
bGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ01ZS01vZGVsPGZsb2F0PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+
LCA0PiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAg
ICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMCwgMSB9CisgICAgfSB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgWFlaTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29s
b3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAor
ICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21D
b21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4gQ29s
b3JUeXBlIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBj
bGFtcGVkQ29tcG9uZW50KFQgYykgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Cit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsX3Y8VD4pOworCisgICAgY29u
c3RleHByIGF1dG8gcmFuZ2UgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5kZXhdOworICAg
IHJldHVybiBzdGQ6OmNsYW1wPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4oYywg
cmFuZ2UubWluLCByYW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHVuc2lnbmVkIEluZGV4PiBjb25zdGV4cHIgdWludDhfdCBjbGFtcGVkQ29tcG9uZW50KGNvbnN0
IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgYykKK3sKKyAgICByZXR1cm4gY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIEluZGV4PihjW0luZGV4XSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZSwgdW5zaWduZWQgSW5kZXg+IGNvbnN0ZXhwciBmbG9hdCBjbGFtcGVkQ29tcG9u
ZW50KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGMpCit7CisgICAgY29uc3RleHByIGF1
dG8gcmFuZ2UgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5kZXhdOworCisgICAgaWYgY29u
c3RleHByIChyYW5nZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpICYmIHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSkKKyAgICAgICAgcmV0dXJuIGNbSW5kZXhdOworCisgICAgaWYgY29uc3RleHByIChyYW5nZS5t
aW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAgICBy
ZXR1cm4gc3RkOjptaW4oY1tJbmRleF0sIHJhbmdlLm1heCk7CisKKyAgICBpZiBjb25zdGV4cHIg
KHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4KGNbSW5kZXhdLCByYW5nZS5taW4pOworCisgICAgcmV0dXJu
IHN0ZDo6Y2xhbXAoY1tJbmRleF0sIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcG9uZW50VHlwZSA9IFQ+IGNvbnN0ZXhwciBDb21w
b25lbnRUeXBlIGNsYW1wZWRBbHBoYShUIGFscGhhKQoreworICAgIHJldHVybiBzdGQ6OmNsYW1w
PENvbXBvbmVudFR5cGU+KGFscGhhLCBBbHBoYVRyYWl0czxDb21wb25lbnRUeXBlPjo6dHJhbnNw
YXJlbnQsIEFscGhhVHJhaXRzPENvbXBvbmVudFR5cGU+OjpvcGFxdWUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VD4gY2xhbXBlZENvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25l
bnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBl
LCAwPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+
KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oY29t
cG9uZW50cyksCisgICAgICAgIGNsYW1wZWRBbHBoYShjb21wb25lbnRzWzNdKQorICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxUPiBjbGFtcGVkQ29tcG9uZW50c0V4Y2VwdEFscGhhKGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjbGFt
cGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksCisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDI+KGNvbXBvbmVudHMpLAorICAgICAgICBjb21wb25lbnRzWzNdCisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JUeXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25l
bnRzPFQ+JiBjb21wb25lbnRzKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29s
b3JUeXBlPihjbGFtcGVkQ29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JU
eXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHMoVCBjMSwgVCBjMiwgVCBjMykKK3sKKyAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAg
ICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENv
bXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xv
clR5cGUsIDI+KGMzKSwKKyAgICAgICAgQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPjo6b3BhcXVlCisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21w
b25lbnRzKFQgYzEsIFQgYzIsIFQgYzMsIFQgYWxwaGEpCit7CisgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAxPihjMiksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihj
MyksCisgICAgICAgIGNsYW1wZWRBbHBoYTxULCB0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+KGFscGhhKQorICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4
Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICBy
ZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNFeGNl
cHRBbHBoYTxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9yVHlw
ZSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGEoVCBjMSwgVCBjMiwgVCBjMywgQWxw
aGEgYWxwaGEpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENv
bG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihj
MSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksCisgICAgICAg
IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksCisgICAgICAgIGFscGhhCisgICAg
fSk7Cit9CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQgY29sb3IpCit7CisgICAgYXV0byBjb21wb25lbnRz
ID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCAzOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGNvbXBvbmVudHNbaV0gPj0gVDo6TW9kZWw6OnJh
bmdlc1tpXS5taW4pOworICAgICAgICBBU1NFUlQoY29tcG9uZW50c1tpXSA8PSBUOjpNb2RlbDo6
cmFuZ2VzW2ldLm1heCk7CisgICAgfQorICAgIEFTU0VSVChjb2xvci5hbHBoYSA+PSBBbHBoYVRy
YWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQpOworICAgIEFTU0VS
VChjb2xvci5hbHBoYSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6
b3BhcXVlKTsKK30KKworI2Vsc2UKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZv
aWQgYXNzZXJ0SW5SYW5nZShUKQoreworfQorCisjZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWUs
IHR5cGVuYW1lID0gdm9pZD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0NvbG9yU3BhY2VNZW1i
ZXIgPSBmYWxzZTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBI
YXNDb2xvclNwYWNlTWVtYmVyPFQsIHN0ZDo6dm9pZF90PGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxU
PigpLmNvbG9yU3BhY2UpPj4gPSB0cnVlOwogCkBAIC03NCwxOCArMjcwLDIwIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFBhcmVudD4gc3RydWN0IENvbG9yV2kKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IFNSR0JBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8U1JHQkE8VD4+IHsKICAgICB1c2lu
ZyBDb21wb25lbnRUeXBlID0gVDsKLSAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OlNSR0I7Ci0KLSAgICBjb25zdGV4cHIgU1JHQkEoVCByZWQsIFQgZ3Jl
ZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAg
dXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKKyAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29s
b3JTcGFjZSB7IENvbG9yU3BhY2U6OlNSR0IgfTsKKyAgICAKKyAgICBjb25zdGV4cHIgU1JHQkEo
VCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUp
CiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAg
ICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAg
ICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgU1JHQkEo
KQotICAgICAgICA6IFNSR0JBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9u
ZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogU1JHQkEgeyAwLCAwLCAwLCAw
IH0KICAgICB7CiAgICAgfQogCkBAIC0xMDAsMTEgKzI5OCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5i
bHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdC
QTxUPiBhc1NSR0JBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4g
eyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgU1JHQkE8VD4mIGEsIGNvbnN0IFNSR0JBPFQ+
JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9u
ZW50cyhiKTsKQEAgLTExOCwxOCArMzExLDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JB
IDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TGluZWFyU1JHQkE8VD4+IHsKICAgICB1c2luZyBDb21w
b25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1vZGVsPFQ+OwogICAgIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6TGluZWFyUkdCOwogCi0g
ICAgY29uc3RleHByIExpbmVhclNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEg
PSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdC
QShUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1
ZSkKICAgICAgICAgOiByZWQgeyByZWQgfQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAg
ICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7Cisg
ICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBMaW5l
YXJTUkdCQSgpCi0gICAgICAgIDogTGluZWFyU1JHQkEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBMaW5l
YXJTUkdCQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTE0NCwxMSArMzM5LDYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7
IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIExpbmVhclNSR0JBPFQ+IGFzTGluZWFyU1JHQkEoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBMaW5lYXJTUkdCQTxUPiYgYSwgY29uc3QgTGluZWFyU1JHQkE8VD4mIGIpCiB7CiAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAt
MTYyLDE4ICszNTIsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3Bl
cgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGlzcGxheVAzIDogQ29sb3JXaXRoQWxw
aGFIZWxwZXI8RGlzcGxheVAzPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Cisg
ICAgdXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8g
Y29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKIAotICAgIGNvbnN0ZXhwciBEaXNw
bGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxU
Pjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIERpc3BsYXlQMyhUIHJlZCwgVCBncmVlbiwgVCBi
bHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiByZWQgeyBy
ZWQgfQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAgICAgICAsIGJsdWUgeyBibHVlIH0K
ICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2Uo
KnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBEaXNwbGF5UDMoKQotICAgICAgICA6IERp
c3BsYXlQMyB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0
czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IERpc3BsYXlQMyB7IDAsIDAsIDAsIDAgfQogICAg
IHsKICAgICB9CiAKQEAgLTE4OCwxMSArMzgwLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMu
YWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIERpc3BsYXlQMzxU
PiBhc0Rpc3BsYXlQMyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJu
IHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERpc3BsYXlQMzxUPiYgYSwgY29uc3QgRGlz
cGxheVAzPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0Nv
bG9yQ29tcG9uZW50cyhiKTsKQEAgLTIwNiwxNyArMzkzLDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExp
bmVhckRpc3BsYXlQMyA6IENvbG9yV2l0aEFscGhhSGVscGVyPExpbmVhckRpc3BsYXlQMzxUPj4g
ewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9k
ZWw8VD47CiAKLSAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBU
IGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0
ZXhwciBMaW5lYXJEaXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFs
cGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBn
cmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEg
eyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAK
ICAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKCkKLSAgICAgICAgOiBMaW5lYXJEaXNwbGF5
UDMgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlIH0KKyAgICAgICAgOiBMaW5lYXJEaXNwbGF5UDMgeyAwLCAwLCAwLCAwIH0KICAg
ICB7CiAgICAgfQogCkBAIC0yMzEsMTEgKzQyMCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBj
LmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJEaXNw
bGF5UDM8VD4gYXNMaW5lYXJEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQot
ewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaW5lYXJEaXNwbGF5
UDM8VD4mIGEsIGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYikKIHsKICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yNDksMTggKzQz
MywyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMYWIgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMYWI8VD4+
IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IExhYk1v
ZGVsPFQ+OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFj
ZTo6TGFiOwogCi0gICAgY29uc3RleHByIExhYihUIGxpZ2h0bmVzcywgVCBhLCBUIGIsIFQgYWxw
aGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBMYWIoVCBs
aWdodG5lc3MsIFQgYSwgVCBiLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAg
ICAgICAgOiBsaWdodG5lc3MgeyBsaWdodG5lc3MgfQogICAgICAgICAsIGEgeyBhIH0KICAgICAg
ICAgLCBiIHsgYiB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBh
c3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgTGFiKCkKLSAgICAg
ICAgOiBMYWIgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFp
dHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBMYWIgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAg
ICAgfQogCkBAIC0yNzUsMTEgKzQ2MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5hLCBjLmIsIGMuYWxwaGEg
fTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExhYjxUPiBhc0xhYihjb25z
dCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExhYjxUPiYgYSwgY29uc3QgTGFiPFQ+JiBiKQogewogICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTI5MywxNyAr
NDc0LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExDSEEgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMQ0hB
PFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBM
Q0hNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBMQ0hBKFQgbGlnaHRuZXNzLCBUIGNocm9tYSwg
VCBodWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0
ZXhwciBMQ0hBKFQgbGlnaHRuZXNzLCBUIGNocm9tYSwgVCBodWUsIFQgYWxwaGEgPSBBbHBoYVRy
YWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGxpZ2h0bmVzcyB7IGxpZ2h0bmVzcyB9CiAgICAg
ICAgICwgY2hyb21hIHsgY2hyb21hIH0KICAgICAgICAgLCBodWUgeyBodWUgfQogICAgICAgICAs
IGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAg
ICAgfQogCiAgICAgY29uc3RleHByIExDSEEoKQotICAgICAgICA6IExDSEEgeyBDb21wb25lbnRU
cmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25l
bnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAg
ICAgICAgOiBMQ0hBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMzE4LDExICs1
MDEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0
dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBjLmh1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgTENIQTxUPiBhc0xDSEEoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBMQ0hBPFQ+JiBhLCBjb25zdCBMQ0hBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTMzNiwxNyArNTE0LDE5IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhTTEEgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxIU0xBPFQ+PiB7CiAg
ICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBIU0xNb2RlbDxU
PjsKIAotICAgIGNvbnN0ZXhwciBIU0xBKFQgaHVlLCBUIHNhdHVyYXRpb24sIFQgbGlnaHRuZXNz
LCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIg
SFNMQShUIGh1ZSwgVCBzYXR1cmF0aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBoYSA9IEFscGhhVHJh
aXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogaHVlIHsgaHVlIH0KICAgICAgICAgLCBzYXR1cmF0
aW9uIHsgc2F0dXJhdGlvbiB9CiAgICAgICAgICwgbGlnaHRuZXNzIHsgbGlnaHRuZXNzIH0KICAg
ICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRo
aXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBIU0xBKCkKLSAgICAgICAgOiBIU0xBIHsgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1
ZSB9CisgICAgICAgIDogSFNMQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTM2
MywxMSArNTQzLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAog
ICAgIHJldHVybiB7IGMuaHVlLCBjLnNhdHVyYXRpb24sIGMubGlnaHRuZXNzLCBjLmFscGhhIH07
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBIU0xBPFQ+IGFzSFNMQShjb25z
dCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1sy
XSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEhTTEE8VD4mIGEsIGNvbnN0IEhTTEE8VD4mIGIpCiB7CiAgICAgcmV0dXJu
IGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAtMzgyLDgg
KzU1Nyw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIC8vIEZJ
WE1FOiBXaGVuIENvbG9yQ29tcG9uZW50cyBzdXBwb3J0cyBtb3JlIHRoYW4gbGVuZ3RoID09IDQs
IGFkZCBjb252ZXJzaW9uIHRvL2Zyb20gQ29sb3JDb21wb25lbnRzPFQ+IGZvciBDTVlLQQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8Q01Z
S0E8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9
IENNWUtNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBDTVlLQShUIGN5YW4sIFQgbWFnZW50YSwg
VCB5ZWxsb3csIFQgYmxhY2ssIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVl
KQorICAgIGNvbnN0ZXhwciBDTVlLQShUIGN5YW4sIFQgbWFnZW50YSwgVCB5ZWxsb3csIFQgYmxh
Y2ssIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGN5YW4geyBj
eWFuIH0KICAgICAgICAgLCBtYWdlbnRhIHsgbWFnZW50YSB9CiAgICAgICAgICwgeWVsbG93IHsg
eWVsbG93IH0KQEAgLTM5Myw3ICs1NjksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q01ZS0EgOiBDb2xvCiAgICAgfQogCiAgICAgY29uc3RleHByIENNWUtBKCkKLSAgICAgICAgOiBD
TVlLQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IENN
WUtBIHsgMCwgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtNDE3LDE3ICs1OTMsMTkg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPFhZWkE8VD4+IHsK
ICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFhZWk1vZGVs
PFQ+OwogCi0gICAgY29uc3RleHByIFhZWkEoVCB4LCBUIHksIFQgeiwgVCBhbHBoYSA9IENvbXBv
bmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIFhZWkEoVCB4LCBUIHksIFQg
eiwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogeCB7IHggfQog
ICAgICAgICAsIHkgeyB5IH0KICAgICAgICAgLCB6IHsgeiB9CiAgICAgICAgICwgYWxwaGEgeyBh
bHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAg
ICBjb25zdGV4cHIgWFlaQSgpCi0gICAgICAgIDogWFlaQSB7IENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IFhZ
WkEgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC00NDIsMTEgKzYyMCw2IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLngs
IGMueSwgYy56LCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBYWVpBPFQ+IGFzWFlaQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0
dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFhZWkE8VD4mIGEsIGNvbnN0IFhZWkE8
VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21w
b25lbnRzKGIpOwpAQCAtNDU3LDIxICs2MzAsMjIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKwogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4gY29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNh
bGxXaXRoQ29sb3JUeXBlKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cywgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBGdW5jdG9yJiYgZnVuY3RvcikKIHsKICAgICBzd2l0Y2ggKGNv
bG9yU3BhY2UpIHsKICAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBz
dGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzU1JHQkEoY29tcG9u
ZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+
KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAg
ICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tl
KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNMaW5lYXJTUkdCQShjb21wb25lbnRz
KSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxMaW5lYXJTUkdCQTxUPj4oY29tcG9uZW50cykpOwog
ICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAgICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0Rpc3BsYXlQMyhjb21wb25lbnRz
KSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxEaXNwbGF5UDM8VD4+KGNvbXBvbmVudHMpKTsKICAg
ICBjYXNlIENvbG9yU3BhY2U6OkxhYjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNMYWIoY29tcG9uZW50cykpOworICAgICAgICBy
ZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJv
bUNvbXBvbmVudHM8TGFiPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9y
PihmdW5jdG9yKSwgYXNTUkdCQShjb21wb25lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6aW52b2tl
KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPFNSR0JB
PFQ+Pihjb21wb25lbnRzKSk7CiB9CiAKIC8vIFBhY2tlZCBDb2xvciBGb3JtYXRzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgU1JH
QkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogICAgICAgICByZXR1cm4geyAw
LCAwLCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7Ci0g
ICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oZmFzdERpdmlkZUJ5MjU1KHIg
KiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7
CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50
OF90Pj4oZmFzdERpdmlkZUJ5MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFz
dERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7CiB9CiAKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxp
ZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQpAQCAtODgsNyArODgsNyBAQCBTUkdCQTx1
aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCCiAgICAgICAgIHJldHVybiB7IDAsIDAs
IDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCiAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICBy
ZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihmYXN0RGl2aWRlQnkyNTUociAqIGEg
KyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAq
IGEgKyAyNTQpLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFs
cGhhPFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2
aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsK
IH0KIAogc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRl
KHVpbnQ4X3QgYywgdWludDhfdCBhKQpAQCAtMTAxLDcgKzEwMSw3IEBAIFNSR0JBPHVpbnQ4X3Q+
IHVucHJlbXVsdGlwbGllZChTUkdCQTx1aW4KICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9y
OwogICAgIGlmICghYSB8fCBhID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVu
dEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVs
dGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdD
b21wb25lbnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBv
bmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJl
bXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDIyICs0
NSwxNCBAQCBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JHCiBTUkdCQTx1
aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90Pik7CiBTUkdCQTx1aW50
OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWludDhfdD4pOwogCi11aW50OF90IGNvbnZlcnRQ
cmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQpOwordWludDhfdCBjb252ZXJ0UHJlc2NhbGVk
U1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0KTsKIAotdWludDhfdCBjb252ZXJ0VG9Db21wb25l
bnRCeXRlKGZsb2F0KTsKLWNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1
aW50OF90KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4
X3QpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xh
bXBUb0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50VHlwZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb21w
b25lbnRUeXBlPiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVu
dFR5cGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRCeXRlVG8o
dWludDhfdCk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRDb21wb25lbnRGbG9hdFRv
KGZsb2F0KTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gQ29sb3JUeXBlPHVpbnQ4X3Q+IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9y
VHlwZTxmbG9hdD4mKTsKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xv
clR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
cyhjb25zdCBDb2xvclR5cGU8dWludDhfdD4mKTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5h
bWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4gQ29tcG9uZW50VHlwZT4gY29uc3Rl
eHByIENvbG9yVHlwZTx1aW50OF90PiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMoQ29tcG9uZW50VHlw
ZS4uLik7Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFt
cFRvQ29tcG9uZW50RmxvYXRzKENvbXBvbmVudFR5cGUuLi4pOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gVCBjb252ZXJ0VG8oY29uc3QgVSYpOwordGVtcGxhdGU8PiBTUkdCQTxm
bG9hdD4gY29udmVydFRvKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+Jik7Cit0ZW1wbGF0ZTw+IFNSR0JB
PHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlm
aW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7CiAK
QEAgLTc3LDcxICs2OSw0OSBAQCBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUo
dWluCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAogCi1p
bmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCi17
Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQoZiksIDBsLCAyNTVsKTsKLX0KLQot
aW5saW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewotICAgIHJl
dHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYgKiAyNTUuMGYpLCAwbCwgMjU1bCk7Ci19Ci0K
LWNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90IGJ5dGUpCitp
bmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0
IHZhbHVlKQogewotICAgIHJldHVybiBieXRlIC8gMjU1LjBmOworICAgIHJldHVybiBzdGQ6OmNs
YW1wKHN0ZDo6bHJvdW5kKHZhbHVlKSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgdWludDhfdCBjbGFtcFRvQ29tcG9uZW50Qnl0ZShD
b21wb25lbnRUeXBlIGNvbXBvbmVudCkKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcDxDb21wb25l
bnRUeXBlPihjb21wb25lbnQsIDAsIDI1NSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbXBv
bmVudFR5cGU+IGNvbnN0ZXhwciBmbG9hdCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoQ29tcG9uZW50
VHlwZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4o
Y29tcG9uZW50LCAwLCAxKTsKLX0KLQotdGVtcGxhdGU8PiBjb25zdGV4cHIgdWludDhfdCBjb252
ZXJ0Q29tcG9uZW50Qnl0ZVRvPHVpbnQ4X3Q+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNv
bnN0ZXhwciB1aW50OF90IGNvbnZlcnRCeXRlQWxwaGFUbzx1aW50OF90Pih1aW50OF90IHZhbHVl
KQogewogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdGVtcGxhdGU8PiBjb25zdGV4cHIgZmxvYXQg
Y29udmVydENvbXBvbmVudEJ5dGVUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkKK3RlbXBsYXRlPD4g
Y29uc3RleHByIGZsb2F0IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOworICAgIHJldHVy
biB2YWx1ZSAvIDI1NS4wZjsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUgdWludDhfdCBjb252ZXJ0
Q29tcG9uZW50RmxvYXRUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5l
IHVpbnQ4X3QgY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIHN0ZDo6
Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUuMGYpLCAwbCwgMjU1bCk7CiB9CiAKLXRlbXBs
YXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGZsb2F0PihmbG9hdCB2
YWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNvbnZlcnRGbG9hdEFscGhhVG88ZmxvYXQ+
KGZsb2F0IHZhbHVlKQogewotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50RmxvYXQodmFsdWUp
OworICAgIHJldHVybiBjbGFtcGVkQWxwaGEodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0
ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgQ29sb3JUeXBlPHVpbnQ4X3Q+
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4mIGNvbG9yKQor
dGVtcGxhdGU8PiBpbmxpbmUgU1JHQkE8ZmxvYXQ+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTx1aW50
OF90PiYgY29sb3IpCiB7Ci0gICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sw
XSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGUoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50
c1szXSkgfTsKLX0KKyAgICBhdXRvIGNvbnZlcnRUb1NSR0JBRmxvYXQgPSBbXSh1aW50OF90IHZh
bHVlKSAtPiBmbG9hdCB7CisgICAgICAgIHJldHVybiB2YWx1ZSAvIDI1NS4wZjsKKyAgICB9Owog
Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4
cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JU
eXBlPHVpbnQ4X3Q+JiBjb2xvcikKLXsKICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcik7Ci0gICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29t
cG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252
ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50Rmxv
YXQoY29tcG9uZW50c1szXSkgfTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUZsb2F0KGNv
bXBvbmVudHNbMF0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0
VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVu
dHNbM10pIH07CiB9CiAKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWlu
dDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKENvbXBvbmVudFR5cGUuLi4gY29tcG9uZW50cykK
K3RlbXBsYXRlPD4gaW5saW5lIFNSR0JBPHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxm
bG9hdD4mIGNvbG9yKQogewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRCeXRlKGNvbXBv
bmVudHMpLi4uIH07Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUJ5dGUgPSBbXShmbG9hdCB2
YWx1ZSkgLT4gdWludDhfdCB7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5k
KHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOworICAgIH07CiAKLXRlbXBsYXRlPHRlbXBsYXRl
PHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+
IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNsYW1wVG9Db21wb25lbnRGbG9hdHMoQ29tcG9u
ZW50VHlwZS4uLiBjb21wb25lbnRzKQotewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRG
bG9hdChjb21wb25lbnRzKS4uLiB9OworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50
c1swXSksIGNvbnZlcnRUb1NSR0JBQnl0ZShjb21wb25lbnRzWzFdKSwgY29udmVydFRvU1JHQkFC
eXRlKGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1szXSkgfTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xv
clR5cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlw
ZSYgY29sb3IsIEZ1bmN0b3ImJiBmdW5jdG9yKQpAQCAtMTU3LDUwICsxMjcsNjEgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdQogdGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0
IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNv
cHkgPSBjb2xvcjsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEJ5dGVUbzxkZWNs
dHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZl
cnRCeXRlQWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRl
QWxwaGEpOwogICAgIHJldHVybiBjb3B5OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNv
bG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQogewogICAgIGF1dG8gY29weSA9IGNvbG9yOwotICAg
IGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxkZWNsdHlwZShjb3B5LmFscGhh
KT4ob3ZlcnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICBy
ZXR1cm4gY29weTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIg
Q29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBl
JiBjb2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9y
QnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50
KSB7Ci0gICAgICAgIHJldHVybiBDb21wb25lbnRUcmFpdHM8ZGVjbHR5cGUoY29tcG9uZW50KT46
Om1heFZhbHVlIC0gY29tcG9uZW50OwotICAgIH0pOwotICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0
Q29tcG9uZW50Qnl0ZVRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKLSAg
ICByZXR1cm4gY29weTsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52
ZXJ0aWJsZSk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cik7CisgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGNvcHlbaV0gPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5n
ZXNbaV0ubWF4IC0gY29tcG9uZW50c1tpXTsKKyAgICBjb3B5WzNdID0gY29udmVydEJ5dGVBbHBo
YVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisK
KyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY29weSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkK
IHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQo
Y29sb3IsIFtdIChhdXRvIGNvbXBvbmVudCkgewotICAgICAgICByZXR1cm4gQ29tcG9uZW50VHJh
aXRzPGRlY2x0eXBlKGNvbXBvbmVudCk+OjptYXhWYWx1ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsK
LSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5h
bHBoYSk+KG92ZXJyaWRlQWxwaGEpOwotICAgIHJldHVybiBjb3B5OworICAgIHN0YXRpY19hc3Nl
cnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKKworICAgIGF1dG8gY29tcG9uZW50
cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRz
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgY29weVtp
XSA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlc1tpXS5tYXggLSBjb21wb25lbnRzW2ldOworICAg
IGNvcHlbM10gPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
PENvbG9yVHlwZT4oY29weSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29u
c3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQogewotICAgIGNvbnN0
ZXhwciBhdXRvIG1pbiA9IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBv
bmVudFR5cGU+OjptaW5WYWx1ZTsKLSAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRU
cmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBS
R0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pik7CiAKICAgICBhdXRv
IFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKLSAgICByZXR1cm4gYzEgPT0gbWluICYmIGMy
ID09IG1pbiAmJiBjMyA9PSBtaW4gJiYgYWxwaGEgPT0gbWF4OworICAgIGNvbnN0ZXhwciBhdXRv
IHJhbmdlcyA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlczsKKyAgICByZXR1cm4gYzEgPT0gcmFu
Z2VzWzBdLm1pbiAmJiBjMiA9PSByYW5nZXNbMV0ubWluICYmIGMzID09IHJhbmdlc1syXS5taW4g
JiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pjo6b3BhcXVlOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBi
b29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0
byBtYXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pjo6bWF4VmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBD
b2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+Pik7CiAKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBjb2xvcjsKLSAgICByZXR1
cm4gYzEgPT0gbWF4ICYmIGMyID09IG1heCAmJiBjMyA9PSBtYXggJiYgYWxwaGEgPT0gbWF4Owor
ICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlcyA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlczsKKyAg
ICByZXR1cm4gYzEgPT0gcmFuZ2VzWzBdLm1heCAmJiBjMiA9PSByYW5nZXNbMV0ubWF4ICYmIGMz
ID09IHJhbmdlc1syXS5tYXggJiYgYWxwaGEgPT0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQogCiBjb25zdGV4cHIgdWludDE2X3QgZmFz
dE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGlj
IE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAgICAgICBjb21wb25lbnRBcnJh
eVtpXSA9IGNvbXBvbmVudDsKICAgICB9CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXMoU1JHQkEgeyBjb21wb25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBv
bmVudEFycmF5WzNdLCBjb21wb25lbnRBcnJheVswXSB9KTsKKyAgICByZXR1cm4gY29udmVydFRv
PFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IGNvbXBvbmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJh
eVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVudEFycmF5WzBdIH0pOwogfQogCiBSZWY8
SW5iYW5kR2VuZXJpY0N1ZT4gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZUF0
dHJpYnV0ZXMoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJpbmcpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1DCiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2
OyBpKyspIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAg
ICAgICAgICAgICAgY29sb3IgPSByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhj
b2xvcik7CiAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihy
b3VuZChjb2xvciAqIDI1NSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFy
cmF5OwpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRy
YW5zZm9ybUMKICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9y
ID0gbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yKTsKICAgICAgICAgICAg
ICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24g
MjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JB
PHVpbnQ4X3Q+PiByb3VuZEFuZAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyByLCBnLCBiLCBh
IH0pOworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgciwgZywg
YiwgYSB9KTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNH
LmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAg
Q29sb3IgTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcgogICAgIGlmICghcGl4ZWxb
M10pCiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzNdKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFNS
R0JBPHVpbnQ4X3Q+PihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAv
IHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CiB9CiAKIHZv
aWQgTmF0aXZlSW1hZ2U6OmNsZWFyU3ViaW1hZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5jcHAJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTkg
KzkxLDE5IEBAIGJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHIKIHsKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9y
ID0gYXNTUkdCQShncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlzY2FsZUNvbG9yTWF0cml4
KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgU0VQSUE6IHsK
LSAgICAgICAgY29sb3IgPSBhc1NSR0JBKHNlcGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5z
Zm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAg
ICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihzZXBpYUNvbG9y
TWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgSFVF
X1JPVEFURTogewotICAgICAgICBjb2xvciA9IGFzU1JHQkEoaHVlUm90YXRlQ29sb3JNYXRyaXgo
bV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8Zmxv
YXQ+PihodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1
cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0Nv
bXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTI0MCw3ICsyNDAsNyBA
QCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhCiAgICAgICAgIDAuMDMw
ZiwgLTAuNzQxZiwgLTAuMDg5ZiwgMC4wZiwgMS4wZiwKICAgICAgICAgMC4wMzBmLCAgMC4wNTlm
LCAtMC44OTBmLCAwLjBmLCAxLjBmCiAgICAgfTsKLSAgICBjb2xvciA9IGFzU1JHQkEodG9EYXJr
TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyho
dWVSb3RhdGVkU1JHQkEpKSk7CisgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNS
R0JBPGZsb2F0Pj4odG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhodWVSb3RhdGVkU1JHQkEpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bjo6aW52CiAgICAgICAgIC0wLjA0OWYsIC0xLjM0N2YsICAwLjE0NmYsIDAuMGYsIDEuMjVmLAog
ICAgICAgICAtMC4wNDlmLCAtMC4wOTdmLCAtMS4xMDRmLCAwLjBmLCAxLjI1ZgogICAgIH07Ci0g
ICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZSA9IGFzU1JHQkEodG9MaWdodE1vZGVNYXRyaXgu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7Cisg
ICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZSA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8ZmxvYXQ+Pih0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIAogICAgIC8vIENvbnZlcnQgdG8gSFNMLgogICAg
IGF1dG8gaHNsYSA9IHRvSFNMQShjb252ZXJ0ZWRUb0xpZ2h0TW9kZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTU2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw3ICsxMTcsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNv
bG9yKENvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRU
bzxTUkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTEzNiw3ICsxMzYsNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1D
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdC
QTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAko
cmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCi0gICAgOiBD
b2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihj
b2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpCisg
ICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhh
KSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Miwx
MyArOTIsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAg
ICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAgICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVs
OnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOworICAgICAg
ICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0s
IHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAgIH0KIAogICAgIFtyZ2JDb2xvciBn
ZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBv
bmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAg
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0
PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkg
fSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNf
Y2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9u
ZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9y
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihEMkQx
X0NPTE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCisgICAgOiBDb2xvcihj
b252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3Iu
YiwgY29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
NyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBD
T01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVz
aFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQogewotICAgIGF1dG8gY29sb3JL
ZXkgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNv
bG9yLmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBjb2xvcktleSA9IGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwog
CiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBpZiAoIW1femVyb0JydXNoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjcxNTY0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3Ip
CiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50
IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAgIHJldHVybiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Ymx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJu
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVk
Q29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwNiw3ICs1
MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVudUJhY2tncm91bmRDb2xvCiAgICAgTlNV
SW50ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDow
IHk6MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFsw
XSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGlu
Z0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0s
IHBpeGVsWzNdKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKENTU1Zh
bHVlSUQgY3NzVmFsdWVJRCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25B
ZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShy
ZXZpc2lvbiAyNzE1NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcg
KzkxLDcgQEAgcHVibGljOgogICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9n
cmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2ltcGxlVG8uYmx1ZSwgc2ltcGxl
VG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZSk7CiAgICAgICAgIGZs
b2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZy
b20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYSwg
c2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKLSAgICAgICAgYW5pbWF0ZWQgPSBjbGFt
cFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHN0ZDo6bHJvdW5kKHJlZCksIHN0ZDo6bHJvdW5kKGdy
ZWVuKSwgc3RkOjpscm91bmQoYmx1ZSksIHN0ZDo6bHJvdW5kKGFscGhhKSk7CisgICAgICAgIGFu
aW1hdGVkID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc3RkOjpscm91
bmQocmVkKSwgc3RkOjpscm91bmQoZ3JlZW4pLCBzdGQ6Omxyb3VuZChibHVlKSwgc3RkOjpscm91
bmQoYWxwaGEpKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFu
Y2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29u
c3Qgb3ZlcnJpZGUKQEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgICAgICBhdXRvIHNp
bXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25v
cmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0g
ICAgICAgIG1fdG8gPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHNpbXBsZVRvLnJlZCAr
IHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBs
ZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOworICAgICAgICBtX3RvID0gbWFrZUNsYW1waW5n
Q29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQs
IHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBs
ZUZyb20uYmx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhT
VkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzE1OTMpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wMS0xOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5n
IGxvZ2ljIHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgVXBkYXRlIHRlc3RzIHRv
IHVzZSBuZXcgY29udmVydFRvPD4gZnVuY3Rpb25zLgorCiAyMDIxLTAxLTE4ICBGdWppaSBIaXJv
bm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0R1bXBSZW5k
ZXJUcmVlXSBBU1NFUlQoIW1fY2hhbm5lbCkgZmFpbGVkIGluIFdlYlNvY2tldDo6Y29udGV4dERl
c3Ryb3llZApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVz
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9F
UShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAgICAgCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNs
YUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5k
VHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNjIsNyArNjIsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9CbGFjaykKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNv
bG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRv
Q29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwog
ICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC03OCw3ICs3
OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShj
b2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3Ip
KTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+
Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVk
Q29sb3IpOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVu
KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGln
aHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25l
bnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQ
RUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTExMCw3ICsxMTAsNyBA
QCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9y
LmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlw
cGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOwor
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRv
U1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xv
cik7CiB9CiAKQEAgLTEyNiw3ICsxMjYsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3Jh
eSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xv
ci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAg
ICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTQyLDcgKzE0
Miw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
Y29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3Vu
ZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9y
KSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90
Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBl
ZENvbG9yKTsKIH0KIApAQCAtMTU4LDcgKzE1OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xp
Z2h0R3JheSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNv
bG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRv
Q29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwog
ICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xv
clRlc3RzLmNwcAkocmV2aXNpb24gMjcxNTY0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3
ICsxMDksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogICAgIH0KIAogICAgIGF1
dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07
Ci0gICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb21wb25lbnRCeXRl
cykgfTsKKyAgICBDb2xvciByZ2IxIHsgY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29tcG9uZW50
Qnl0ZXMpIH07CiAgICAgQ29sb3IgcmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07CiAgICAgRVhQRUNU
X05FKHJnYjEsIHJnYjIpOwogICAgIEVYUEVDVF9ORShyZ2IyLCByZ2IxKTsKQEAgLTEzOCw3ICsx
MzgsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gpCiAgICAgfQogCiAgICAgYXV0byBjb21w
b25lbnRCeXRlcyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAxMjgsIDYzLCAxMjcgfTsKLSAgICBD
b2xvciByZ2IxIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbXBvbmVudEJ5dGVzKSB9Owor
ICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykg
fTsKICAgICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKICAgICBFWFBFQ1RfTkUocmdi
MS5oYXNoKCksIHJnYjIuaGFzaCgpKTsKIH0KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29j
b2EvVGVzdFBERkRvY3VtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Y29jb2EvVGVzdFBERkRvY3VtZW50Lm1tCShyZXZpc2lvbiAyNzE1NjQpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTQ1
LDcgKzE0NSw3IEBAIFdlYkNvcmU6OkNvbG9yIFRlc3RQREZQYWdlOjpjb2xvckF0UG9pbnQKIAog
ICAgIGlmICghYSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvbG9yOjp0cmFuc3BhcmVudEJs
YWNrOwotICAgIHJldHVybiBXZWJDb3JlOjpjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8V2ViQ29yZTo6
U1JHQkE+KHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEpOworICAgIHJl
dHVybiBXZWJDb3JlOjptYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8V2ViQ29yZTo6
U1JHQkE8dWludDhfdD4+KHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEp
OwogfQogCiAvLyBEb2N1bWVudHMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417915</attachid>
            <date>2021-01-19 14:48:26 -0800</date>
            <delta_ts>2021-01-19 17:32:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210119144825.patch</filename>
            <type>text/plain</type>
            <size>90724</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIG9mIGFkZGluZyBzdXBwb3J0
IGZvciBFeHRlbmRlZC1zUkdCIHRvIGNvbG9yIHR5cGVzLAorICAgICAgICB0aGlzIGFkZHMgY29u
c3RleHByIG1ldGFkYXRhIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb2xvcgorICAg
ICAgICB0eXBlcyB3aXRoIHRoZSBjb3JyZWN0IGNsYW1wZWQgKG9yIHVuY2xhbXBlZCkgdmFsdWVz
IGFuZCBhZG9wdHMgdGhlbQorICAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuCisKKyAg
ICAgICAgLSBSZW1vdmVzICJjb21wb25lbnQgYnl0ZXMiIGFuZCAiY29tcG9uZW50IGZsb2F0cyIg
Y29uY2VwdHMgcmVwbGFjaW5nCisgICAgICAgICAgd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIGNv
bG9yIHR5cGVzIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnM6CisgICAgICAgICAgCisgICAgICAgICAg
ICBjb252ZXJ0VG9Db21wb25lbnRCeXRlcy9jb252ZXJ0VG9Db21wb25lbnRGbG9hdHMgLT4gY29u
dmVydFRvPENvbG9yVHlwZTxUPj4KKyAgICAgICAgICAgIGNsYW1wVG9Db21wb25lbnRCeXRlcy9j
bGFtcFRvQ29tcG9uZW50RmxvYXRzIC0+IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8Q29sb3JUeXBl
PFQ+PgorCisgICAgICAgIC0gQWRkcyBNb2RlbCB0eXBlIGFsaWFzZXMgdG8gZWFjaCBjb2xvciB0
eXBlIHdoaWNoIGNhbiBzcGVjaWZ5IHRyYWl0cyAKKyAgICAgICAgICBmb3IgdGhhdCB0eXBlIG9m
IGNvbG9yLiBUaGVzZSB0cmFpdHMgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgdmFsaWQgCisg
ICAgICAgICAgY29tcG9uZW50IHJhbmdlcyBhbmQgd2hldGhlciB0aGUgY29sb3IgY2FuIGJlIGlu
dmVydGVkLiBNb3JlIHdpbGwgYmUgCisgICAgICAgICAgYWRkZWQgKGxpa2Ugd2hpdGUgcG9pbnQg
YW5kIGJhc2UgY29sb3Igc3BhY2UpIHRvIGhlbHAgc2ltcGxpZnkgdXRpbGl0eSAKKyAgICAgICAg
ICBhbmQgY29udmVyc2lvbiBjb2RlLiAKKworICAgICAgICAtIEFkZHMgYXNzZXJ0aW9ucyB0byBl
YWNoIGNvbG9yIHR5cGUgY29uc3RydWN0b3IgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZAorICAgICAg
ICAgIGFyZSB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlcyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBNb2Rl
bCkuCisKKyAgICAgICAgLSBSZW1vdmVkIGFzRm9vKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYp
IGZ1bmN0aW9ucywgd2hpY2ggd2VyZSBhIGxpdHRsZSAKKyAgICAgICAgICB0byAgc2ltaWxhcmx5
IG5hbWVkIHRvIHRoZSB0b0ZvbygpIGZ1bmN0aW9ucy4gSW5zdGVhZCwgdGhlIGdlbmVyaWMgCisg
ICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZTxUPj4gKG9yIGl0J3MgY2xhbXBp
bmcgdmFyaWFudHMpIGNhbiBiZSB1c2VkCisgICAgICAgICAgdG8gY29udmVydCBmcm9tIENvbG9y
Q29tcG9uZW50cyB0byBjb2xvciB0eXBlcy4KKworICAgICAgICAtIEFkZHMgQWxwaGFUcmFpdHMg
dG8gbW9kZWwgYWxwaGEgdmFsdWVzIGFzIHRoZXNlIGFyZSBjb25zaXN0ZW50IGJldHdlZW4KKyAg
ICAgICAgICBjb2xvciB0eXBlcyBhbmQgb25seSBjaGFuZ2UgYmFzZWQgb24gY29tcG9uZW50IHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6
CisKIDIwMjEtMDEtMTkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNjk4NjUpIE1haWwncyBjb250ZXh0IG1lbnUgd2hl
biByaWdodCBjbGlja2luZyBvbiBhIGxpbmsgZG9lcyBub3QgY29udGFpbiBjb3JyZWN0IGVudHJp
ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI3
MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHN0
YXRpYyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXgKIAogI2lmIEVOQUJMRShJTlBV
VF9UWVBFX0NPTE9SKQogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBj
b2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9yVmFsdWUoKSk7
CiAgICAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYoInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7CiAgICAgfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjcx
NjE5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NDcsNyArMTQ0Nyw3IEBA
IC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmEKICAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkgewot
ICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRv
PFNSR0JBPGZsb2F0Pj4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAl
Ny41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjcx
NjE5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzODUsNyArMjM4NSw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJu
IEAoYmFja2luZ09iamVjdC0+aXNTZWxlY3RlZCgpKTsKIAogICAgICAgICBpZiAoYmFja2luZ09i
amVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0cyhiYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICAg
ICAgYXV0byBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGJhY2tpbmdPYmplY3QtPmNv
bG9yVmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNv
bG9yLmJsdWVdOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkQ1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkKSkKICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29s
b3IuZ3JlZW4pKQogICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9y
LmJsdWUpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgY29udmVydFRv
Q29tcG9uZW50RmxvYXQobV9jb2xvci5hbHBoYSkpKQorICAgICAgICAsIG1fYWxwaGEoY3JlYXRl
V3JhcHBlcihvd25lciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5j
cHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyRmFzdFBhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8
U1JHQkE+KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBl
ZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2Vu
dGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0
byBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMgd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JB
PHVpbnQ4X3Q+LgorICAgICAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1
aW50OF90Pj4ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOyAvLyBGSVhNRTogQWxyZWFkeSBjbGFt
cGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJj
ZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBhbmQgcmVwbGFjZSBjYWxs
IHRvIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+IHdpdGggZGlyZWN0IGNv
bnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KICAgICB9CiAKICAgICAvLyBUcnkgcmdiKCkg
c3ludGF4LgpAQCAtNTA1LDcgKzUwNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlm
IChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
ICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHJlZCwgZ3JlZW4sIGJsdWUp
OyAvLyBGSVhNRTogQWxyZWFkeSBjbGFtcGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVw
ZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4g
dWludDhfdCBhbmQgcmVwbGFjZSBjYWxsIHRvIGNsYW1wVG9Db21wb25lbnRCeXRlcyB3aXRoIGRp
cmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWludDhfdD4uCisgICAgICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PihyZWQsIGdyZWVuLCBibHVlKTsgLy8g
RklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUg
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4
X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4
X3Q+PiB3aXRoIGRpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWludDhfdD4uCiAgICAgfQog
CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI3
MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIHN0YXRpYyB1aW50OF90
IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSAKICAgICBpZiAoaXNQZXJjZW50YWdlKQogICAgICAg
ICB2YWx1ZSA9IHZhbHVlIC8gMTAwLjAgKiAyNTUuMDsKIAotICAgIHJldHVybiBjb252ZXJ0UHJl
c2NhbGVkVG9Db21wb25lbnRCeXRlKHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxl
ZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJH
QlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC03MzksNyArNzM5LDcg
QEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgICAgICB9Ci0gICAgICAg
IGFscGhhQ29tcG9uZW50ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSk7CisgICAgICAg
IGFscGhhQ29tcG9uZW50ID0gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90PihhbHBoYSk7CiAg
ICAgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQpAQCAtNzk0LDcgKzc5NCw3IEBAIHN0YXRp
YyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQo
KSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9u
ZW50Qnl0ZXModG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFy
cmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSkpOworICAg
IHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoSFNMQTxmbG9hdD4geyBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU9w
dGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNzE2MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTYwMSw3ICs2MDEsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Igd2ls
bCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25lIGNv
bG9yIGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmxpZ2h0
bmVzcyA9IDAuNWY7CiAgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmFscGhhICo9IDAuMzhm
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQSho
c2xhKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVDdXJyZW50Y29sb3IpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IsIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
dW5kZXJsaW5lQ29sb3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAy
NzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAzLDYgKzkwMyw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVzZXQKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgT3B0aW9uYWw8
ZmxvYXQ+IGFscGhhKQogewogICAgIGlmIChhbHBoYSkgeworICAgICAgICBpZiAoIXN0ZDo6aXNm
aW5pdGUoKmFscGhhKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBzZXRTdHJva2VT
dHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbG9y
LCBhbHBoYS52YWx1ZSgpLCBjYW52YXNCYXNlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTkxNyw3ICs5MjAsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRTdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9rZUNvbG9y
KGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgYXV0byBjb2xvciA9IFNSR0JB
IHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAoIXN0
ZDo6aXNmaW5pdGUoZ3JheUxldmVsKSB8fCAhc3RkOjppc2Zpbml0ZShhbHBoYSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PGZsb2F0Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpOwogICAgIGlm
IChzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVy
bjsKICAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwpAQCAtOTI1LDcgKzkz
MSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoZmxvYXQgciwgZmxv
YXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyByLCBn
LCBiLCBhIH07CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHIpIHx8ICFzdGQ6OmlzZmluaXRlKGcp
IHx8ICFzdGQ6OmlzZmluaXRlKGIpICB8fCAhc3RkOjppc2Zpbml0ZShhKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8Zmxv
YXQ+PihyLCBnLCBiLCBhKTsKICAgICBpZiAoc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxl
bnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5
bGUoY29sb3IpKTsKQEAgLTkzNCw2ICs5NDMsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNldFN0CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZp
bGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gYWxwaGEpCiB7CiAg
ICAgaWYgKGFscGhhKSB7CisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSgqYWxwaGEpKQorICAg
ICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZTo6Y3Jl
YXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBhbHBoYS52YWx1ZSgpLCBjYW52
YXNCYXNlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk0OCw3ICs5NjAsMTAgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxDb2xvcihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0
IGFscGhhKQogewotICAgIGF1dG8gY29sb3IgPSBTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVs
LCBncmF5TGV2ZWwsIGFscGhhIH07CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGdyYXlMZXZlbCkg
fHwgIXN0ZDo6aXNmaW5pdGUoYWxwaGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNv
bG9yID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlMZXZlbCwgZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKTsKICAgICBpZiAoc3RhdGUoKS5maWxsU3R5bGUuaXNF
cXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNldEZpbGxTdHlsZShDYW52
YXNTdHlsZShjb2xvcikpOwpAQCAtOTU2LDcgKzk3MSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnNldEZpCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2V0RmlsbENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0g
ICAgYXV0byBjb2xvciA9IFNSR0JBIHsgciwgZywgYiwgYSB9OworICAgIGlmICghc3RkOjppc2Zp
bml0ZShyKSB8fCAhc3RkOjppc2Zpbml0ZShnKSB8fCAhc3RkOjppc2Zpbml0ZShiKSAgfHwgIXN0
ZDo6aXNmaW5pdGUoYSkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29sb3IgPSBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4ociwgZywgYiwgYSk7CiAgICAgaWYgKHN0
YXRlKCkuZmlsbFN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKICAg
ICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUoY29sb3IpKTsKQEAgLTEyODksNiArMTMwNyw5IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3Ryb2sKIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCwgZmxvYXQgYmx1ciwgY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywgT3B0aW9uYWw8ZmxvYXQ+
IGFscGhhKQogeworICAgIGlmIChhbHBoYSAmJiAhc3RkOjppc2Zpbml0ZSgqYWxwaGEpKQorICAg
ICAgICByZXR1cm47CisKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
OwogICAgIGlmICghY29sb3JTdHJpbmcuaXNOdWxsKCkpIHsKICAgICAgICAgY29sb3IgPSBwYXJz
ZUNvbG9yT3JDdXJyZW50Q29sb3IoY29sb3JTdHJpbmcsIGNhbnZhc0Jhc2UoKSk7CkBAIC0xMzAw
LDE3ICsxMzIxLDI2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gK
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBo
YSkKIHsKLSAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252
ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGFscGhhIH0pKTsKKyAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoZ3JheUxldmVsKSB8fCAhc3Rk
Ojppc2Zpbml0ZShhbHBoYSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFNoYWRvdyhGbG9h
dFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4obWFr
ZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlMZXZlbCwgZ3JheUxldmVsLCBn
cmF5TGV2ZWwsIGFscGhhKSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9h
dCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNp
emUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsg
ciwgZywgYiwgYSB9KSk7CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHIpIHx8ICFzdGQ6OmlzZmlu
aXRlKGcpIHx8ICFzdGQ6OmlzZmluaXRlKGIpICB8fCAhc3RkOjppc2Zpbml0ZShhKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1
ciwgY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PGZsb2F0Pj4ociwgZywgYiwgYSkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwg
ZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBzZXRT
aGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKENNWUtBIHsgYywgbSwgeSwgaywgYSB9KSkpOworICAgIGlmICghc3RkOjpp
c2Zpbml0ZShjKSB8fCAhc3RkOjppc2Zpbml0ZShtKSB8fCAhc3RkOjppc2Zpbml0ZSh5KSAgfHwg
IXN0ZDo6aXNmaW5pdGUoaykgfHwgIXN0ZDo6aXNmaW5pdGUoYSkpCisgICAgICAgIHJldHVybjsK
KworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRU
bzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShDTVlLQSB7IGMsIG0sIHksIGssIGEgfSkpKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclNoYWRvdygpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAy
NzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKENv
bG9yIGNvbG9yKQogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvckNvbXBvbmVudHMpCi0gICAgOiBtX3N0eWxlKGNvbnZlcnRUb0NvbXBvbmVudEJ5
dGVzKGNvbG9yQ29tcG9uZW50cykpCisgICAgOiBtX3N0eWxlKGNvbnZlcnRUbzxTUkdCQTx1aW50
OF90Pj4oY29sb3JDb21wb25lbnRzKSkKIHsKIH0KIApAQCAtMTQ4LDcgKzE0OCw3IEBAIGJvb2wg
Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnMKIAogYm9vbCBDYW52YXNTdHlsZTo6
aXNFcXVpdmFsZW50KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29tcG9uZW50cykgY29uc3QKIHsKLSAg
ICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpn
ZXQ8Q29sb3I+KG1fc3R5bGUpID09IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbXBvbmVudHMp
OworICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBX
VEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pihjb21w
b25lbnRzKTsKIH0KIAogdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjcxNjE5
KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdGF0aWMgQ29sb3IgcGFyc2VD
b2xvcihSZWZQdHI8SlNPTjo6T2JqCiAKICAgICBhdXRvIGEgPSBjb2xvck9iamVjdC0+Z2V0RG91
YmxlKFByb3RvY29sOjpET006OlJHQkFDb2xvcjo6YUtleSk7CiAgICAgaWYgKCFhKQotICAgICAg
ICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiKTsKLSAgICBy
ZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiLCBjb252ZXJ0VG9D
b21wb25lbnRCeXRlKCphKSk7CisgICAgICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRz
PFNSR0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29t
cG9uZW50c0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiLCBjb252ZXJ0Rmxv
YXRBbHBoYVRvPHVpbnQ4X3Q+KCphKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0Nv
bG9yKGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBKU09OOjpPYmplY3QmIGNvbmZpZ09iamVjdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlz
aW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHRlbmVk
KCkgY29uc3QKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4z
M2YpIC8gdjsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IG11
bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CisgICAg
cmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBtdWx0aXBsaWVyICogciwg
bXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOwogfQogCiBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdApAQCAtMTA1LDcgKzEwNSw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5l
ZCgpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9h
dCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJl
dHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0
aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxT
UkdCQTx1aW50OF90Pj4oU1JHQkEgeyBtdWx0aXBsaWVyICogciwgbXVsdGlwbGllciAqIGcsIG11
bHRpcGxpZXIgKiBiLCBhIH0pOwogfQogCiBmbG9hdCBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QK
QEAgLTE0MSw3ICsxNDEsMTQgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFs
cGhhKQogQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFsmXSAoY29uc3QgYXV0byYg
dW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7Ci0gICAgICAgIHJldHVybiBpbnZlcnRlZENvbG9y
V2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOworICAgICAgICB1c2lu
ZyBDb2xvclR5cGUgPSBzdGQ6OmRlY2F5X3Q8ZGVjbHR5cGUodW5kZXJseWluZ0NvbG9yKT47Cisg
ICAgICAgIGlmIGNvbnN0ZXhwciAoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKQorICAg
ICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEodW5kZXJseWlu
Z0NvbG9yLCBhbHBoYSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IERl
dGVybWluZSBpZiB0aGVyZSBpcyBhIG1lYW5pbmdmdWwgdW5kZXJzdGFuZGluZyBvZiBpbnZlcnNp
b24gdGhhdCB3b3JrcworICAgICAgICAgICAgLy8gYmV0dGVyIGZvciBub24taW52ZXJ0aWJsZSBj
b2xvciB0eXBlcyBsaWtlIExhYi4KKyAgICAgICAgICAgIHJldHVybiBpbnZlcnRlZENvbG9yV2l0
aE92ZXJyaWRlbkFscGhhKHRvU1JHQkEodW5kZXJseWluZ0NvbG9yKSwgYWxwaGEpOworICAgICAg
ICB9CiAgICAgfSk7CiB9CiAKQEAgLTE1Nyw3ICsxNjQsNyBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFj
ZSwgQ29sb3JDb21wb25lbnRzPGZsCiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAg
cmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgYXNFeHRlbmRlZCgpLmNvbXBvbmVu
dHMoKSB9OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRz
KGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhhc0lubGluZSgpKSkgfTsKKyAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+
Pihhc0lubGluZSgpKSkgfTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDggQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQo
KSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1
OyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9Ci0gICAg
dWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0
VG9Db21wb25lbnRCeXRlKGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7
IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkg
PyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5l
KCkuYWxwaGEpOyB9CisgICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzRXh0ZW5kZWQoKS5hbHBo
YSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KKyAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRC
eXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KIAogICAgIFdFQkNPUkVfRVhQ
T1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxp
Z2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1
bWluYW5jZS4KQEAgLTMzMSwxMSArMzMxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JB
PFQ+IENvbG9yOjp0b1MKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8
VCwgdWludDhfdD4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwogICAgICAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvbG9yKTsKICAgICAgICAgfSwKICAgICAg
ICAgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7CiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShjb2xvcikpOwogICAgICAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvU1JHQkEoY29sb3IpOwogICAgICAgICB9CkBAIC0zOTEsMTUgKzM5MSwyNyBAQCBp
bmxpbmUgdm9pZCBDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8CiAKIGlubGluZSBib29sIENv
bG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBjb2xv
ci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OmlzQmxhY2soY29sb3IpOworICAgIHJldHVybiBjb2xvci5jYWxsT25V
bmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSB7CisgICAgICAg
IHVzaW5nIENvbG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZSh1bmRlcmx5aW5nQ29sb3Ip
PjsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5
cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PikK
KyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjppc0JsYWNrKHVuZGVybHlpbmdDb2xvcik7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IERlZmluZSBtZWFuaW5nZnVsIGJs
YWNrIHBvaW50cyBmb3IgYWxsIGNvbG9yIHR5cGVzLgorICAgICAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OmlzQmxhY2sodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpKTsKKyAgICAgICAgfQogICAgIH0p
OwogfQogCiBpbmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1
dG8mIGNvbG9yKSB7Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKGNvbG9yKTsKKyAg
ICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1dG8mIHVuZGVy
bHlpbmdDb2xvcikgeworICAgICAgICB1c2luZyBDb2xvclR5cGUgPSBzdGQ6OmRlY2F5X3Q8ZGVj
bHR5cGUodW5kZXJseWluZ0NvbG9yKT47CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPj4pCisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6aXNXaGl0
ZSh1bmRlcmx5aW5nQ29sb3IpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBEZWZpbmUgbWVhbmluZ2Z1bCB3aGl0ZSBwb2ludHMgZm9yIGFsbCBjb2xvciB0eXBlcy4KKyAg
ICAgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHRvU1JHQkEodW5kZXJseWluZ0NvbG9y
KSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI3MTYxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25z
dCBDb2xvciYgYmFja2QKICAgICBpbnQgZyA9IChiYWNrZHJvcEcgKiBiYWNrZHJvcEEgKiAoMHhG
RiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEgKiBzb3VyY2VHKSAvIGQ7CiAgICAgaW50IGIg
PSAoYmFja2Ryb3BCICogYmFja2Ryb3BBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3Vy
Y2VBICogc291cmNlQikgLyBkOwogCi0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxT
UkdCQT4ociwgZywgYiwgYSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8dWludDhfdD4+KHIsIGcsIGIsIGEpOwogfQogCiBDb2xvciBibGVuZFdpdGhXaGl0ZShjb25z
dCBDb2xvciYgY29sb3IpCkBAIC03OCw3ICs3OCw3IEBAIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgaW50IGcgPSBibGVuZENvbXBvbmVudChleGlzdGlu
Z0csIGFscGhhKTsKICAgICAgICAgaW50IGIgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0IsIGFs
cGhhKTsKIAotICAgICAgICByZXN1bHQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIs
IGcsIGIsIGFscGhhKTsKKyAgICAgICAgcmVzdWx0ID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxT
UkdCQTx1aW50OF90Pj4ociwgZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYg
ZyA+PSAwICYmIGIgPj0gMCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDcgKzEwMCw3IEBA
IENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICBhdXRvIHByZW11
bHRpcGxpZWRGcm9tID0gcHJlbXVsdGlwbGllZENlaWxpbmcoZnJvbS50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKSk7CiAgICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkQ2VpbGlu
Zyh0by50b1NSR0JBTG9zc3k8dWludDhfdD4oKSk7CiAKLSAgICBhdXRvIHByZW11bHRpcGxpZWRC
bGVuZGVkID0gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigKKyAgICBhdXRvIHByZW11bHRp
cGxpZWRCbGVuZGVkID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oCiAg
ICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGll
ZFRvLnJlZCwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVk
RnJvbS5ncmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBwcm9ncmVzcyksCiAgICAgICAgIFdl
YkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVl
LCBwcm9ncmVzcyksCkBAIC0xMjAsNyArMTIwLDcgQEAgQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVs
dGlwbHkoY29uc3QgQ29sbwogICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOwogICAgIGF1dG8gdG9TUkdCID0gdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigKKyAgICByZXR1cm4g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oCiAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJD
b3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCiAgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyks
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
Q29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI4
ICszMiwxMDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1mbG9hdCBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGZsb2F0IGMpCisvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9T
UkdCCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0Jf
WFlaX01hdHJpeC5odG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRv
TGluZWFyU1JHQk1hdHJpeCB7CisgICAgIDMuMjQwNDU0MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1
MzE0ZiwKKyAgICAtMC45NjkyNjYwZiwgIDEuODc2MDEwOGYsICAwLjA0MTU1NjBmLAorICAgICAw
LjA1NTY0MzRmLCAtMC4yMDQwMjU5ZiwgIDEuMDU3MjI1MmYKK307CisKKy8vIGh0dHBzOi8vZW4u
d2lraXBlZGlhLm9yZy93aWtpL1NSR0IKKy8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29t
L2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29s
b3JNYXRyaXg8MywgMz4gbGluZWFyU1JHQlRvWFlaTWF0cml4IHsKKyAgICAwLjQxMjQ1NjRmLCAg
MC4zNTc1NzYxZiwgIDAuMTgwNDM3NWYsCisgICAgMC4yMTI2NzI5ZiwgIDAuNzE1MTUyMmYsICAw
LjA3MjE3NTBmLAorICAgIDAuMDE5MzMzOWYsICAwLjExOTE5MjBmLCAgMC45NTAzMDQxZgorfTsK
KworLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lv
bi1jb2RlCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlz
cGxheVAzTWF0cml4IHsKKyAgICAgMi40OTM0OTY5MTE5NDE0MjVmLCAgLTAuOTMxMzgzNjE3OTE5
MTIzOWYsIC0wLjQwMjcxMDc4NDQ1MDcxNjhmLAorICAgIC0wLjgyOTQ4ODk2OTU2MTU3NDdmLCAg
MS43NjI2NjQwNjAzMTgzNDYzZiwgIDAuMDIzNjI0Njg1ODQxOTQzNmYsCisgICAgIDAuMDM1ODQ1
ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1MjQwMDc2ODcyZgor
fTsKKworLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVy
c2lvbi1jb2RlCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxpbmVhckRpc3Bs
YXlQM1RvWFlaTWF0cml4IHsKKyAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5MzE2
OTA5MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCisgICAgMC4yMjg5NzQ1NjQwNjk3NDg4ZiwgMC42
OTE3Mzg1MjE4MzY1MDY0ZiwgMC4wNzkyODY5MTQwOTM3NDVmLAorICAgIDAuMGYsICAgICAgICAg
ICAgICAgIDAuMDQ1MTEzMzgxODU4OTAyNmYsIDEuMDQzOTQ0MzY4OTAwOTc2ZgorfTsKKworLy8g
aHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5o
dG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ1MFRvRDY1TWF0cml4IHsK
KyAgICAgMC45NTU1NzY2ZiwgLTAuMDIzMDM5M2YsIDAuMDYzMTYzNmYsCisgICAgLTAuMDI4Mjg5
NWYsICAxLjAwOTk0MTZmLCAwLjAyMTAwNzdmLAorICAgICAwLjAxMjI5ODJmLCAtMC4wMjA0ODMw
ZiwgMS4zMjk5MDk4ZgorfTsKKworLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5k
ZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4
PDMsIDM+IEQ2NVRvRDUwTWF0cml4IHsKKyAgICAgMS4wNDc4MTEyZiwgMC4wMjI4ODY2ZiwgLTAu
MDUwMTI3MGYsCisgICAgIDAuMDI5NTQyNGYsIDAuOTkwNDg0NGYsIC0wLjAxNzA0OTFmLAorICAg
IC0wLjAwOTIzNDVmLCAwLjAxNTA0MzZmLCAgMC43NTIxMzE2ZgorfTsKKworZmxvYXQgbGluZWFy
VG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGZsb2F0IGMpCiB7CisgICAgQVNTRVJUKGMgPj0g
MCk7CisgICAgQVNTRVJUKGMgPD0gMSk7CisKICAgICBpZiAoYyA8IDAuMDAzMTMwOGYpCiAgICAg
ICAgIHJldHVybiAxMi45MmYgKiBjOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KDEuMDU1
ZiAqIHN0ZDo6cG93KGMsIDEuMGYgLyAyLjRmKSAtIDAuMDU1ZiwgMCwgMSk7CiB9CiAKLWZsb2F0
IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQgYykKK2Zsb2F0IHJnYlRvTGluZWFyQ29s
b3JDb21wb25lbnRDbGFtcGluZyhmbG9hdCBjKQogeworICAgIEFTU0VSVChjID49IDApOworICAg
IEFTU0VSVChjIDw9IDEpOworICAgIAogICAgIGlmIChjIDw9IDAuMDQwNDVmKQogICAgICAgICBy
ZXR1cm4gYyAvIDEyLjkyZjsKIAogICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihzdGQ6OnBvdygo
YyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0KIAorZmxvYXQgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudE5vbkNsYW1waW5nKGZsb2F0IGMpCit7CisgICAgZmxvYXQgc2lnbiA9
IHN0ZDo6c2lnbmJpdChjKSA/IC0xLjBmIDogMS4wZjsKKyAgICBjID0gc3RkOjphYnMoYyk7CisK
KyAgICBpZiAoYyA8IDAuMDAzMTMwOGYpCisgICAgICAgIHJldHVybiAxMi45MmYgKiBjICogc2ln
bjsKKworICAgIHJldHVybiAoMS4wNTVmICogc3RkOjpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4w
NTVmKSAqIHNpZ247Cit9CisKK2Zsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnROb25DbGFt
cGluZyhmbG9hdCBjKQoreworICAgIGZsb2F0IHNpZ24gPSBzdGQ6OnNpZ25iaXQoYykgPyAtMS4w
ZiA6IDEuMGY7CisgICAgYyA9IHN0ZDo6YWJzKGMpOworCisgICAgaWYgKGMgPD0gMC4wNDA0NWYp
CisgICAgICAgIHJldHVybiBjIC8gMTIuOTJmICogc2lnbjsKKworICAgIHJldHVybiBzdGQ6OnBv
dygoYyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpICogc2lnbjsKK30KKworLy8gR2FtbWEgY29u
dmVyc2lvbnMuCisKIExpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0IFNSR0JB
PGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xv
ckNvbXBvbmVudChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50
KGNvbG9yLmdyZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5i
bHVlKSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJl
ZCksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVl
biksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVl
KSwKICAgICAgICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtNjEsOSArMTM1LDkgQEAgTGlu
ZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgUwogU1JHQkE8ZmxvYXQ+IHRvU1JH
QkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAg
ICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAotICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9u
ZW50Q2xhbXBpbmcoY29sb3IucmVkKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dENsYW1waW5nKGNvbG9yLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dENsYW1waW5nKGNvbG9yLmJsdWUpLAogICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBA
IC03MSw5ICsxNDUsOSBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxm
CiBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIHJnYlRvTGluZWFyQ29s
b3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChjb2xvci5ncmVlbiksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3Iu
Ymx1ZSksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5y
ZWQpLAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuZ3Jl
ZW4pLAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1
ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTgxLDgxICsxNTUsNDkgQEAg
TGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMwogRGlzcGxheVAzPGZsb2F0
PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKICAg
ICByZXR1cm4gewotICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCks
Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAotICAgICAg
ICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBsaW5lYXJU
b1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwKKyAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAogICAgICAgICBjb2xvci5hbHBo
YQogICAgIH07CiB9CiAKKy8vIE1hdHJpeCBjb252ZXJzaW9ucy4KKwogTGluZWFyU1JHQkE8Zmxv
YXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKLSAgICAvLyBodHRwOi8vd3d3LmJydWNl
bGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyU1JHQk1hdHJpeCB7Ci0gICAgICAg
ICAzLjI0MDQ1NDJmLCAtMS41MzcxMzg1ZiwgLTAuNDk4NTMxNGYsCi0gICAgICAgIC0wLjk2OTI2
NjBmLCAgMS44NzYwMTA4ZiwgIDAuMDQxNTU2MGYsCi0gICAgICAgICAwLjA1NTY0MzRmLCAtMC4y
MDQwMjU5ZiwgIDEuMDU3MjI1MmYKLSAgICB9OwotICAgIHJldHVybiBhc0xpbmVhclNSR0JBKHh5
elRvTGluZWFyU1JHQk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPExpbmVhclNS
R0JBPGZsb2F0Pj4oeHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBYWVpBPGZsb2F0PiB0b1hZWkEo
Y29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAvLyBodHRwczovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9TUkdCCi0gICAgLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5j
b20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAotICAgIGNvbnN0ZXhwciBDb2xv
ck1hdHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggewotICAgICAgICAwLjQxMjQ1NjRm
LCAgMC4zNTc1NzYxZiwgIDAuMTgwNDM3NWYsCi0gICAgICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1
MjJmLCAgMC4wNzIxNzUwZiwKLSAgICAgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1
MDMwNDFmCi0gICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhclNSR0JUb1hZWk1hdHJpeC50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAg
ICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPFhZWkE8ZmxvYXQ+PihsaW5lYXJTUkdCVG9YWVpN
YXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3Ip
KSk7CiB9CiAKIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3Qg
WFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9j
c3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJp
eDwzLCAzPiB4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeCB7Ci0gICAgICAgICAyLjQ5MzQ5Njkx
MTk0MTQyNWYsICAtMC45MzEzODM2MTc5MTkxMjM5ZiwgLTAuNDAyNzEwNzg0NDUwNzE2OGYsCi0g
ICAgICAgIC0wLjgyOTQ4ODk2OTU2MTU3NDdmLCAgMS43NjI2NjQwNjAzMTgzNDYzZiwgIDAuMDIz
NjI0Njg1ODQxOTQzNmYsCi0gICAgICAgICAwLjAzNTg0NTgzMDI0Mzc4NDVmLCAtMC4wNzYxNzIz
ODkyNjgwNDE4ZiwgIDAuOTU2ODg0NTI0MDA3Njg3MmYKLSAgICB9OwotICAgIHJldHVybiBhc0xp
bmVhckRpc3BsYXlQMyh4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeC50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICByZXR1cm4gbWFrZUZy
b21Db21wb25lbnRzPExpbmVhckRpc3BsYXlQMzxmbG9hdD4+KHh5elRvTGluZWFyRGlzcGxheVAz
TWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOwogfQogCiBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0
PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8j
Y29sb3ItY29udmVyc2lvbi1jb2RlCi0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxp
bmVhckRpc3BsYXlQM1RvWFlaTWF0cml4IHsKLSAgICAgICAgMC40ODY1NzA5NDg2NDgyMTYyZiwg
MC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4xOTgyMTcyODUyMzQzNjNmLAotICAgICAgICAwLjIyODk3
NDU2NDA2OTc0ODhmLCAwLjY5MTczODUyMTgzNjUwNjRmLCAwLjA3OTI4NjkxNDA5Mzc0NWYsCi0g
ICAgICAgIDAuMGYsICAgICAgICAgICAgICAgIDAuMDQ1MTEzMzgxODU4OTAyNmYsIDEuMDQzOTQ0
MzY4OTAwOTc2ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShsaW5lYXJEaXNwbGF5UDNUb1hZ
Wk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpKTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPFhZWkE8ZmxvYXQ+PihsaW5lYXJE
aXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gQ2hyb21hdGljIEFkYXB0YXRpb24gY29udmVyc2lv
bnMuCisKIHN0YXRpYyBYWVpBPGZsb2F0PiBjb252ZXJ0RnJvbUQ1MFdoaXRlUG9pbnRUb0Q2NVdo
aXRlUG9pbnQoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHA6Ly93d3cu
YnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAotICAgIGNv
bnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7Ci0gICAgICAgICAwLjk1
NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKLSAgICAgICAgLTAuMDI4Mjg5NWYsICAx
LjAwOTk0MTZmLCAwLjAyMTAwNzdmLAotICAgICAgICAgMC4wMTIyOTgyZiwgLTAuMDIwNDgzMGYs
IDEuMzI5OTA5OGYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEoRDUwVG9ENjVNYXRyaXgudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAg
cmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxYWVpBPGZsb2F0Pj4oRDUwVG9ENjVNYXRyaXgudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAK
IHN0YXRpYyBYWVpBPGZsb2F0PiBjb252ZXJ0RnJvbUQ2NVdoaXRlUG9pbnRUb0Q1MFdoaXRlUG9p
bnQoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2Vs
aW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAotICAgIGNvbnN0ZXhw
ciBDb2xvck1hdHJpeDwzLCAzPiBENjVUb0Q1ME1hdHJpeCB7Ci0gICAgICAgICAxLjA0NzgxMTJm
LCAwLjAyMjg4NjZmLCAtMC4wNTAxMjcwZiwKLSAgICAgICAgIDAuMDI5NTQyNGYsIDAuOTkwNDg0
NGYsIC0wLjAxNzA0OTFmLAotICAgICAgICAtMC4wMDkyMzQ1ZiwgMC4wMTUwNDM2ZiwgIDAuNzUy
MTMxNmYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEoRDY1VG9ENTBNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgcmV0dXJu
IG1ha2VGcm9tQ29tcG9uZW50czxYWVpBPGZsb2F0Pj4oRDY1VG9ENTBNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKKy8vIExh
YiBjb252ZXJzaW9ucy4KKwogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBMQUJlID0gMjE2LjBmIC8g
MjQzODkuMGY7CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IExBQmsgPSAyNDM4OS4wZiAvIDI3LjBm
Owogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBENTBXaGl0ZVZhbHVlc1tdID0geyAwLjk2NDIyZiwg
MS4wZiwgMC44MjUyMWYgfTsKQEAgLTIyMSw2ICsyNjMsOSBAQCBMYWI8ZmxvYXQ+IHRvTGFiKGNv
bnN0IFhZWkE8ZmxvYXQ+JiBjb2xvCiAgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBhLCBiLCBjb2xv
cldpdGhENTBXaGl0ZVBvaW50LmFscGhhIH07CiB9CiAKKworLy8gTENIIGNvbnZlcnNpb25zLgor
CiBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8g
aHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyNsYWItdG8tbGNoCkBAIC0yNDcsNiAr
MjkyLDggQEAgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBMQ0hBPGZsb2F0PiYgY29sbwogICAgIH07
CiB9CiAKKy8vIEhTTCBjb252ZXJzaW9ucy4KKwogSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFNS
R0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lr
aS9IU0xfY29sb3Jfc3BhY2UuCkBAIC0zMzIsNiArMzc5LDggQEAgU1JHQkE8ZmxvYXQ+IHRvU1JH
QkEoY29uc3QgSFNMQTxmbG9hdD4mIAogICAgIH07CiB9CiAKKy8vIENNWUsgY29udmVyc2lvbnMu
CisKIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IENNWUtBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgYXV0byBbYywgbSwgeSwgaywgYV0gPSBjb2xvcjsKQEAgLTM1Niw2ICs0MDUsOSBAQCBDTVlL
QTxmbG9hdD4gdG9DTVlLQShjb25zdCBTUkdCQTxmbG9hdD4mCiAgICAgcmV0dXJuIHsgYywgbSwg
eSwgaywgYSB9OwogfQogCisKKy8vIENvbWJpbmF0aW9uIGNvbnZlcnNpb25zIChjb25zdHJ1Y3Rl
ZCBmcm9tIG1vcmUgYmFzaWMgY29udmVyc2lvbnMgYWJvdmUpLgorCiBYWVpBPGZsb2F0PiB0b1hZ
WkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gdG9YWVpBKHRvTGlu
ZWFyU1JHQkEoY29sb3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQ29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsOCArMzAsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlc2UgYXJl
IHRoZSBzdGFuZGFyZCBzUkdCIDwtPiBMaW5lYXJSR0IgLyBEaXNwbGF5UDMgPC0+IExpbmVhckRp
c3BsYXlQMyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvU1JHQikuCi1mbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLWZsb2F0
IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOworZmxvYXQgbGluZWFyVG9SR0JDb2xv
ckNvbXBvbmVudENsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25l
bnRDbGFtcGluZyhmbG9hdCk7CisKK2Zsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnROb25D
bGFtcGluZyhmbG9hdCk7CitmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Tm9uQ2xhbXBp
bmcoZmxvYXQpOwogCiAKIC8vIEFsbCBjb2xvciB0eXBlcyBtdXN0IGF0IGxlYXN0IGltcGxlbWVu
dCB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zIHRvIGFuZCBmcm9tIHRoZSBYWVpBIGNvbG9yIHNw
YWNlOgpAQCAtNTYsNDIgKzU5LDM2IEBAIFdFQkNPUkVfRVhQT1JUIExpbmVhclNSR0JBPGZsb2F0
PiB0b0xpbmUKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JH
QkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+Jik7CiAKLQogLy8gRGlzcGxheVAzCiBXRUJDT1JF
X0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogV0VC
Q09SRV9FWFBPUlQgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0
PiYpOwogLy8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+
IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKIAotCiAvLyBMaW5l
YXJEaXNwbGF5UDMKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBMaW5lYXJEaXNwbGF5UDM8Zmxv
YXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMK
IFdFQkNPUkVfRVhQT1JUIERpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgTGluZWFy
RGlzcGxheVAzPGZsb2F0PiYpOwogCi0KIC8vIExhYgogV0VCQ09SRV9FWFBPUlQgWFlaQTxmbG9h
dD4gdG9YWVpBKGNvbnN0IExhYjxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIExhYjxmbG9hdD4g
dG9MYWIoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQg
TENIQTxmbG9hdD4gdG9MQ0hBKGNvbnN0IExhYjxmbG9hdD4mKTsKIAotCiAvLyBMQ0hBCiBXRUJD
T1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTENIQTxmbG9hdD4mKTsKIFdFQkNP
UkVfRVhQT1JUIExDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRk
aXRpb25zCiBXRUJDT1JFX0VYUE9SVCBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IExDSEE8ZmxvYXQ+
Jik7CiAKLQogLy8gSFNMQQogV0VCQ09SRV9FWFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0
IEhTTEE8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3Qg
WFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+
IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mKTsKIAotCiAvLyBDTVlLQQogV0VCQ09SRV9FWFBP
UlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IENNWUtBPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBP
UlQgQ01ZS0E8ZmxvYXQ+IHRvQ01ZS0EoY29uc3QgWFlaQTxmbG9hdD4mKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI3
MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMTggKzMxLDIxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzOwordGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBBbHBoYVRyYWl0czsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29tcG9u
ZW50VHJhaXRzPHVpbnQ4X3Q+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWluVmFs
dWUgPSAwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKK3Rl
bXBsYXRlPD4gc3RydWN0IEFscGhhVHJhaXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQ4X3QgdHJhbnNwYXJlbnQgPSAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhf
dCBvcGFxdWUgPSAyNTU7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8
ZmxvYXQ+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG1pblZhbHVlID0gMC4wZjsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG1heFZhbHVlID0gMS4wZjsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEFscGhhVHJhaXRzPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCB0cmFu
c3BhcmVudCA9IDAuMGY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBvcGFxdWUgPSAxLjBm
OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yQ29tcG9uZW50UmFuZ2Ug
eworICAgIFQgbWluOworICAgIFQgbWF4OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBSR0JNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGFiTW9kZWw7Cit0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IExDSE1vZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBI
U0xNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgQ01ZS01vZGVsOwordGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBYWVpNb2RlbDsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8
dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVu
dFJhbmdlPHVpbnQ4X3Q+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMjU1IH0sCisgICAg
ICAgIHsgMCwgMjU1IH0sCisgICAgICAgIHsgMCwgMjU1IH0KKyAgICB9IH07CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBSR0JNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxD
b2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIDEg
fSwKKyAgICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMCwgMSB9CisgICAgfSB9OworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgTGFiTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJy
YXk8Q29sb3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAw
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7IC1z
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgp
IH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZh
bHNlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTENITW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJh
bmdlcyB7IHsKKyAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5p
dHkoKSB9LAorICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpIH0sCisgICAgICAgIHsgMCwgMzYwIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSFNM
TW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21w
b25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAzNjAgfSwKKyAg
ICAgICAgeyAwLCAxMDAgfSwKKyAgICAgICAgeyAwLCAxMDAgfQorICAgIH0gfTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENNWUtNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJh
eTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgND4gcmFuZ2VzIHsgeworICAgICAgICB7IDAs
IDEgfSwKKyAgICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAs
IDEgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0g
dHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IFhZWk1vZGVsPGZsb2F0PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiBy
YW5nZXMgeyB7CisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7
IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0
eSgpIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9
IGZhbHNlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBj
b25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVu
dHM8VD4mIGMpCit7CisgICAgcmV0dXJuIENvbG9yVHlwZSB7IGNbMF0sIGNbMV0sIGNbMl0sIGNb
M10gfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwg
dHlwZW5hbWUgVD4gY29uc3RleHByIGF1dG8gY2xhbXBlZENvbXBvbmVudChUIGMpIC0+IHR5cGVu
YW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19pbnRlZ3JhbF92PFQ+KTsKKworICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlID0gQ29sb3JUeXBl
OjpNb2RlbDo6cmFuZ2VzW0luZGV4XTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcDxUPihjLCByYW5n
ZS5taW4sIHJhbmdlLm1heCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdW5z
aWduZWQgSW5kZXg+IGNvbnN0ZXhwciBmbG9hdCBjbGFtcGVkQ29tcG9uZW50KGZsb2F0IGMpCit7
CisgICAgY29uc3RleHByIGF1dG8gcmFuZ2UgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5k
ZXhdOworCisgICAgaWYgY29uc3RleHByIChyYW5nZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjppbmZpbml0eSgpICYmIHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSkKKyAgICAgICAgcmV0dXJuIGM7CisKKyAgICBpZiBjb25zdGV4
cHIgKHJhbmdlLm1pbiA9PSAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkp
CisgICAgICAgIHJldHVybiBzdGQ6Om1pbihjLCByYW5nZS5tYXgpOworCisgICAgaWYgY29uc3Rl
eHByIChyYW5nZS5tYXggPT0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkp
CisgICAgICAgIHJldHVybiBzdGQ6Om1heChjLCByYW5nZS5taW4pOworCisgICAgcmV0dXJuIHN0
ZDo6Y2xhbXAoYywgcmFuZ2UubWluLCByYW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgVCBjbGFt
cGVkQ29tcG9uZW50KGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4g
Y2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIEluZGV4PihjW0luZGV4XSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBvbmVudFR5cGUgPSBUPiBjb25zdGV4cHIgQ29t
cG9uZW50VHlwZSBjbGFtcGVkQWxwaGEoVCBhbHBoYSkKK3sKKyAgICByZXR1cm4gc3RkOjpjbGFt
cDxUPihhbHBoYSwgQWxwaGFUcmFpdHM8Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50LCBBbHBo
YVRyYWl0czxDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGNsYW1w
ZWRDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAg
ICByZXR1cm4geworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9u
ZW50cyksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRz
KSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGNvbXBvbmVudHMpLAor
ICAgICAgICBjbGFtcGVkQWxwaGEoY29tcG9uZW50c1szXSkKKyAgICB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VD4gY2xhbXBlZENvbXBvbmVudHNFeGNlcHRBbHBoYShjb25zdCBDb2xvckNvbXBvbmVudHM8
VD4mIGNvbXBvbmVudHMpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVu
dDxDb2xvclR5cGUsIDA+KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENv
bG9yVHlwZSwgMT4oY29tcG9uZW50cyksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JU
eXBlLCAyPihjb21wb25lbnRzKSwKKyAgICAgICAgY29tcG9uZW50c1szXQorICAgIH07Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9y
VHlwZSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29t
cG9uZW50cykKK3sKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xh
bXBlZENvbXBvbmVudHM8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xh
bXBpbmdDb21wb25lbnRzKFQgYzEsIFQgYzIsIFQgYzMpCit7CisgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAxPihjMiksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihj
MyksCisgICAgICAgIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlw
ZT46Om9wYXF1ZQorICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50cyhUIGMx
LCBUIGMyLCBUIGMzLCBUIGFscGhhKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8
Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENv
bG9yVHlwZSwgMD4oYzEpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4o
YzIpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLAorICAgICAg
ICBjbGFtcGVkQWxwaGE8VCwgdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihhbHBo
YSkKKyAgICB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBU
PiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYShj
b25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMpCit7CisgICAgcmV0dXJuIG1ha2VG
cm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNsYW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGE8Q29s
b3JUeXBlPihjb21wb25lbnRzKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxwaGE+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1w
aW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhKFQgYzEsIFQgYzIsIFQgYzMsIEFscGhhIGFscGhhKQor
eworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVu
dHMgeworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oYzEpLAorICAgICAg
ICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLAorICAgICAgICBjbGFtcGVkQ29t
cG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLAorICAgICAgICBhbHBoYQorICAgIH0pOworfQorCisj
aWYgQVNTRVJUX0VOQUJMRUQKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQg
YXNzZXJ0SW5SYW5nZShUIGNvbG9yKQoreworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1l
X3Y8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KSB7CisgICAgICAgIGF1dG8gY29t
cG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShj
b21wb25lbnRzW2ldID49IFQ6Ok1vZGVsOjpyYW5nZXNbaV0ubWluLCAiQ29tcG9uZW50IGF0IGlu
ZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAlZiIsIGks
ICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6cmFuZ2VzW2ldLm1pbik7CisgICAgICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbaV0gPD0gVDo6TW9kZWw6OnJhbmdlc1tpXS5t
YXgsICJDb21wb25lbnQgYXQgaW5kZXggJWQgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUg
YWxsb3dlZCBtYXhpbXVtICVmIiwgaSwgIGNvbXBvbmVudHNbaV0sIFQ6Ok1vZGVsOjpyYW5nZXNb
aV0ubWF4KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbG9yLmFs
cGhhID49IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVu
dCwgIkFscGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAodHJh
bnNwYXJlbnQpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBv
bmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29s
b3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46Om9wYXF1
ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgbWF4aW11bSAo
b3BhcXVlKSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25l
bnRUeXBlPjo6b3BhcXVlKTsKKyAgICB9Cit9CisKKyNlbHNlCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoVCkKK3sKK30KKworI2VuZGlmCisKIHRl
bXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBI
YXNDb2xvclNwYWNlTWVtYmVyID0gZmFsc2U7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
Y29uc3RleHByIGJvb2wgSGFzQ29sb3JTcGFjZU1lbWJlcjxULCBzdGQ6OnZvaWRfdDxkZWNsdHlw
ZShzdGQ6OmRlY2x2YWw8VD4oKS5jb2xvclNwYWNlKT4+ID0gdHJ1ZTsKIApAQCAtNzQsMTggKzI3
MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdCQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPFNSR0JB
PFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwotCi0gICAgY29uc3RleHByIFNS
R0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46
Om1heFZhbHVlKQorICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47CisgICAgc3RhdGljIGNv
bnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpTUkdCIH07CisgICAgCisgICAg
Y29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBBbHBoYVRy
YWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJlZCB9CiAgICAgICAgICwgZ3JlZW4g
eyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxw
aGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAg
Y29uc3RleHByIFNSR0JBKCkKLSAgICAgICAgOiBTUkdCQSB7IENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IFNS
R0JBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMTAwLDExICszMDAsNiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5y
ZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMp
Ci17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNSR0JBPFQ+JiBh
LCBjb25zdCBTUkdCQTxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkg
PT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0xMTgsMTggKzMxMywyMCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBMaW5lYXJTUkdCQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPExpbmVhclNSR0JBPFQ+PiB7
CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBSR0JNb2Rl
bDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6
OkxpbmVhclJHQjsKIAotICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdCQShUIHJlZCwgVCBncmVlbiwg
VCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25z
dGV4cHIgTGluZWFyU1JHQkEoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhh
VHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVl
biB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBh
bHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAg
ICBjb25zdGV4cHIgTGluZWFyU1JHQkEoKQotICAgICAgICA6IExpbmVhclNSR0JBIHsgQ29tcG9u
ZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9
CisgICAgICAgIDogTGluZWFyU1JHQkEgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBA
IC0xNDQsMTEgKzM0MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNv
bXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJTUkdCQTxUPiBhc0xpbmVhclNS
R0JBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBj
WzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyU1JHQkE8VD4mIGEsIGNvbnN0IExpbmVhclNSR0JB
PFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29t
cG9uZW50cyhiKTsKQEAgLTE2MiwxOCArMzU0LDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERpc3BsYXlQ
MyA6IENvbG9yV2l0aEFscGhhSGVscGVyPERpc3BsYXlQMzxUPj4gewogICAgIHVzaW5nIENvbXBv
bmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpEaXNwbGF5UDM7CiAKLSAg
ICBjb25zdGV4cHIgRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBD
b21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBEaXNwbGF5UDMoVCBy
ZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAg
ICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAgICAg
LCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAg
ICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgRGlzcGxheVAz
KCkKLSAgICAgICAgOiBEaXNwbGF5UDMgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBD
b21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
LCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBEaXNwbGF5UDMgeyAw
LCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0xODgsMTEgKzM4Miw2IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5n
cmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBEaXNwbGF5UDM8VD4gYXNEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBj
KQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEaXNwbGF5UDM8
VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBv
bmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yMDYsMTcgKzM5NSwxOSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDMgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMaW5l
YXJEaXNwbGF5UDM8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2lu
ZyBNb2RlbCA9IFJHQk1vZGVsPFQ+OwogCi0gICAgY29uc3RleHByIExpbmVhckRpc3BsYXlQMyhU
IHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhW
YWx1ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBUIGJs
dWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJl
ZCB9CiAgICAgICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQog
ICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgq
dGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIExpbmVhckRpc3BsYXlQMygpCi0gICAgICAg
IDogTGluZWFyRGlzcGxheVAzIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9u
ZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGluZWFyRGlzcGxheVAzIHsg
MCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjMxLDExICs0MjIsNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5yZWQsIGMu
Z3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgTGluZWFyRGlzcGxheVAzPFQ+IGFzTGluZWFyRGlzcGxheVAzKGNvbnN0IENvbG9yQ29t
cG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07
Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29u
c3QgTGluZWFyRGlzcGxheVAzPFQ+JiBhLCBjb25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGIpCiB7
CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIp
OwpAQCAtMjQ5LDE4ICs0MzUsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJv
b2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGFiIDogQ29sb3JXaXRoQWxw
aGFIZWxwZXI8TGFiPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNp
bmcgTW9kZWwgPSBMYWJNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JT
cGFjZSA9IENvbG9yU3BhY2U6OkxhYjsKIAotICAgIGNvbnN0ZXhwciBMYWIoVCBsaWdodG5lc3Ms
IFQgYSwgVCBiLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBj
b25zdGV4cHIgTGFiKFQgbGlnaHRuZXNzLCBUIGEsIFQgYiwgVCBhbHBoYSA9IEFscGhhVHJhaXRz
PFQ+OjpvcGFxdWUpCiAgICAgICAgIDogbGlnaHRuZXNzIHsgbGlnaHRuZXNzIH0KICAgICAgICAg
LCBhIHsgYSB9CiAgICAgICAgICwgYiB7IGIgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQog
ICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3Rl
eHByIExhYigpCi0gICAgICAgIDogTGFiIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1
ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGFiIHsgMCwgMCwg
MCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjc1LDExICs0NjMsNiBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMu
YSwgYy5iLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBM
YWI8VD4gYXNMYWIoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7
IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYWI8VD4mIGEsIGNvbnN0IExhYjxUPiYgYikK
IHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMo
Yik7CkBAIC0yOTMsMTcgKzQ3NiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JXaXRo
QWxwaGFIZWxwZXI8TENIQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAg
IHVzaW5nIE1vZGVsID0gTENITW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgTENIQShUIGxpZ2h0
bmVzcywgVCBjaHJvbWEsIFQgaHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhW
YWx1ZSkKKyAgICBjb25zdGV4cHIgTENIQShUIGxpZ2h0bmVzcywgVCBjaHJvbWEsIFQgaHVlLCBU
IGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiBsaWdodG5lc3MgeyBs
aWdodG5lc3MgfQogICAgICAgICAsIGNocm9tYSB7IGNocm9tYSB9CiAgICAgICAgICwgaHVlIHsg
aHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydElu
UmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBMQ0hBKCkKLSAgICAgICAgOiBM
Q0hBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
aW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+
OjptaW5WYWx1ZSB9CisgICAgICAgIDogTENIQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9
CiAKQEAgLTMxOCwxMSArNTAzLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcAogICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxw
aGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExDSEE8VD4gYXNMQ0hB
KGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFd
LCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPT0oY29uc3QgTENIQTxUPiYgYSwgY29uc3QgTENIQTxUPiYgYikKIHsKICAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0z
MzYsMTcgKzUxNiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIDogQ29sb3JXaXRoQWxwaGFIZWxw
ZXI8SFNMQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1v
ZGVsID0gSFNMTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgSFNMQShUIGh1ZSwgVCBzYXR1cmF0
aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFsdWUp
CisgICAgY29uc3RleHByIEhTTEEoVCBodWUsIFQgc2F0dXJhdGlvbiwgVCBsaWdodG5lc3MsIFQg
YWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGh1ZSB7IGh1ZSB9CiAg
ICAgICAgICwgc2F0dXJhdGlvbiB7IHNhdHVyYXRpb24gfQogICAgICAgICAsIGxpZ2h0bmVzcyB7
IGxpZ2h0bmVzcyB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBh
c3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgSFNMQSgpCi0gICAg
ICAgIDogSFNMQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0
czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRy
YWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IEhTTEEgeyAwLCAwLCAwLCAwIH0KICAgICB7
CiAgICAgfQogCkBAIC0zNjMsMTEgKzU0NSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0
bmVzcywgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgSFNM
QTxUPiBhc0hTTEEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7
IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIU0xBPFQ+JiBhLCBjb25zdCBIU0xBPFQ+JiBi
KQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50
cyhiKTsKQEAgLTM4Miw4ICs1NTksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyCiAvLyBGSVhNRTogV2hlbiBDb2xvckNvbXBvbmVudHMgc3VwcG9ydHMgbW9yZSB0
aGFuIGxlbmd0aCA9PSA0LCBhZGQgY29udmVyc2lvbiB0by9mcm9tIENvbG9yQ29tcG9uZW50czxU
PiBmb3IgQ01ZS0EKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDTVlLQSA6IENvbG9yV2l0
aEFscGhhSGVscGVyPENNWUtBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Cisg
ICAgdXNpbmcgTW9kZWwgPSBDTVlLTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgQ01ZS0EoVCBj
eWFuLCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0gQ29tcG9uZW50VHJh
aXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgQ01ZS0EoVCBjeWFuLCBUIG1hZ2VudGEs
IFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAg
ICAgICAgOiBjeWFuIHsgY3lhbiB9CiAgICAgICAgICwgbWFnZW50YSB7IG1hZ2VudGEgfQogICAg
ICAgICAsIHllbGxvdyB7IHllbGxvdyB9CkBAIC0zOTMsNyArNTcxLDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENNWUtBIDogQ29sbwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBDTVlL
QSgpCi0gICAgICAgIDogQ01ZS0EgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21w
b25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBD
b21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
IH0KKyAgICAgICAgOiBDTVlLQSB7IDAsIDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAg
LTQxNywxNyArNTk1LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFhZWkEgOiBDb2xvcldpdGhBbHBoYUhl
bHBlcjxYWVpBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcg
TW9kZWwgPSBYWVpNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBYWVpBKFQgeCwgVCB5LCBUIHos
IFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBY
WVpBKFQgeCwgVCB5LCBUIHosIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAg
ICAgICA6IHggeyB4IH0KICAgICAgICAgLCB5IHsgeSB9CiAgICAgICAgICwgeiB7IHogfQogICAg
ICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhp
cyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIFhZWkEoKQotICAgICAgICA6IFhZWkEgeyBDb21w
b25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBD
b21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
IH0KKyAgICAgICAgOiBYWVpBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtNDQy
LDExICs2MjIsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAg
ICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgWFlaQTxUPiBhc1hZWkEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+
JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBYWVpBPFQ+
JiBhLCBjb25zdCBYWVpBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhh
KSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTQ1NywyMSArNjMyLDIyIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKICAgICByZXR1cm4gIShhID09IGIpOwog
fQogCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+IGNvbnN0ZXhwciBk
ZWNsdHlwZShhdXRvKSBjYWxsV2l0aENvbG9yVHlwZShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4m
IGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRnVuY3RvciYmIGZ1bmN0b3IpCiB7
CiAgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgot
ICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3Ip
LCBhc1NSR0JBKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPFQ+Pihj
b21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJl
dHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzTGluZWFy
U1JHQkEoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8TGluZWFyU1JHQkE8VD4+
KGNvbXBvbmVudHMpKTsKICAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKLSAgICAgICAg
cmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNEaXNw
bGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8RGlzcGxheVAzPFQ+Pihj
b21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpMYWI6Ci0gICAgICAgIHJldHVybiBz
dGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzTGFiKGNvbXBvbmVu
dHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihm
dW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPExhYjxUPj4oY29tcG9uZW50cykpOwogICAgIH0K
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6
OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzU1JHQkEoY29tcG9uZW50cykpOworICAgIHJl
dHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIG1ha2VGcm9t
Q29tcG9uZW50czxTUkdCQTxUPj4oY29tcG9uZW50cykpOwogfQogCiAvLyBQYWNrZWQgQ29sb3Ig
Rm9ybWF0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw3ICs3OCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkcKICAg
ICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1NSkKICAgICAgICAg
cmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KGZh
c3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVCeTI1NShnICogYSksIGZhc3REaXZpZGVC
eTI1NShiICogYSksIGEpOworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0
QWxwaGE8U1JHQkE8dWludDhfdD4+KGZhc3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVC
eTI1NShnICogYSksIGZhc3REaXZpZGVCeTI1NShiICogYSksIGEpOwogfQogCiBTUkdCQTx1aW50
OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90PiBjb2xvcikKQEAgLTg4LDcg
Kzg4LDcgQEAgU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQgogICAgICAg
ICByZXR1cm4geyAwLCAwLCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1KQogICAgICAgICByZXR1
cm4gY29sb3I7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oZmFzdERp
dmlkZUJ5MjU1KHIgKiBhICsgMjU0KSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhICsgMjU0KSwgZmFz
dERpdmlkZUJ5MjU1KGIgKiBhICsgMjU0KSwgYSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0Nv
bXBvbmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4oZmFzdERpdmlkZUJ5MjU1KHIgKiBh
ICsgMjU0KSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhICsgMjU0KSwgZmFzdERpdmlkZUJ5MjU1KGIg
KiBhICsgMjU0KSwgYSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVtdWx0aXBs
aWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90IGMsIHVpbnQ4X3QgYSkKQEAgLTEwMSw3ICsxMDEsNyBA
QCBTUkdCQTx1aW50OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWluCiAgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvcjsKICAgICBpZiAoIWEgfHwgYSA9PSAyNTUpCiAgICAgICAgIHJldHVy
biBjb2xvcjsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPih1bnByZW11
bHRpcGxpZWRDb21wb25lbnRCeXRlKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRl
KGcsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGIsIGEpLCBhKTsKKyAgICByZXR1
cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+Pih1bnBy
ZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRC
eXRlKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGIsIGEpLCBhKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSwyMiArNDUsMTQgQEAgU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29y
aW5nKFNSRwogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4pOwogU1JHQkE8dWludDhfdD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+KTsKIAot
dWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0KTsKK3VpbnQ4X3Qg
Y29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZShmbG9hdCk7CiAKLXVpbnQ4X3Qg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCk7Ci1jb25zdGV4cHIgZmxvYXQgY29udmVydFRv
Q29tcG9uZW50RmxvYXQodWludDhfdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRC
eXRlQWxwaGFUbyh1aW50OF90KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEZsb2F0
QWxwaGFUbyhmbG9hdCk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbXBvbmVudFR5cGU+IGNvbnN0
ZXhwciB1aW50OF90IGNsYW1wVG9Db21wb25lbnRCeXRlKENvbXBvbmVudFR5cGUpOwotdGVtcGxh
dGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29uc3RleHByIGZsb2F0IGNsYW1wVG9Db21wb25l
bnRGbG9hdChDb21wb25lbnRUeXBlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
Q29tcG9uZW50Qnl0ZVRvKHVpbnQ4X3QpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
Q29tcG9uZW50RmxvYXRUbyhmbG9hdCk7Ci0KLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0
eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+Jik7Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFt
ZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0
VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+Jik7Ci0KLXRlbXBsYXRl
PHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBv
bmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWludDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5
dGVzKENvbXBvbmVudFR5cGUuLi4pOwotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4gQ29tcG9uZW50VHlwZT4gY29uc3RleHByIENvbG9y
VHlwZTxmbG9hdD4gY2xhbXBUb0NvbXBvbmVudEZsb2F0cyhDb21wb25lbnRUeXBlLi4uKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IFQgY29udmVydFRvKGNvbnN0IFUmKTsKK3Rl
bXBsYXRlPD4gU1JHQkE8ZmxvYXQ+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTx1aW50OF90PiYpOwor
dGVtcGxhdGU8PiBTUkdCQTx1aW50OF90PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8ZmxvYXQ+Jik7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JU
eXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUm
LCBGdW5jdG9yJiYpOwogCkBAIC03Nyw3MSArNjksNDkgQEAgY29uc3RleHByIHVpbnQxNl90IGZh
c3RNdWx0aXBseUJ5MjU1KHVpbgogY29uc3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1
aW50MTZfdCk7CiAKIAotaW5saW5lIHVpbnQ4X3QgY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50
Qnl0ZShmbG9hdCBmKQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYpLCAw
bCwgMjU1bCk7Ci19Ci0KLWlubGluZSB1aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZmxv
YXQgZikKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZChmICogMjU1LjBmKSwg
MGwsIDI1NWwpOwotfQotCi1jb25zdGV4cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQo
dWludDhfdCBieXRlKQoraW5saW5lIHVpbnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRU
b1NSR0JBQnl0ZShmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYnl0ZSAvIDI1NS4wZjsKKyAg
ICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSksIDBsLCAyNTVsKTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xhbXBU
b0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50VHlwZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0
ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4oY29tcG9uZW50LCAwLCAyNTUpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVu
dEZsb2F0KENvbXBvbmVudFR5cGUgY29tcG9uZW50KQotewotICAgIHJldHVybiBzdGQ6OmNsYW1w
PENvbXBvbmVudFR5cGU+KGNvbXBvbmVudCwgMCwgMSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3Rl
eHByIHVpbnQ4X3QgY29udmVydENvbXBvbmVudEJ5dGVUbzx1aW50OF90Pih1aW50OF90IHZhbHVl
KQordGVtcGxhdGU8PiBjb25zdGV4cHIgdWludDhfdCBjb252ZXJ0Qnl0ZUFscGhhVG88dWludDhf
dD4odWludDhfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPD4g
Y29uc3RleHByIGZsb2F0IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZmxvYXQ+KHVpbnQ4X3QgdmFs
dWUpCit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+
KHVpbnQ4X3QgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHZh
bHVlKTsKKyAgICByZXR1cm4gdmFsdWUgLyAyNTUuMGY7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5l
IHVpbnQ4X3QgY29udmVydENvbXBvbmVudEZsb2F0VG88dWludDhfdD4oZmxvYXQgdmFsdWUpCit0
ZW1wbGF0ZTw+IGlubGluZSB1aW50OF90IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oZmxv
YXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOwor
ICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1
NWwpOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252ZXJ0Q29tcG9uZW50RmxvYXRU
bzxmbG9hdD4oZmxvYXQgdmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252ZXJ0Rmxv
YXRBbHBoYVRvPGZsb2F0PihmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBv
bmVudEZsb2F0KHZhbHVlKTsKKyAgICByZXR1cm4gY2xhbXBlZEFscGhhKHZhbHVlKTsKIH0KIAot
dGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIENv
bG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8
ZmxvYXQ+JiBjb2xvcikKK3RlbXBsYXRlPD4gaW5saW5lIFNSR0JBPGZsb2F0PiBjb252ZXJ0VG8o
Y29uc3QgU1JHQkE8dWludDhfdD4mIGNvbG9yKQogewotICAgIGF1dG8gY29tcG9uZW50cyA9IGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKTsKLSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRC
eXRlKGNvbXBvbmVudHNbMF0pLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMV0p
LCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9Db21wb25l
bnRCeXRlKGNvbXBvbmVudHNbM10pIH07Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUZsb2F0
ID0gW10odWludDhfdCB2YWx1ZSkgLT4gZmxvYXQgeworICAgICAgICByZXR1cm4gdmFsdWUgLyAy
NTUuMGY7CisgICAgfTsKIAotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENv
bG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZTxmbG9hdD4gY29udmVydFRvQ29tcG9uZW50Rmxv
YXRzKGNvbnN0IENvbG9yVHlwZTx1aW50OF90PiYgY29sb3IpCi17CiAgICAgYXV0byBjb21wb25l
bnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0Nv
bXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMF0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21w
b25lbnRzWzFdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1syXSksIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbM10pIH07CisgICAgcmV0dXJuIHsgY29udmVy
dFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzBdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25l
bnRzWzFdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvU1JH
QkFGbG9hdChjb21wb25lbnRzWzNdKSB9OwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFt
ZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4
cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNsYW1wVG9Db21wb25lbnRCeXRlcyhDb21wb25lbnRUeXBl
Li4uIGNvbXBvbmVudHMpCit0ZW1wbGF0ZTw+IGlubGluZSBTUkdCQTx1aW50OF90PiBjb252ZXJ0
VG8oY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29t
cG9uZW50Qnl0ZShjb21wb25lbnRzKS4uLiB9OwotfQorICAgIGF1dG8gY29udmVydFRvU1JHQkFC
eXRlID0gW10oZmxvYXQgdmFsdWUpIC0+IHVpbnQ4X3QgeworICAgICAgICByZXR1cm4gc3RkOjpj
bGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSAqIDI1NS4wZiksIDBsLCAyNTVsKTsKKyAgICB9OwogCi10
ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZS4u
LiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFtcFRvQ29tcG9u
ZW50RmxvYXRzKENvbXBvbmVudFR5cGUuLi4gY29tcG9uZW50cykKLXsKLSAgICByZXR1cm4geyBj
bGFtcFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50cykuLi4gfTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JH
QkFCeXRlKGNvbXBvbmVudHNbMF0pLCBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1sxXSks
IGNvbnZlcnRUb1NSR0JBQnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFCeXRlKGNv
bXBvbmVudHNbM10pIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVu
dChjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBGdW5jdG9yJiYgZnVuY3RvcikKQEAgLTE1Nyw1MCAr
MTI3LDYxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnUKIHRlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBjb2xvcldpdGhPdmVy
cmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEp
CiB7CiAgICAgYXV0byBjb3B5ID0gY29sb3I7Ci0gICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21w
b25lbnRCeXRlVG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIGNv
cHkuYWxwaGEgPSBjb252ZXJ0Qnl0ZUFscGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1cm4gY29weTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29u
c3QgQ29sb3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNv
cHkgPSBjb2xvcjsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVj
bHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252
ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJp
ZGVBbHBoYSk7CiAgICAgcmV0dXJuIGNvcHk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhh
KGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBh
dXRvIGNvcHkgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFtd
IChhdXRvIGNvbXBvbmVudCkgewotICAgICAgICByZXR1cm4gQ29tcG9uZW50VHJhaXRzPGRlY2x0
eXBlKGNvbXBvbmVudCk+OjptYXhWYWx1ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsKLSAgICBjb3B5
LmFscGhhID0gY29udmVydENvbXBvbmVudEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3Zl
cnJpZGVBbHBoYSk7Ci0gICAgcmV0dXJuIGNvcHk7CisgICAgc3RhdGljX2Fzc2VydChDb2xvclR5
cGU6Ok1vZGVsOjppc0ludmVydGlibGUpOworCisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpOworICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBjb3B5W2ldID0gQ29sb3JU
eXBlOjpNb2RlbDo6cmFuZ2VzW2ldLm1heCAtIGNvbXBvbmVudHNbaV07CisgICAgY29weVszXSA9
IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92
ZXJyaWRlQWxwaGEpOworCisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+
KGNvcHkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZl
cnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0
IG92ZXJyaWRlQWxwaGEpCiB7Ci0gICAgYXV0byBjb3B5ID0gY29sb3JCeU1vZGlmaW5nRWFjaE5v
bkFscGhhQ29tcG9uZW50KGNvbG9yLCBbXSAoYXV0byBjb21wb25lbnQpIHsKLSAgICAgICAgcmV0
dXJuIENvbXBvbmVudFRyYWl0czxkZWNsdHlwZShjb21wb25lbnQpPjo6bWF4VmFsdWUgLSBjb21w
b25lbnQ7Ci0gICAgfSk7Ci0gICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRGbG9hdFRv
PGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKLSAgICByZXR1cm4gY29weTsK
KyAgICBzdGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CisKKyAg
ICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBj
b3B5ID0gY29tcG9uZW50czsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kp
CisgICAgICAgIGNvcHlbaV0gPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbaV0ubWF4IC0gY29t
cG9uZW50c1tpXTsKKyAgICBjb3B5WzNdID0gY29udmVydEZsb2F0QWxwaGFUbzx0eXBlbmFtZSBD
b2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOworCisgICAgcmV0dXJuIG1h
a2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xv
cikKIHsKLSAgICBjb25zdGV4cHIgYXV0byBtaW4gPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWluVmFsdWU7Ci0gICAgY29uc3RleHByIGF1dG8g
bWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46
Om1heFZhbHVlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj4pOwogCiAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7Ci0gICAgcmV0dXJu
IGMxID09IG1pbiAmJiBjMiA9PSBtaW4gJiYgYzMgPT0gbWluICYmIGFscGhhID09IG1heDsKKyAg
ICBjb25zdGV4cHIgYXV0byByYW5nZXMgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXM7CisgICAg
cmV0dXJuIGMxID09IHJhbmdlc1swXS5taW4gJiYgYzIgPT0gcmFuZ2VzWzFdLm1pbiAmJiBjMyA9
PSByYW5nZXNbMl0ubWluICYmIGFscGhhID09IEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlw
ZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0g
ICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlw
ZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19z
YW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPj4pOwogCiAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0g
Y29sb3I7Ci0gICAgcmV0dXJuIGMxID09IG1heCAmJiBjMiA9PSBtYXggJiYgYzMgPT0gbWF4ICYm
IGFscGhhID09IG1heDsKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZXMgPSBDb2xvclR5cGU6Ok1v
ZGVsOjpyYW5nZXM7CisgICAgcmV0dXJuIGMxID09IHJhbmdlc1swXS5tYXggJiYgYzIgPT0gcmFu
Z2VzWzFdLm1heCAmJiBjMyA9PSByYW5nZXNbMl0ubWF4ICYmIGFscGhhID09IEFscGhhVHJhaXRz
PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KIAogY29uc3Rl
eHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkocmV2aXNp
b24gMjcxNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3
ICs4MCw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXAKICAgICAg
ICAgY29tcG9uZW50QXJyYXlbaV0gPSBjb21wb25lbnQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGNv
bnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgY29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVu
dEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29tcG9uZW50QXJyYXlbMF0gfSk7CisgICAg
cmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb21wb25lbnRBcnJheVsx
XSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBvbmVudEFycmF5WzNdLCBjb21wb25lbnRBcnJheVsw
XSB9KTsKIH0KIAogUmVmPEluYmFuZEdlbmVyaWNDdWU+IEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1JlZiBhdHRyaWJ1dGVk
U3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkocmV2aXNp
b24gMjcxNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcg
QEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQwogICAgICAgICAgICAg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBp
IC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gcmdiVG9MaW5lYXJDb2xvckNvbXBv
bmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSByZ2JUb0xpbmVhckNvbG9yQ29t
cG9uZW50Q2xhbXBpbmcoY29sb3IpOwogICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBhcnJheTsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1DCiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3Qs
IDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBp
KyspIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAg
ICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAg
ICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xv
cik7CiAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3Vu
ZChjb2xvciAqIDI1NSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFycmF5
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JD
Ry5jcHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRp
YyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcm91bmRBbmQKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNS
R0JBIHsgciwgZywgYiwgYSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+
PihTUkdCQSB7IHIsIGcsIGIsIGEgfSk7CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNv
bG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1h
Z2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw3ICs2MSw3IEBAIENvbG9yIE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IK
ICAgICBpZiAoIXBpeGVsWzNdKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50Qmxh
Y2s7CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSAq
IDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1
NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVu
dHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwg
cGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4
ZWxbM10pOwogfQogCiB2b2lkIE5hdGl2ZUltYWdlOjpjbGVhclN1YmltYWdlcygpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkxLDE5ICs5MSwxOSBAQCBib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb246OnRyCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEdSQVlTQ0FMRTog
ewotICAgICAgICBjb2xvciA9IGFzU1JHQkEoZ3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91bnQp
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwor
ICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlzY2Fs
ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNh
c2UgU0VQSUE6IHsKLSAgICAgICAgY29sb3IgPSBhc1NSR0JBKHNlcGlhQ29sb3JNYXRyaXgobV9h
bW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KHNl
cGlhQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
Y2FzZSBIVUVfUk9UQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShodWVSb3RhdGVDb2xv
ck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzPFNSR0JB
PGZsb2F0Pj4oaHVlUm90YXRlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgY2FzZSBTQVRVUkFURTogewotICAgICAgICBjb2xvciA9IGFzU1JHQkEo
c2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlRnJvbUNv
bXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihzYXR1cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTE3Miw3ICsxNzIsNyBA
QCBib29sIEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpCiAgICAgfQogICAgIGNh
c2UgQlJJR0hUTkVTUzoKICAgICAgICAgY29sb3IgPSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxw
aGFDb21wb25lbnQoY29sb3IsIFsmXShmbG9hdCBjb21wb25lbnQpIHsKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1heDxmbG9hdD4obV9hbW91bnQgKiBjb21wb25lbnQsIDAuMGYpOworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXA8ZmxvYXQ+KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBm
LCAxLjBmKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6
CkBAIC0yMjQsMTUgKzIyNCw3NSBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBJbnZlcnRMaWdo
dG5lc3NGCiAgICAgcmV0dXJuIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRl
KCk7CiB9CiAKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCBsaWtlbHkganVzdCB1c2UgaHVlUm90YXRl
Q29sb3JNYXRyaXgoYW1vdW50KS4KK3N0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGh1ZVJv
dGF0ZShjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xvciwgZmxvYXQgYW1vdW50KQor
eworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOworCisgICAgYXV0byBbbWluLCBt
YXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOworICAgIGZsb2F0IGNocm9tYSA9IG1heCAt
IG1pbjsKKworICAgIGZsb2F0IGxpZ2h0bmVzcyA9IDAuNWYgKiAobWF4ICsgbWluKTsKKyAgICBm
bG9hdCBzYXR1cmF0aW9uOworICAgIGlmICghY2hyb21hKQorICAgICAgICBzYXR1cmF0aW9uID0g
MDsKKyAgICBlbHNlIGlmIChsaWdodG5lc3MgPD0gMC41ZikKKyAgICAgICAgc2F0dXJhdGlvbiA9
IChjaHJvbWEgLyAobWF4ICsgbWluKSk7CisgICAgZWxzZQorICAgICAgICBzYXR1cmF0aW9uID0g
KGNocm9tYSAvICgyLjBmIC0gKG1heCArIG1pbikpKTsKKworICAgIGlmICghc2F0dXJhdGlvbikK
KyAgICAgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGxpZ2h0bmVzcywgYWxwaGEg
fTsKKworICAgIGZsb2F0IGh1ZTsKKyAgICBpZiAoIWNocm9tYSkKKyAgICAgICAgaHVlID0gMDsK
KyAgICBlbHNlIGlmIChtYXggPT0gcikKKyAgICAgICAgaHVlID0gKDYwLjBmICogKChnIC0gYikg
LyBjaHJvbWEpKSArIDM2MC4wZjsKKyAgICBlbHNlIGlmIChtYXggPT0gZykKKyAgICAgICAgaHVl
ID0gKDYwLjBmICogKChiIC0gcikgLyBjaHJvbWEpKSArIDEyMC4wZjsKKyAgICBlbHNlCisgICAg
ICAgIGh1ZSA9ICg2MC4wZiAqICgociAtIGcpIC8gY2hyb21hKSkgKyAyNDAuMGY7CisKKyAgICBp
ZiAoaHVlID49IDM2MC4wZikKKyAgICAgICAgaHVlIC09IDM2MC4wZjsKKworICAgIGh1ZSAvPSAz
NjAuMGY7CisKKyAgICAvLyBQZXJmb3JtIHJvdGF0aW9uLgorICAgIGh1ZSA9IHN0ZDo6Zm1vZCho
dWUgKyBhbW91bnQsIDEuMGYpOworCisgICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0gMC41
ZiA/IGxpZ2h0bmVzcyAqICgxLjBmICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1cmF0
aW9uIC0gbGlnaHRuZXNzICogc2F0dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBs
aWdodG5lc3MgLSB0ZW1wMjsKKyAgICAKKyAgICBodWUgKj0gNi4wZjsgLy8gY2FsY0h1ZSgpIHdh
bnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgorCisgICAgLy8gSHVlIGlzIGluIHRoZSByYW5nZSAw
LTYsIG90aGVyIGFyZ3MgaW4gMC0xLgorICAgIGF1dG8gY2FsY0h1ZSA9IFtdKGZsb2F0IHRlbXAx
LCBmbG9hdCB0ZW1wMiwgZmxvYXQgaHVlVmFsKSB7CisgICAgICAgIGlmIChodWVWYWwgPCAwLjBm
KQorICAgICAgICAgICAgaHVlVmFsICs9IDYuMGY7CisgICAgICAgIGVsc2UgaWYgKGh1ZVZhbCA+
PSA2LjBmKQorICAgICAgICAgICAgaHVlVmFsIC09IDYuMGY7CisgICAgICAgIGlmIChodWVWYWwg
PCAxLjBmKQorICAgICAgICAgICAgcmV0dXJuIHRlbXAxICsgKHRlbXAyIC0gdGVtcDEpICogaHVl
VmFsOworICAgICAgICBpZiAoaHVlVmFsIDwgMy4wZikKKyAgICAgICAgICAgIHJldHVybiB0ZW1w
MjsKKyAgICAgICAgaWYgKGh1ZVZhbCA8IDQuMGYpCisgICAgICAgICAgICByZXR1cm4gdGVtcDEg
KyAodGVtcDIgLSB0ZW1wMSkgKiAoNC4wZiAtIGh1ZVZhbCk7CisgICAgICAgIHJldHVybiB0ZW1w
MTsKKyAgICB9OworCisgICAgcmV0dXJuIHsKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVtcDIs
IGh1ZSArIDIuMGYpLAorICAgICAgICBjYWxjSHVlKHRlbXAxLCB0ZW1wMiwgaHVlKSwKKyAgICAg
ICAgY2FsY0h1ZSh0ZW1wMSwgdGVtcDIsIGh1ZSAtIDIuMGYpLAorICAgICAgICBhbHBoYQorICAg
IH07Cit9CisKIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1D
b2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gaHNsYSA9IHRvSFNM
QShjb2xvcik7Ci0gICAgCi0gICAgLy8gUm90YXRlIHRoZSBodWUgMTgwZGVnLgotICAgIGhzbGEu
aHVlID0gc3RkOjpmbW9kKGhzbGEuaHVlICsgMC41ZiwgMS4wZik7Ci0gICAgCi0gICAgLy8gQ29u
dmVydCBiYWNrIHRvIFJHQi4KLSAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQSA9IHRvU1JHQkEoaHNs
YSk7CisgICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90YXRlKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKSwgMC41Zik7CiAgICAgCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJp
eC4gU2VlIHJkYXI6Ly9wcm9ibGVtLzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRyaXggd2FzIGRl
cml2ZWQuCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01vZGVNYXRyaXgg
ewpAQCAtMjQwLDcgKzMwMCw3IEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9u
Ojp0cmEKICAgICAgICAgMC4wMzBmLCAtMC43NDFmLCAtMC4wODlmLCAwLjBmLCAxLjBmLAogICAg
ICAgICAwLjAzMGYsICAwLjA1OWYsIC0wLjg5MGYsIDAuMGYsIDEuMGYKICAgICB9OwotICAgIGNv
bG9yID0gYXNTUkdCQSh0b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGh1ZVJvdGF0ZWRTUkdCQSkpKTsKKyAgICBjb2xvciA9IG1ha2VD
bGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+Pih0b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjUyLDE2ICszMTIsMTEgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NG
aWx0ZXJPcGVyYXRpb246OmludgogICAgICAgICAtMC4wNDlmLCAtMS4zNDdmLCAgMC4xNDZmLCAw
LjBmLCAxLjI1ZiwKICAgICAgICAgLTAuMDQ5ZiwgLTAuMDk3ZiwgLTEuMTA0ZiwgMC4wZiwgMS4y
NWYKICAgICB9OwotICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGUgPSBhc1NSR0JBKHRvTGln
aHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yKSkpOwotCi0gICAgLy8gQ29udmVydCB0byBIU0wuCi0gICAgYXV0byBoc2xhID0gdG9I
U0xBKGNvbnZlcnRlZFRvTGlnaHRNb2RlKTsKKyAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRNb2Rl
Q29tcG9uZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSk7CiAKLSAgICAvLyBIdWUgcm90YXRlIGJ5IDE4MGRl
Zy4KLSAgICBoc2xhLmh1ZSA9IHN0ZDo6Zm1vZChoc2xhLmh1ZSArIDAuNWYsIDEuMGYpOworICAg
IGF1dG8gaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShjb252ZXJ0ZWRUb0xp
Z2h0TW9kZUNvbXBvbmVudHMsIDAuNWYpOwogCi0gICAgLy8gQW5kIHJldHVybiBSR0IuCi0gICAg
Y29sb3IgPSB0b1NSR0JBKGhzbGEpOworICAgIGNvbG9yID0gbWFrZUNsYW1waW5nQ29tcG9uZW50
czxTUkdCQTxmbG9hdD4+KGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3MTYx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBib29sIEZpbHRl
ck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9y
KTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIEZpbHRlck9wZXJh
dGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsKKyAg
ICBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29uc3Qg
R2RrUkdCQSYgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci5hbHBoYSkgfSkpCisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhf
dD4+KFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhhKSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjcx
NjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMyArOTIsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JB
PHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAgICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAgICAg
ICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICAgICAgcmV0
dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhl
bFsyXSwgcGl4ZWxbM10pOworICAgICAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxT
UkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwog
ICAgIH0KIAogICAgIFtyZ2JDb2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5D
b21wb25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhT
UkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0
YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21w
b25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZy
b21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjcx
NjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252
ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNv
bG9yLmEgfSkpCisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsg
Y29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRDo6c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNv
bG9yKQogewotICAgIGF1dG8gY29sb3JLZXkgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBjb2xv
cktleSA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xvci5n
LCBjb2xvci5iLCBjb2xvci5hIH0pOwogCiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBp
ZiAoIW1femVyb0JydXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklP
Uy5tbQkocmV2aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Nv
bG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJv
bVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25l
bnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhh
XTsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19j
YXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25l
bnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0
PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEg
eyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdy
ZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAy
NzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVu
dUJhY2tncm91bmRDb2xvCiAgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2NyZWVu
UmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBv
bmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7
CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHBpeGVs
WzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIHBpeGVsWzNdKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhl
bWVNYWM6OnN5c3RlbUNvbG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJRCwgT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRp
dmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgICAgICBmbG9hdCBi
bHVlID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1
ZSwgc2ltcGxlVG8uYmx1ZSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5p
bWF0ZWQuYmx1ZSk7CiAgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVU
b0F0RW5kT2ZEdXJhdGlvbi5hbHBoYSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAK
LSAgICAgICAgYW5pbWF0ZWQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHN0ZDo6bHJv
dW5kKHJlZCksIHN0ZDo6bHJvdW5kKGdyZWVuKSwgc3RkOjpscm91bmQoYmx1ZSksIHN0ZDo6bHJv
dW5kKGFscGhhKSk7CisgICAgICAgIGFuaW1hdGVkID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxT
UkdCQTx1aW50OF90Pj4oc3RkOjpscm91bmQocmVkKSwgc3RkOjpscm91bmQoZ3JlZW4pLCBzdGQ6
Omxyb3VuZChibHVlKSwgc3RkOjpscm91bmQoYWxwaGEpKTsKICAgICB9CiAKICAgICBPcHRpb25h
bDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFuY2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJv
bSwgY29uc3QgU3RyaW5nJiB0bykgY29uc3Qgb3ZlcnJpZGUKQEAgLTEyMCw3ICsxMjAsNyBAQCBw
cml2YXRlOgogICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhf
dD4oKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiBy
ZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0gICAgICAgIG1fdG8gPSBjbGFtcFRvQ29tcG9uZW50Qnl0
ZXM8U1JHQkE+KHNpbXBsZVRvLnJlZCArIHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVlbiAr
IHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOworICAg
ICAgICBtX3RvID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc2ltcGxl
VG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVl
biwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IENvbG9yIGNvbG9yRnJvbVN0cmluZyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wMS0xOSAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5nIGxvZ2ljIHRv
IGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3Bw
OgorICAgICAgICAod2Via2l0Q29sb3JUb1dlYkNvcmVDb2xvcik6CisgICAgICAgIFVwZGF0ZSB0
byB1c2UgbmV3IGNvbnZlcnRUbzw+IGZ1bmN0aW9ucy4KKwogMjAyMS0wMS0xOSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04o
cjI2OTg2NSkgTWFpbCdzIGNvbnRleHQgbWVudSB3aGVuIHJpZ2h0IGNsaWNraW5nIG9uIGEgbGlu
ayBkb2VzIG5vdCBjb250YWluIGNvcnJlY3QgZW50cmllcwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJldmlzaW9uIDI3MTYxOSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIEdfREVGSU5FX0JPWEVEX1RZUEUoV2ViS2l0Q29s
b3IsIHdlYmtpdF8KIAogY29uc3QgV2ViQ29yZTo6Q29sb3Igd2Via2l0Q29sb3JUb1dlYkNvcmVD
b2xvcihXZWJLaXRDb2xvciogY29sb3IpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNvbnZlcnRU
b0NvbXBvbmVudEJ5dGVzKFdlYkNvcmU6OlNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9y
LT5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmdyZWVuKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGNvbG9yLT5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5hbHBoYSkgfSk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OmNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oV2ViQ29yZTo6U1JH
QkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihj
b2xvci0+Z3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmJsdWUpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oY29sb3ItPmFscGhhKSB9KTsKIH0KIAogdm9pZCB3ZWJraXRDb2xvckZpbGxGcm9t
V2ViQ29yZUNvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiB3ZWJDb3JlQ29sb3IsIFdlYktpdENv
bG9yKiBjb2xvcikKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI3MTYxOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIxLTAxLTE4ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcgbG9naWMgdG8gYmUgbW9y
ZSBjb25zaXN0ZW50IGFuZCBjbGVhcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjIwNzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBVcGRhdGUgdGVzdHMgdG8gdXNlIG5ldyBjb252ZXJ0
VG88PiBmdW5jdGlvbnMuCisKIDIwMjEtMDEtMTkgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRA
YXBwbGUuY29tPgogCiAgICAgICAgIFtjb21taXQtcXVldWVdIENhY2hlIGNyZWRlbnRpYWxzIGZv
ciBodHRwcyBpbnN0ZWFkIG9mIGh0dHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKICAgICAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3Mp
OwogICAgIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBj
b252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNU
X0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgVEVT
VChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAg
YXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdC
QShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsK
IH0KIApAQCAtNzgsNyArNzgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiAKICAgICBF
WFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwog
Ci0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRv
U1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRU
bzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29s
b3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtOTQsNyArOTQsNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9HcmVlbikKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3Mo
KSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0g
Y29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJv
dW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFD
b2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBA
IC0xMTAsNyArMTEwLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIAogICAgIEVYUEVD
VF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdC
QShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwg
cm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMjYsNyArMTI2LDcgQEAgVEVTVChDb2xvciwg
UkdCVG9IU0xfRGFya0dyYXkpCiAgICAgCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0
bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29s
b3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1
dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEo
aHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9
CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsK
IAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0
b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0
VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNv
bG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBURVNUKENv
bG9yLCBSR0JUb0hTTF9MaWdodEdyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAg
YXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdC
QShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsK
IH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29s
b3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkK
ICAgICB9CiAKICAgICBhdXRvIGNvbXBvbmVudEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUs
IDEyOCwgNjMsIDEyNyB9OwotICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dHMoY29tcG9uZW50Qnl0ZXMpIH07CisgICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUbzxTUkdCQTxm
bG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9OwogICAgIENvbG9yIHJnYjIgeyBjb21wb25lbnRCeXRl
cyB9OwogICAgIEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKICAgICBFWFBFQ1RfTkUocmdiMiwgcmdi
MSk7CkBAIC0xMzgsNyArMTM4LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogICAgIH0K
IAogICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2
MywgMTI3IH07Ci0gICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb21w
b25lbnRCeXRlcykgfTsKKyAgICBDb2xvciByZ2IxIHsgY29udmVydFRvPFNSR0JBPGZsb2F0Pj4o
Y29tcG9uZW50Qnl0ZXMpIH07CiAgICAgQ29sb3IgcmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07CiAg
ICAgRVhQRUNUX05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7CiB9CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQkocmV2aXNpb24gMjcxNjE5
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBXZWJDb3JlOjpDb2xvciBUZXN0UERGUGFnZTo6
Y29sb3JBdFBvaW50CiAKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjazsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y2xhbXBUb0NvbXBvbmVu
dEJ5dGVzPFdlYkNvcmU6OlNSR0JBPihyICogMjU1IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAyNTUg
LyBhLCBhKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6bWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2Vw
dEFscGhhPFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+PihyICogMjU1IC8gYSwgZyAqIDI1NSAvIGEs
IGIgKiAyNTUgLyBhLCBhKTsKIH0KIAogLy8gRG9jdW1lbnRzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417932</attachid>
            <date>2021-01-19 17:33:02 -0800</date>
            <delta_ts>2021-01-20 08:29:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210119173301.patch</filename>
            <type>text/plain</type>
            <size>90839</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTE4ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIG9mIGFkZGluZyBzdXBwb3J0
IGZvciBFeHRlbmRlZC1zUkdCIHRvIGNvbG9yIHR5cGVzLAorICAgICAgICB0aGlzIGFkZHMgY29u
c3RleHByIG1ldGFkYXRhIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb2xvcgorICAg
ICAgICB0eXBlcyB3aXRoIHRoZSBjb3JyZWN0IGNsYW1wZWQgKG9yIHVuY2xhbXBlZCkgdmFsdWVz
IGFuZCBhZG9wdHMgdGhlbQorICAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuCisKKyAg
ICAgICAgLSBSZW1vdmVzICJjb21wb25lbnQgYnl0ZXMiIGFuZCAiY29tcG9uZW50IGZsb2F0cyIg
Y29uY2VwdHMgcmVwbGFjaW5nCisgICAgICAgICAgd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIGNv
bG9yIHR5cGVzIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnM6CisgICAgICAgICAgCisgICAgICAgICAg
ICBjb252ZXJ0VG9Db21wb25lbnRCeXRlcy9jb252ZXJ0VG9Db21wb25lbnRGbG9hdHMgLT4gY29u
dmVydFRvPENvbG9yVHlwZTxUPj4KKyAgICAgICAgICAgIGNsYW1wVG9Db21wb25lbnRCeXRlcy9j
bGFtcFRvQ29tcG9uZW50RmxvYXRzIC0+IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8Q29sb3JUeXBl
PFQ+PgorCisgICAgICAgIC0gQWRkcyBNb2RlbCB0eXBlIGFsaWFzZXMgdG8gZWFjaCBjb2xvciB0
eXBlIHdoaWNoIGNhbiBzcGVjaWZ5IHRyYWl0cyAKKyAgICAgICAgICBmb3IgdGhhdCB0eXBlIG9m
IGNvbG9yLiBUaGVzZSB0cmFpdHMgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgdmFsaWQgCisg
ICAgICAgICAgY29tcG9uZW50IHJhbmdlcyBhbmQgd2hldGhlciB0aGUgY29sb3IgY2FuIGJlIGlu
dmVydGVkLiBNb3JlIHdpbGwgYmUgCisgICAgICAgICAgYWRkZWQgKGxpa2Ugd2hpdGUgcG9pbnQg
YW5kIGJhc2UgY29sb3Igc3BhY2UpIHRvIGhlbHAgc2ltcGxpZnkgdXRpbGl0eSAKKyAgICAgICAg
ICBhbmQgY29udmVyc2lvbiBjb2RlLiAKKworICAgICAgICAtIEFkZHMgYXNzZXJ0aW9ucyB0byBl
YWNoIGNvbG9yIHR5cGUgY29uc3RydWN0b3IgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZAorICAgICAg
ICAgIGFyZSB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlcyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBNb2Rl
bCkuCisKKyAgICAgICAgLSBSZW1vdmVkIGFzRm9vKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYp
IGZ1bmN0aW9ucywgd2hpY2ggd2VyZSBhIGxpdHRsZSAKKyAgICAgICAgICB0byAgc2ltaWxhcmx5
IG5hbWVkIHRvIHRoZSB0b0ZvbygpIGZ1bmN0aW9ucy4gSW5zdGVhZCwgdGhlIGdlbmVyaWMgCisg
ICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZTxUPj4gKG9yIGl0J3MgY2xhbXBp
bmcgdmFyaWFudHMpIGNhbiBiZSB1c2VkCisgICAgICAgICAgdG8gY29udmVydCBmcm9tIENvbG9y
Q29tcG9uZW50cyB0byBjb2xvciB0eXBlcy4KKworICAgICAgICAtIEFkZHMgQWxwaGFUcmFpdHMg
dG8gbW9kZWwgYWxwaGEgdmFsdWVzIGFzIHRoZXNlIGFyZSBjb25zaXN0ZW50IGJldHdlZW4KKyAg
ICAgICAgICBjb2xvciB0eXBlcyBhbmQgb25seSBjaGFuZ2UgYmFzZWQgb24gY29tcG9uZW50IHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6
CisKIDIwMjEtMDEtMTkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNjk4NjUpIE1haWwncyBjb250ZXh0IG1lbnUgd2hl
biByaWdodCBjbGlja2luZyBvbiBhIGxpbmsgZG9lcyBub3QgY29udGFpbiBjb3JyZWN0IGVudHJp
ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI3
MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHN0
YXRpYyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXgKIAogI2lmIEVOQUJMRShJTlBV
VF9UWVBFX0NPTE9SKQogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBj
b2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9yVmFsdWUoKSk7
CiAgICAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYoInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7CiAgICAgfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjcx
NjE5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NDcsNyArMTQ0Nyw3IEBA
IC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmEKICAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkgewot
ICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRv
PFNSR0JBPGZsb2F0Pj4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAl
Ny41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjcx
NjE5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzODUsNyArMjM4NSw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJu
IEAoYmFja2luZ09iamVjdC0+aXNTZWxlY3RlZCgpKTsKIAogICAgICAgICBpZiAoYmFja2luZ09i
amVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0cyhiYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICAg
ICAgYXV0byBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGJhY2tpbmdPYmplY3QtPmNv
bG9yVmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNv
bG9yLmJsdWVdOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkQ1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkKSkKICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29s
b3IuZ3JlZW4pKQogICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9y
LmJsdWUpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgY29udmVydFRv
Q29tcG9uZW50RmxvYXQobV9jb2xvci5hbHBoYSkpKQorICAgICAgICAsIG1fYWxwaGEoY3JlYXRl
V3JhcHBlcihvd25lciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5j
cHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyRmFzdFBhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8
U1JHQkE+KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBl
ZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2Vu
dGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0
byBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMgd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JB
PHVpbnQ4X3Q+LgorICAgICAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1
aW50OF90Pj4ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOyAvLyBGSVhNRTogQWxyZWFkeSBjbGFt
cGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJj
ZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBhbmQgcmVwbGFjZSBjYWxs
IHRvIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+IHdpdGggZGlyZWN0IGNv
bnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KICAgICB9CiAKICAgICAvLyBUcnkgcmdiKCkg
c3ludGF4LgpAQCAtNTA1LDcgKzUwNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlm
IChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
ICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHJlZCwgZ3JlZW4sIGJsdWUp
OyAvLyBGSVhNRTogQWxyZWFkeSBjbGFtcGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVw
ZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4g
dWludDhfdCBhbmQgcmVwbGFjZSBjYWxsIHRvIGNsYW1wVG9Db21wb25lbnRCeXRlcyB3aXRoIGRp
cmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWludDhfdD4uCisgICAgICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PihyZWQsIGdyZWVuLCBibHVlKTsgLy8g
RklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUg
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4
X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4
X3Q+PiB3aXRoIGRpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWludDhfdD4uCiAgICAgfQog
CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI3
MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIHN0YXRpYyB1aW50OF90
IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSAKICAgICBpZiAoaXNQZXJjZW50YWdlKQogICAgICAg
ICB2YWx1ZSA9IHZhbHVlIC8gMTAwLjAgKiAyNTUuMDsKIAotICAgIHJldHVybiBjb252ZXJ0UHJl
c2NhbGVkVG9Db21wb25lbnRCeXRlKHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxl
ZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJH
QlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC03MzksNyArNzM5LDcg
QEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgICAgICB9Ci0gICAgICAg
IGFscGhhQ29tcG9uZW50ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSk7CisgICAgICAg
IGFscGhhQ29tcG9uZW50ID0gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90PihhbHBoYSk7CiAg
ICAgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQpAQCAtNzk0LDcgKzc5NCw3IEBAIHN0YXRp
YyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQo
KSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9u
ZW50Qnl0ZXModG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFy
cmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSkpOworICAg
IHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoSFNMQTxmbG9hdD4geyBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU9w
dGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNzE2MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTYwMSw3ICs2MDEsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Igd2ls
bCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25lIGNv
bG9yIGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmxpZ2h0
bmVzcyA9IDAuNWY7CiAgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmFscGhhICo9IDAuMzhm
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQSho
c2xhKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVDdXJyZW50Y29sb3IpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IsIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
dW5kZXJsaW5lQ29sb3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAy
NzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAzLDYgKzkwMyw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVzZXQKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgT3B0aW9uYWw8
ZmxvYXQ+IGFscGhhKQogewogICAgIGlmIChhbHBoYSkgeworICAgICAgICBpZiAoIXN0ZDo6aXNm
aW5pdGUoKmFscGhhKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBzZXRTdHJva2VT
dHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbG9y
LCBhbHBoYS52YWx1ZSgpLCBjYW52YXNCYXNlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTkxNyw3ICs5MjAsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRTdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0cm9rZUNvbG9y
KGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgYXV0byBjb2xvciA9IFNSR0JB
IHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAoIXN0
ZDo6aXNmaW5pdGUoZ3JheUxldmVsKSB8fCAhc3RkOjppc2Zpbml0ZShhbHBoYSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PGZsb2F0Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpOwogICAgIGlm
IChzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVy
bjsKICAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwpAQCAtOTI1LDcgKzkz
MSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoZmxvYXQgciwgZmxv
YXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyByLCBn
LCBiLCBhIH07CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHIpIHx8ICFzdGQ6OmlzZmluaXRlKGcp
IHx8ICFzdGQ6OmlzZmluaXRlKGIpICB8fCAhc3RkOjppc2Zpbml0ZShhKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8Zmxv
YXQ+PihyLCBnLCBiLCBhKTsKICAgICBpZiAoc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxl
bnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5
bGUoY29sb3IpKTsKQEAgLTkzNCw2ICs5NDMsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNldFN0CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZp
bGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gYWxwaGEpCiB7CiAg
ICAgaWYgKGFscGhhKSB7CisgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSgqYWxwaGEpKQorICAg
ICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZTo6Y3Jl
YXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbG9yLCBhbHBoYS52YWx1ZSgpLCBjYW52
YXNCYXNlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk0OCw3ICs5NjAsMTAgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxDb2xvcihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0
IGFscGhhKQogewotICAgIGF1dG8gY29sb3IgPSBTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVs
LCBncmF5TGV2ZWwsIGFscGhhIH07CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGdyYXlMZXZlbCkg
fHwgIXN0ZDo6aXNmaW5pdGUoYWxwaGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNv
bG9yID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlMZXZlbCwgZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKTsKICAgICBpZiAoc3RhdGUoKS5maWxsU3R5bGUuaXNF
cXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNldEZpbGxTdHlsZShDYW52
YXNTdHlsZShjb2xvcikpOwpAQCAtOTU2LDcgKzk3MSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnNldEZpCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2V0RmlsbENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0g
ICAgYXV0byBjb2xvciA9IFNSR0JBIHsgciwgZywgYiwgYSB9OworICAgIGlmICghc3RkOjppc2Zp
bml0ZShyKSB8fCAhc3RkOjppc2Zpbml0ZShnKSB8fCAhc3RkOjppc2Zpbml0ZShiKSAgfHwgIXN0
ZDo6aXNmaW5pdGUoYSkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29sb3IgPSBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4ociwgZywgYiwgYSk7CiAgICAgaWYgKHN0
YXRlKCkuZmlsbFN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKICAg
ICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUoY29sb3IpKTsKQEAgLTEyODksNiArMTMwNyw5IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3Ryb2sKIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCwgZmxvYXQgYmx1ciwgY29uc3QgU3RyaW5nJiBjb2xvclN0cmluZywgT3B0aW9uYWw8ZmxvYXQ+
IGFscGhhKQogeworICAgIGlmIChhbHBoYSAmJiAhc3RkOjppc2Zpbml0ZSgqYWxwaGEpKQorICAg
ICAgICByZXR1cm47CisKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
OwogICAgIGlmICghY29sb3JTdHJpbmcuaXNOdWxsKCkpIHsKICAgICAgICAgY29sb3IgPSBwYXJz
ZUNvbG9yT3JDdXJyZW50Q29sb3IoY29sb3JTdHJpbmcsIGNhbnZhc0Jhc2UoKSk7CkBAIC0xMzAw
LDE3ICsxMzIxLDI2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gK
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBo
YSkKIHsKLSAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252
ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGFscGhhIH0pKTsKKyAgICBpZiAoIXN0ZDo6aXNmaW5pdGUoZ3JheUxldmVsKSB8fCAhc3Rk
Ojppc2Zpbml0ZShhbHBoYSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFNoYWRvdyhGbG9h
dFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4obWFr
ZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGdyYXlMZXZlbCwgZ3JheUxldmVsLCBn
cmF5TGV2ZWwsIGFscGhhKSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9h
dCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNp
emUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsg
ciwgZywgYiwgYSB9KSk7CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHIpIHx8ICFzdGQ6OmlzZmlu
aXRlKGcpIHx8ICFzdGQ6OmlzZmluaXRlKGIpICB8fCAhc3RkOjppc2Zpbml0ZShhKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1
ciwgY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JB
PGZsb2F0Pj4ociwgZywgYiwgYSkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwg
ZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBzZXRT
aGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKENNWUtBIHsgYywgbSwgeSwgaywgYSB9KSkpOworICAgIGlmICghc3RkOjpp
c2Zpbml0ZShjKSB8fCAhc3RkOjppc2Zpbml0ZShtKSB8fCAhc3RkOjppc2Zpbml0ZSh5KSAgfHwg
IXN0ZDo6aXNmaW5pdGUoaykgfHwgIXN0ZDo6aXNmaW5pdGUoYSkpCisgICAgICAgIHJldHVybjsK
KworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRU
bzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShDTVlLQSB7IGMsIG0sIHksIGssIGEgfSkpKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclNoYWRvdygpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAy
NzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKENv
bG9yIGNvbG9yKQogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvckNvbXBvbmVudHMpCi0gICAgOiBtX3N0eWxlKGNvbnZlcnRUb0NvbXBvbmVudEJ5
dGVzKGNvbG9yQ29tcG9uZW50cykpCisgICAgOiBtX3N0eWxlKGNvbnZlcnRUbzxTUkdCQTx1aW50
OF90Pj4oY29sb3JDb21wb25lbnRzKSkKIHsKIH0KIApAQCAtMTQ4LDcgKzE0OCw3IEBAIGJvb2wg
Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnMKIAogYm9vbCBDYW52YXNTdHlsZTo6
aXNFcXVpdmFsZW50KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29tcG9uZW50cykgY29uc3QKIHsKLSAg
ICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpn
ZXQ8Q29sb3I+KG1fc3R5bGUpID09IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbXBvbmVudHMp
OworICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBX
VEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pihjb21w
b25lbnRzKTsKIH0KIAogdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjcxNjE5
KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdGF0aWMgQ29sb3IgcGFyc2VD
b2xvcihSZWZQdHI8SlNPTjo6T2JqCiAKICAgICBhdXRvIGEgPSBjb2xvck9iamVjdC0+Z2V0RG91
YmxlKFByb3RvY29sOjpET006OlJHQkFDb2xvcjo6YUtleSk7CiAgICAgaWYgKCFhKQotICAgICAg
ICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiKTsKLSAgICBy
ZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiLCBjb252ZXJ0VG9D
b21wb25lbnRCeXRlKCphKSk7CisgICAgICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRz
PFNSR0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29t
cG9uZW50c0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiLCBjb252ZXJ0Rmxv
YXRBbHBoYVRvPHVpbnQ4X3Q+KCphKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0Nv
bG9yKGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBKU09OOjpPYmplY3QmIGNvbmZpZ09iamVjdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlz
aW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHRlbmVk
KCkgY29uc3QKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4z
M2YpIC8gdjsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IG11
bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CisgICAg
cmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBtdWx0aXBsaWVyICogciwg
bXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOwogfQogCiBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdApAQCAtMTA1LDcgKzEwNSw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5l
ZCgpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9h
dCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJl
dHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0
aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxT
UkdCQTx1aW50OF90Pj4oU1JHQkEgeyBtdWx0aXBsaWVyICogciwgbXVsdGlwbGllciAqIGcsIG11
bHRpcGxpZXIgKiBiLCBhIH0pOwogfQogCiBmbG9hdCBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QK
QEAgLTE0MSw3ICsxNDEsMTQgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFs
cGhhKQogQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFsmXSAoY29uc3QgYXV0byYg
dW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7Ci0gICAgICAgIHJldHVybiBpbnZlcnRlZENvbG9y
V2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOworICAgICAgICB1c2lu
ZyBDb2xvclR5cGUgPSBzdGQ6OmRlY2F5X3Q8ZGVjbHR5cGUodW5kZXJseWluZ0NvbG9yKT47Cisg
ICAgICAgIGlmIGNvbnN0ZXhwciAoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKQorICAg
ICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEodW5kZXJseWlu
Z0NvbG9yLCBhbHBoYSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IERl
dGVybWluZSBpZiB0aGVyZSBpcyBhIG1lYW5pbmdmdWwgdW5kZXJzdGFuZGluZyBvZiBpbnZlcnNp
b24gdGhhdCB3b3JrcworICAgICAgICAgICAgLy8gYmV0dGVyIGZvciBub24taW52ZXJ0aWJsZSBj
b2xvciB0eXBlcyBsaWtlIExhYi4KKyAgICAgICAgICAgIHJldHVybiBpbnZlcnRlZENvbG9yV2l0
aE92ZXJyaWRlbkFscGhhKHRvU1JHQkEodW5kZXJseWluZ0NvbG9yKSwgYWxwaGEpOworICAgICAg
ICB9CiAgICAgfSk7CiB9CiAKQEAgLTE1Nyw3ICsxNjQsNyBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFj
ZSwgQ29sb3JDb21wb25lbnRzPGZsCiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAg
cmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgYXNFeHRlbmRlZCgpLmNvbXBvbmVu
dHMoKSB9OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRz
KGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhhc0lubGluZSgpKSkgfTsKKyAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+
Pihhc0lubGluZSgpKSkgfTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDggQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQo
KSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1
OyB9CiAgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBh
c0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9Ci0gICAg
dWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0
VG9Db21wb25lbnRCeXRlKGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7
IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkg
PyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5l
KCkuYWxwaGEpOyB9CisgICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4
dGVuZGVkKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzRXh0ZW5kZWQoKS5hbHBo
YSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KKyAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25z
dCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRC
eXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KIAogICAgIFdFQkNPUkVfRVhQ
T1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxp
Z2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1
bWluYW5jZS4KQEAgLTMzMSwxMSArMzMxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JB
PFQ+IENvbG9yOjp0b1MKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8
VCwgdWludDhfdD4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwogICAgICAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvbG9yKTsKICAgICAgICAgfSwKICAgICAg
ICAgW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7CiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShjb2xvcikpOwogICAgICAgICAgICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRvU1JHQkEoY29sb3IpOwogICAgICAgICB9CkBAIC0zOTEsMTUgKzM5MSwyNyBAQCBp
bmxpbmUgdm9pZCBDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8CiAKIGlubGluZSBib29sIENv
bG9yOjppc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBjb2xv
ci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OmlzQmxhY2soY29sb3IpOworICAgIHJldHVybiBjb2xvci5jYWxsT25V
bmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSB7CisgICAgICAg
IHVzaW5nIENvbG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZSh1bmRlcmx5aW5nQ29sb3Ip
PjsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5
cGU6Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+PikK
KyAgICAgICAgICAgIHJldHVybiBXZWJDb3JlOjppc0JsYWNrKHVuZGVybHlpbmdDb2xvcik7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IERlZmluZSBtZWFuaW5nZnVsIGJs
YWNrIHBvaW50cyBmb3IgYWxsIGNvbG9yIHR5cGVzLgorICAgICAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OmlzQmxhY2sodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpKTsKKyAgICAgICAgfQogICAgIH0p
OwogfQogCiBpbmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1
dG8mIGNvbG9yKSB7Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKGNvbG9yKTsKKyAg
ICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1dG8mIHVuZGVy
bHlpbmdDb2xvcikgeworICAgICAgICB1c2luZyBDb2xvclR5cGUgPSBzdGQ6OmRlY2F5X3Q8ZGVj
bHR5cGUodW5kZXJseWluZ0NvbG9yKT47CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPj4pCisgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6aXNXaGl0
ZSh1bmRlcmx5aW5nQ29sb3IpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBEZWZpbmUgbWVhbmluZ2Z1bCB3aGl0ZSBwb2ludHMgZm9yIGFsbCBjb2xvciB0eXBlcy4KKyAg
ICAgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHRvU1JHQkEodW5kZXJseWluZ0NvbG9y
KSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI3MTYxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25z
dCBDb2xvciYgYmFja2QKICAgICBpbnQgZyA9IChiYWNrZHJvcEcgKiBiYWNrZHJvcEEgKiAoMHhG
RiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEgKiBzb3VyY2VHKSAvIGQ7CiAgICAgaW50IGIg
PSAoYmFja2Ryb3BCICogYmFja2Ryb3BBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3Vy
Y2VBICogc291cmNlQikgLyBkOwogCi0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxT
UkdCQT4ociwgZywgYiwgYSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JH
QkE8dWludDhfdD4+KHIsIGcsIGIsIGEpOwogfQogCiBDb2xvciBibGVuZFdpdGhXaGl0ZShjb25z
dCBDb2xvciYgY29sb3IpCkBAIC03OCw3ICs3OCw3IEBAIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgaW50IGcgPSBibGVuZENvbXBvbmVudChleGlzdGlu
Z0csIGFscGhhKTsKICAgICAgICAgaW50IGIgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0IsIGFs
cGhhKTsKIAotICAgICAgICByZXN1bHQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIs
IGcsIGIsIGFscGhhKTsKKyAgICAgICAgcmVzdWx0ID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxT
UkdCQTx1aW50OF90Pj4ociwgZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYg
ZyA+PSAwICYmIGIgPj0gMCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDcgKzEwMCw3IEBA
IENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICBhdXRvIHByZW11
bHRpcGxpZWRGcm9tID0gcHJlbXVsdGlwbGllZENlaWxpbmcoZnJvbS50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKSk7CiAgICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkQ2VpbGlu
Zyh0by50b1NSR0JBTG9zc3k8dWludDhfdD4oKSk7CiAKLSAgICBhdXRvIHByZW11bHRpcGxpZWRC
bGVuZGVkID0gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigKKyAgICBhdXRvIHByZW11bHRp
cGxpZWRCbGVuZGVkID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oCiAg
ICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGll
ZFRvLnJlZCwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVk
RnJvbS5ncmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBwcm9ncmVzcyksCiAgICAgICAgIFdl
YkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVl
LCBwcm9ncmVzcyksCkBAIC0xMjAsNyArMTIwLDcgQEAgQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVs
dGlwbHkoY29uc3QgQ29sbwogICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOwogICAgIGF1dG8gdG9TUkdCID0gdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigKKyAgICByZXR1cm4g
bWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oCiAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJD
b3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCiAgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyks
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
Q29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI4
ICszMiwxMDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1mbG9hdCBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGZsb2F0IGMpCisvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9T
UkdCCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0Jf
WFlaX01hdHJpeC5odG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRv
TGluZWFyU1JHQk1hdHJpeCB7CisgICAgIDMuMjQwNDU0MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1
MzE0ZiwKKyAgICAtMC45NjkyNjYwZiwgIDEuODc2MDEwOGYsICAwLjA0MTU1NjBmLAorICAgICAw
LjA1NTY0MzRmLCAtMC4yMDQwMjU5ZiwgIDEuMDU3MjI1MmYKK307CisKKy8vIGh0dHBzOi8vZW4u
d2lraXBlZGlhLm9yZy93aWtpL1NSR0IKKy8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29t
L2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29s
b3JNYXRyaXg8MywgMz4gbGluZWFyU1JHQlRvWFlaTWF0cml4IHsKKyAgICAwLjQxMjQ1NjRmLCAg
MC4zNTc1NzYxZiwgIDAuMTgwNDM3NWYsCisgICAgMC4yMTI2NzI5ZiwgIDAuNzE1MTUyMmYsICAw
LjA3MjE3NTBmLAorICAgIDAuMDE5MzMzOWYsICAwLjExOTE5MjBmLCAgMC45NTAzMDQxZgorfTsK
KworLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lv
bi1jb2RlCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlz
cGxheVAzTWF0cml4IHsKKyAgICAgMi40OTM0OTY5MTE5NDE0MjVmLCAgLTAuOTMxMzgzNjE3OTE5
MTIzOWYsIC0wLjQwMjcxMDc4NDQ1MDcxNjhmLAorICAgIC0wLjgyOTQ4ODk2OTU2MTU3NDdmLCAg
MS43NjI2NjQwNjAzMTgzNDYzZiwgIDAuMDIzNjI0Njg1ODQxOTQzNmYsCisgICAgIDAuMDM1ODQ1
ODMwMjQzNzg0NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1MjQwMDc2ODcyZgor
fTsKKworLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVy
c2lvbi1jb2RlCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxpbmVhckRpc3Bs
YXlQM1RvWFlaTWF0cml4IHsKKyAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5MzE2
OTA5MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCisgICAgMC4yMjg5NzQ1NjQwNjk3NDg4ZiwgMC42
OTE3Mzg1MjE4MzY1MDY0ZiwgMC4wNzkyODY5MTQwOTM3NDVmLAorICAgIDAuMGYsICAgICAgICAg
ICAgICAgIDAuMDQ1MTEzMzgxODU4OTAyNmYsIDEuMDQzOTQ0MzY4OTAwOTc2ZgorfTsKKworLy8g
aHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5o
dG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IEQ1MFRvRDY1TWF0cml4IHsK
KyAgICAgMC45NTU1NzY2ZiwgLTAuMDIzMDM5M2YsIDAuMDYzMTYzNmYsCisgICAgLTAuMDI4Mjg5
NWYsICAxLjAwOTk0MTZmLCAwLjAyMTAwNzdmLAorICAgICAwLjAxMjI5ODJmLCAtMC4wMjA0ODMw
ZiwgMS4zMjk5MDk4ZgorfTsKKworLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5k
ZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4
PDMsIDM+IEQ2NVRvRDUwTWF0cml4IHsKKyAgICAgMS4wNDc4MTEyZiwgMC4wMjI4ODY2ZiwgLTAu
MDUwMTI3MGYsCisgICAgIDAuMDI5NTQyNGYsIDAuOTkwNDg0NGYsIC0wLjAxNzA0OTFmLAorICAg
IC0wLjAwOTIzNDVmLCAwLjAxNTA0MzZmLCAgMC43NTIxMzE2ZgorfTsKKworZmxvYXQgbGluZWFy
VG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGZsb2F0IGMpCiB7CisgICAgQVNTRVJUKGMgPj0g
MCk7CisgICAgQVNTRVJUKGMgPD0gMSk7CisKICAgICBpZiAoYyA8IDAuMDAzMTMwOGYpCiAgICAg
ICAgIHJldHVybiAxMi45MmYgKiBjOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KDEuMDU1
ZiAqIHN0ZDo6cG93KGMsIDEuMGYgLyAyLjRmKSAtIDAuMDU1ZiwgMCwgMSk7CiB9CiAKLWZsb2F0
IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQgYykKK2Zsb2F0IHJnYlRvTGluZWFyQ29s
b3JDb21wb25lbnRDbGFtcGluZyhmbG9hdCBjKQogeworICAgIEFTU0VSVChjID49IDApOworICAg
IEFTU0VSVChjIDw9IDEpOworICAgIAogICAgIGlmIChjIDw9IDAuMDQwNDVmKQogICAgICAgICBy
ZXR1cm4gYyAvIDEyLjkyZjsKIAogICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihzdGQ6OnBvdygo
YyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0KIAorZmxvYXQgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudE5vbkNsYW1waW5nKGZsb2F0IGMpCit7CisgICAgZmxvYXQgc2lnbiA9
IHN0ZDo6c2lnbmJpdChjKSA/IC0xLjBmIDogMS4wZjsKKyAgICBjID0gc3RkOjphYnMoYyk7CisK
KyAgICBpZiAoYyA8IDAuMDAzMTMwOGYpCisgICAgICAgIHJldHVybiAxMi45MmYgKiBjICogc2ln
bjsKKworICAgIHJldHVybiAoMS4wNTVmICogc3RkOjpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4w
NTVmKSAqIHNpZ247Cit9CisKK2Zsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnROb25DbGFt
cGluZyhmbG9hdCBjKQoreworICAgIGZsb2F0IHNpZ24gPSBzdGQ6OnNpZ25iaXQoYykgPyAtMS4w
ZiA6IDEuMGY7CisgICAgYyA9IHN0ZDo6YWJzKGMpOworCisgICAgaWYgKGMgPD0gMC4wNDA0NWYp
CisgICAgICAgIHJldHVybiBjIC8gMTIuOTJmICogc2lnbjsKKworICAgIHJldHVybiBzdGQ6OnBv
dygoYyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpICogc2lnbjsKK30KKworLy8gR2FtbWEgY29u
dmVyc2lvbnMuCisKIExpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0IFNSR0JB
PGZsb2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xv
ckNvbXBvbmVudChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50
KGNvbG9yLmdyZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5i
bHVlKSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJl
ZCksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVl
biksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVl
KSwKICAgICAgICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtNjEsOSArMTM1LDkgQEAgTGlu
ZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgUwogU1JHQkE8ZmxvYXQ+IHRvU1JH
QkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAg
ICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAotICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9u
ZW50Q2xhbXBpbmcoY29sb3IucmVkKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dENsYW1waW5nKGNvbG9yLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dENsYW1waW5nKGNvbG9yLmJsdWUpLAogICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBA
IC03MSw5ICsxNDUsOSBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxm
CiBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERpc3BsYXlQ
MzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIHJnYlRvTGluZWFyQ29s
b3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChjb2xvci5ncmVlbiksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3Iu
Ymx1ZSksCisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5y
ZWQpLAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuZ3Jl
ZW4pLAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1
ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTgxLDgxICsxNTUsNDkgQEAg
TGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMwogRGlzcGxheVAzPGZsb2F0
PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKICAg
ICByZXR1cm4gewotICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCks
Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAotICAgICAg
ICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBsaW5lYXJU
b1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwKKyAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAogICAgICAgICBjb2xvci5hbHBo
YQogICAgIH07CiB9CiAKKy8vIE1hdHJpeCBjb252ZXJzaW9ucy4KKwogTGluZWFyU1JHQkE8Zmxv
YXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0
dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKLSAgICAvLyBodHRwOi8vd3d3LmJydWNl
bGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCi0gICAgY29u
c3RleHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyU1JHQk1hdHJpeCB7Ci0gICAgICAg
ICAzLjI0MDQ1NDJmLCAtMS41MzcxMzg1ZiwgLTAuNDk4NTMxNGYsCi0gICAgICAgIC0wLjk2OTI2
NjBmLCAgMS44NzYwMTA4ZiwgIDAuMDQxNTU2MGYsCi0gICAgICAgICAwLjA1NTY0MzRmLCAtMC4y
MDQwMjU5ZiwgIDEuMDU3MjI1MmYKLSAgICB9OwotICAgIHJldHVybiBhc0xpbmVhclNSR0JBKHh5
elRvTGluZWFyU1JHQk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2Vw
dEFscGhhPExpbmVhclNSR0JBPGZsb2F0Pj4oeHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBYWVpB
PGZsb2F0PiB0b1hZWkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAv
LyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCCi0gICAgLy8gaHR0cDovL3d3dy5i
cnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAotICAg
IGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggewotICAg
ICAgICAwLjQxMjQ1NjRmLCAgMC4zNTc1NzYxZiwgIDAuMTgwNDM3NWYsCi0gICAgICAgIDAuMjEy
NjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwKLSAgICAgICAgMC4wMTkzMzM5ZiwgIDAu
MTE5MTkyMGYsICAwLjk1MDMwNDFmCi0gICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhclNS
R0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50
cyhjb2xvcikpKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhh
PFhZWkE8ZmxvYXQ+PihsaW5lYXJTUkdCVG9YWVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIExpbmVhckRpc3BsYXlQMzxm
bG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAg
IC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24t
Y29kZQotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhckRpc3BsYXlQ
M01hdHJpeCB7Ci0gICAgICAgICAyLjQ5MzQ5NjkxMTk0MTQyNWYsICAtMC45MzEzODM2MTc5MTkx
MjM5ZiwgLTAuNDAyNzEwNzg0NDUwNzE2OGYsCi0gICAgICAgIC0wLjgyOTQ4ODk2OTU2MTU3NDdm
LCAgMS43NjI2NjQwNjAzMTgzNDYzZiwgIDAuMDIzNjI0Njg1ODQxOTQzNmYsCi0gICAgICAgICAw
LjAzNTg0NTgzMDI0Mzc4NDVmLCAtMC4wNzYxNzIzODkyNjgwNDE4ZiwgIDAuOTU2ODg0NTI0MDA3
Njg3MmYKLSAgICB9OwotICAgIHJldHVybiBhc0xpbmVhckRpc3BsYXlQMyh4eXpUb0xpbmVhckRp
c3BsYXlQM01hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50
cyhjb2xvcikpKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhh
PExpbmVhckRpc3BsYXlQMzxmbG9hdD4+KHh5elRvTGluZWFyRGlzcGxheVAzTWF0cml4LnRyYW5z
Zm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBY
WVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCiB7
Ci0gICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVy
c2lvbi1jb2RlCi0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxpbmVhckRpc3BsYXlQ
M1RvWFlaTWF0cml4IHsKLSAgICAgICAgMC40ODY1NzA5NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMx
NjkwOTMxZiwgMC4xOTgyMTcyODUyMzQzNjNmLAotICAgICAgICAwLjIyODk3NDU2NDA2OTc0ODhm
LCAwLjY5MTczODUyMTgzNjUwNjRmLCAwLjA3OTI4NjkxNDA5Mzc0NWYsCi0gICAgICAgIDAuMGYs
ICAgICAgICAgICAgICAgIDAuMDQ1MTEzMzgxODU4OTAyNmYsIDEuMDQzOTQ0MzY4OTAwOTc2Zgot
ICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICBy
ZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihsaW5l
YXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gQ2hyb21hdGljIEFkYXB0YXRpb24gY29udmVy
c2lvbnMuCisKIHN0YXRpYyBYWVpBPGZsb2F0PiBjb252ZXJ0RnJvbUQ1MFdoaXRlUG9pbnRUb0Q2
NVdoaXRlUG9pbnQoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHA6Ly93
d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAotICAg
IGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7Ci0gICAgICAgICAw
Ljk1NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKLSAgICAgICAgLTAuMDI4Mjg5NWYs
ICAxLjAwOTk0MTZmLCAwLjAyMTAwNzdmLAotICAgICAgICAgMC4wMTIyOTgyZiwgLTAuMDIwNDgz
MGYsIDEuMzI5OTA5OGYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEoRDUwVG9ENjVNYXRyaXgu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7Cisg
ICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxYWVpBPGZsb2F0Pj4o
RDUwVG9ENjVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVu
dHMoY29sb3IpKSk7CiB9CiAKIHN0YXRpYyBYWVpBPGZsb2F0PiBjb252ZXJ0RnJvbUQ2NVdoaXRl
UG9pbnRUb0Q1MFdoaXRlUG9pbnQoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8v
IGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQu
aHRtbAotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENjVUb0Q1ME1hdHJpeCB7Ci0g
ICAgICAgICAxLjA0NzgxMTJmLCAwLjAyMjg4NjZmLCAtMC4wNTAxMjcwZiwKLSAgICAgICAgIDAu
MDI5NTQyNGYsIDAuOTkwNDg0NGYsIC0wLjAxNzA0OTFmLAotICAgICAgICAtMC4wMDkyMzQ1Ziwg
MC4wMTUwNDM2ZiwgIDAuNzUyMTMxNmYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEoRDY1VG9E
NTBNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29s
b3IpKSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxYWVpB
PGZsb2F0Pj4oRDY1VG9ENTBNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKKy8vIExhYiBjb252ZXJzaW9ucy4KKwogc3RhdGlj
IGNvbnN0ZXhwciBmbG9hdCBMQUJlID0gMjE2LjBmIC8gMjQzODkuMGY7CiBzdGF0aWMgY29uc3Rl
eHByIGZsb2F0IExBQmsgPSAyNDM4OS4wZiAvIDI3LjBmOwogc3RhdGljIGNvbnN0ZXhwciBmbG9h
dCBENTBXaGl0ZVZhbHVlc1tdID0geyAwLjk2NDIyZiwgMS4wZiwgMC44MjUyMWYgfTsKQEAgLTIy
MSw2ICsyNjMsOSBAQCBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IFhZWkE8ZmxvYXQ+JiBjb2xvCiAg
ICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBhLCBiLCBjb2xvcldpdGhENTBXaGl0ZVBvaW50LmFscGhh
IH07CiB9CiAKKworLy8gTENIIGNvbnZlcnNpb25zLgorCiBMQ0hBPGZsb2F0PiB0b0xDSEEoY29u
c3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nz
cy1jb2xvci00LyNsYWItdG8tbGNoCkBAIC0yNDcsNiArMjkyLDggQEAgTGFiPGZsb2F0PiB0b0xh
Yihjb25zdCBMQ0hBPGZsb2F0PiYgY29sbwogICAgIH07CiB9CiAKKy8vIEhTTCBjb252ZXJzaW9u
cy4KKwogSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAg
ICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UuCkBAIC0z
MzIsNiArMzc5LDggQEAgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mIAog
ICAgIH07CiB9CiAKKy8vIENNWUsgY29udmVyc2lvbnMuCisKIFNSR0JBPGZsb2F0PiB0b1NSR0JB
KGNvbnN0IENNWUtBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgYXV0byBbYywgbSwgeSwgaywgYV0g
PSBjb2xvcjsKQEAgLTM1Niw2ICs0MDUsOSBAQCBDTVlLQTxmbG9hdD4gdG9DTVlLQShjb25zdCBT
UkdCQTxmbG9hdD4mCiAgICAgcmV0dXJuIHsgYywgbSwgeSwgaywgYSB9OwogfQogCisKKy8vIENv
bWJpbmF0aW9uIGNvbnZlcnNpb25zIChjb25zdHJ1Y3RlZCBmcm9tIG1vcmUgYmFzaWMgY29udmVy
c2lvbnMgYWJvdmUpLgorCiBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICByZXR1cm4gdG9YWVpBKHRvTGluZWFyU1JHQkEoY29sb3IpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lv
bi5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsMTEgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhlc2UgYXJlIHRoZSBzdGFuZGFyZCBzUkdCIDwtPiBM
aW5lYXJSR0IgLyBEaXNwbGF5UDMgPC0+IExpbmVhckRpc3BsYXlQMyBjb252ZXJzaW9uIGZ1bmN0
aW9ucyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQikuCi1mbG9hdCBsaW5lYXJU
b1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLWZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25l
bnQoZmxvYXQpOworZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGZsb2F0
KTsKK2Zsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhmbG9hdCk7CisKK2Zs
b2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnROb25DbGFtcGluZyhmbG9hdCk7CitmbG9hdCBy
Z2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Tm9uQ2xhbXBpbmcoZmxvYXQpOwogCiAKIC8vIEFsbCBj
b2xvciB0eXBlcyBtdXN0IGF0IGxlYXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGNvbnZlcnNp
b25zIHRvIGFuZCBmcm9tIHRoZSBYWVpBIGNvbG9yIHNwYWNlOgpAQCAtNTYsNDIgKzU5LDM2IEBA
IFdFQkNPUkVfRVhQT1JUIExpbmVhclNSR0JBPGZsb2F0PiB0b0xpbmUKIC8vIEFkZGl0aW9ucwog
V0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8Zmxv
YXQ+Jik7CiAKLQogLy8gRGlzcGxheVAzCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZ
WkEoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZs
b2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25zCiBXRUJD
T1JFX0VYUE9SVCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0
IERpc3BsYXlQMzxmbG9hdD4mKTsKIAotCiAvLyBMaW5lYXJEaXNwbGF5UDMKIFdFQkNPUkVfRVhQ
T1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiBX
RUJDT1JFX0VYUE9SVCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNv
bnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlQ
MzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYpOwogCi0K
IC8vIExhYgogV0VCQ09SRV9FWFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExhYjxmbG9h
dD4mKTsKIFdFQkNPUkVfRVhQT1JUIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgWFlaQTxmbG9hdD4m
KTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgTENIQTxmbG9hdD4gdG9MQ0hBKGNvbnN0
IExhYjxmbG9hdD4mKTsKIAotCiAvLyBMQ0hBCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0
b1hZWkEoY29uc3QgTENIQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIExDSEE8ZmxvYXQ+IHRv
TENIQShjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBM
YWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IExDSEE8ZmxvYXQ+Jik7CiAKLQogLy8gSFNMQQogV0VCQ09S
RV9FWFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiBXRUJDT1JF
X0VYUE9SVCBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0
aW9ucwogV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9h
dD4mKTsKIAotCiAvLyBDTVlLQQogV0VCQ09SRV9FWFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNv
bnN0IENNWUtBPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgQ01ZS0E8ZmxvYXQ+IHRvQ01ZS0Eo
Y29uc3QgWFlaQTxmbG9hdD4mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTgg
KzMxLDIxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgQ29tcG9uZW50VHJhaXRzOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBBbHBoYVRy
YWl0czsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPHVpbnQ4X3Q+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWluVmFsdWUgPSAwOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKK3RlbXBsYXRlPD4gc3RydWN0IEFscGhhVHJh
aXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgdHJhbnNwYXJlbnQg
PSAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBvcGFxdWUgPSAyNTU7CiB9OwogCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM8ZmxvYXQ+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGZsb2F0IG1pblZhbHVlID0gMC4wZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0
IG1heFZhbHVlID0gMS4wZjsKK3RlbXBsYXRlPD4gc3RydWN0IEFscGhhVHJhaXRzPGZsb2F0PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCB0cmFuc3BhcmVudCA9IDAuMGY7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBmbG9hdCBvcGFxdWUgPSAxLjBmOwogfTsKIAordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbG9yQ29tcG9uZW50UmFuZ2UgeworICAgIFQgbWluOworICAgIFQgbWF4
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBSR0JNb2RlbDsKK3RlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgTGFiTW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExDSE1v
ZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIU0xNb2RlbDsKK3RlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgQ01ZS01vZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBYWVpNb2Rl
bDsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8dWludDhfdD4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPHVpbnQ4X3Q+LCAzPiByYW5n
ZXMgeyB7CisgICAgICAgIHsgMCwgMjU1IH0sCisgICAgICAgIHsgMCwgMjU1IH0sCisgICAgICAg
IHsgMCwgMjU1IH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0
aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBSR0JNb2RlbDxmbG9hdD4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0
PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAwLCAxIH0sCisg
ICAgICAgIHsgMCwgMSB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
dmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgTGFiTW9kZWw8ZmxvYXQ+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxm
bG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwK
KyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0KKyAgICB9IH07CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgTENITW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8
Q29sb3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7IDAsIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgMCwgMzYw
IH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZh
bHNlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSFNMTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJh
bmdlcyB7IHsKKyAgICAgICAgeyAwLCAzNjAgfSwKKyAgICAgICAgeyAwLCAxMDAgfSwKKyAgICAg
ICAgeyAwLCAxMDAgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZl
cnRpYmxlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENNWUtNb2RlbDxmbG9hdD4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZs
b2F0PiwgND4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAwLCAxIH0s
CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfQorICAgIH0gfTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IFhZWk1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5
PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgLXN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkg
fSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0KKyAgICB9IH07CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IGZhbHNlOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VG
cm9tQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJu
IENvbG9yVHlwZSB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwgdHlwZW5hbWUgVD4gY29uc3RleHByIGF1
dG8gY2xhbXBlZENvbXBvbmVudChUIGMpIC0+IHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50
VHlwZQoreworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbF92PFQ+KTsKKworICAg
IGNvbnN0ZXhwciBhdXRvIHJhbmdlID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzW0luZGV4XTsK
KyAgICByZXR1cm4gc3RkOjpjbGFtcDxUPihjLCByYW5nZS5taW4sIHJhbmdlLm1heCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdW5zaWduZWQgSW5kZXg+IGNvbnN0ZXhwciBm
bG9hdCBjbGFtcGVkQ29tcG9uZW50KGZsb2F0IGMpCit7CisgICAgY29uc3RleHByIGF1dG8gcmFu
Z2UgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5kZXhdOworCisgICAgaWYgY29uc3RleHBy
IChyYW5nZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpICYm
IHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGM7CisKKyAgICBpZiBjb25zdGV4cHIgKHJhbmdlLm1pbiA9PSAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om1p
bihjLCByYW5nZS5tYXgpOworCisgICAgaWYgY29uc3RleHByIChyYW5nZS5tYXggPT0gc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om1h
eChjLCByYW5nZS5taW4pOworCisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoYywgcmFuZ2UubWluLCBy
YW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHVuc2lnbmVkIElu
ZGV4LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgVCBjbGFtcGVkQ29tcG9uZW50KGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4gY2xhbXBlZENvbXBvbmVudDxDb2xvclR5
cGUsIEluZGV4PihjW0luZGV4XSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IENvbXBvbmVudFR5cGUgPSBUPiBjb25zdGV4cHIgQ29tcG9uZW50VHlwZSBjbGFtcGVkQWxwaGEo
VCBhbHBoYSkKK3sKKyAgICByZXR1cm4gc3RkOjpjbGFtcDxUPihhbHBoYSwgQWxwaGFUcmFpdHM8
Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50LCBBbHBoYVRyYWl0czxDb21wb25lbnRUeXBlPjo6
b3BhcXVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBj
b25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGNsYW1wZWRDb21wb25lbnRzKGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjbGFt
cGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksCisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDI+KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQWxwaGEoY29t
cG9uZW50c1szXSkKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gY2xhbXBlZENvbXBvbmVudHNF
eGNlcHRBbHBoYShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMpCit7CisgICAg
cmV0dXJuIHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGNvbXBvbmVu
dHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oY29tcG9uZW50cyks
CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjb21wb25lbnRzKSwKKyAg
ICAgICAgY29tcG9uZW50c1szXQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21wb25l
bnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4g
bWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHM8Q29sb3JUeXBl
Pihjb21wb25lbnRzKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzKFQgYzEsIFQg
YzIsIFQgYzMpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENv
bG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihj
MSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksCisgICAgICAg
IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksCisgICAgICAgIEFscGhhVHJhaXRz
PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZQorICAgIH0pOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xv
clR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50cyhUIGMxLCBUIGMyLCBUIGMzLCBUIGFscGhhKQor
eworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVu
dHMgeworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oYzEpLAorICAgICAg
ICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLAorICAgICAgICBjbGFtcGVkQ29t
cG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLAorICAgICAgICBjbGFtcGVkQWxwaGE8VCwgdHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihhbHBoYSkKKyAgICB9KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1h
a2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4m
IGNvbXBvbmVudHMpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+
KGNsYW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGE8Q29sb3JUeXBlPihjb21wb25lbnRzKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgQWxw
aGE+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhh
KFQgYzEsIFQgYzIsIFQgYzMsIEFscGhhIGFscGhhKQoreworICAgIHJldHVybiBtYWtlRnJvbUNv
bXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMgeworICAgICAgICBjbGFtcGVkQ29t
cG9uZW50PENvbG9yVHlwZSwgMD4oYzEpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9y
VHlwZSwgMT4oYzIpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMp
LAorICAgICAgICBhbHBoYQorICAgIH0pOworfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUIGNvbG9yKQor
eworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgVDo6Q29tcG9uZW50
VHlwZSwgZmxvYXQ+KSB7CisgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgewor
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldID49IFQ6Ok1vZGVs
OjpyYW5nZXNbaV0ubWluLCAiQ29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNz
IHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBUOjpNb2Rl
bDo6cmFuZ2VzW2ldLm1pbik7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBv
bmVudHNbaV0gPD0gVDo6TW9kZWw6OnJhbmdlc1tpXS5tYXgsICJDb21wb25lbnQgYXQgaW5kZXgg
JWQgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVtICVmIiwgaSwg
IGNvbXBvbmVudHNbaV0sIFQ6Ok1vZGVsOjpyYW5nZXNbaV0ubWF4KTsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5cGVu
YW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBpcyBs
ZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3IuYWxw
aGEsIEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8
dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBn
cmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFscGhh
LCBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAgICB9
Cit9CisKKyNlbHNlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2Vy
dEluUmFuZ2UoVCkKK3sKK30KKworI2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZSA9IHZvaWQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBIYXNDb2xvclNwYWNlTWVtYmVyID0gZmFs
c2U7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29sb3JT
cGFjZU1lbWJlcjxULCBzdGQ6OnZvaWRfdDxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VD4oKS5jb2xv
clNwYWNlKT4+ID0gdHJ1ZTsKIApAQCAtNzQsMTggKzI3MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQYXJlbnQ+IHN0cnVjdCBDb2xvcldpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBT
UkdCQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPFNSR0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9u
ZW50VHlwZSA9IFQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xv
clNwYWNlOjpTUkdCOwotCi0gICAgY29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJs
dWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIHVzaW5nIE1v
ZGVsID0gUkdCTW9kZWw8VD47CisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2Ug
eyBDb2xvclNwYWNlOjpTUkdCIH07CisgICAgCisgICAgY29uc3RleHByIFNSR0JBKFQgcmVkLCBU
IGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAg
ICA6IHJlZCB7IHJlZCB9CiAgICAgICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1
ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIFNSR0JBKCkKLSAgICAg
ICAgOiBTUkdCQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0
czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRy
YWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IFNSR0JBIHsgMCwgMCwgMCwgMCB9CiAgICAg
ewogICAgIH0KIApAQCAtMTAwLDExICszMDAsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5h
bHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNT
UkdCQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwg
Y1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFNSR0JBPFQ+JiBhLCBjb25zdCBTUkdCQTxUPiYgYikKIHsK
ICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7
CkBAIC0xMTgsMTggKzMxMywyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSA6IENvbG9y
V2l0aEFscGhhSGVscGVyPExpbmVhclNSR0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlw
ZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkxpbmVhclJHQjsKIAotICAgIGNvbnN0
ZXhwciBMaW5lYXJTUkdCQShUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9u
ZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEoVCByZWQs
IFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAg
ICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBi
bHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBh
c3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEo
KQotICAgICAgICA6IExpbmVhclNSR0JBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1
ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGluZWFyU1JHQkEg
eyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0xNDQsMTEgKzM0MSw2IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwg
Yy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBMaW5lYXJTUkdCQTxUPiBhc0xpbmVhclNSR0JBKGNvbnN0IENvbG9yQ29tcG9uZW50
czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0K
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTGlu
ZWFyU1JHQkE8VD4mIGEsIGNvbnN0IExpbmVhclNSR0JBPFQ+JiBiKQogewogICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTE2MiwxOCAr
MzU0LDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERpc3BsYXlQMyA6IENvbG9yV2l0aEFscGhhSGVscGVy
PERpc3BsYXlQMzxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5n
IE1vZGVsID0gUkdCTW9kZWw8VD47CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3Bh
Y2UgPSBDb2xvclNwYWNlOjpEaXNwbGF5UDM7CiAKLSAgICBjb25zdGV4cHIgRGlzcGxheVAzKFQg
cmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZh
bHVlKQorICAgIGNvbnN0ZXhwciBEaXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBh
bHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAg
ICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAg
ICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsK
ICAgICB9CiAKICAgICBjb25zdGV4cHIgRGlzcGxheVAzKCkKLSAgICAgICAgOiBEaXNwbGF5UDMg
eyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlIH0KKyAgICAgICAgOiBEaXNwbGF5UDMgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAg
fQogCkBAIC0xODgsMTEgKzM4Miw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBD
b2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBEaXNwbGF5UDM8VD4gYXNEaXNw
bGF5UDMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0s
IGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxU
PiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBv
bmVudHMoYik7CkBAIC0yMDYsMTcgKzM5NSwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJEaXNw
bGF5UDMgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMaW5lYXJEaXNwbGF5UDM8VD4+IHsKICAgICB1
c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1vZGVsPFQ+Owog
Ci0gICAgY29uc3RleHByIExpbmVhckRpc3BsYXlQMyhUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBU
IGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGlu
ZWFyRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0
czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJlZCB9CiAgICAgICAgICwgZ3JlZW4geyBn
cmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEg
fQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29u
c3RleHByIExpbmVhckRpc3BsYXlQMygpCi0gICAgICAgIDogTGluZWFyRGlzcGxheVAzIHsgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1
ZSB9CisgICAgICAgIDogTGluZWFyRGlzcGxheVAzIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAg
IH0KIApAQCAtMjMxLDExICs0MjIsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Q29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzPFQ+
IGFzTGluZWFyRGlzcGxheVAzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICBy
ZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBh
LCBjb25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21w
b25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAtMjQ5LDE4ICs0MzUsMjAgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgTGFiIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TGFiPFQ+PiB7CiAgICAg
dXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBMYWJNb2RlbDxUPjsK
ICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkxhYjsK
IAotICAgIGNvbnN0ZXhwciBMYWIoVCBsaWdodG5lc3MsIFQgYSwgVCBiLCBUIGFscGhhID0gQ29t
cG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGFiKFQgbGlnaHRuZXNz
LCBUIGEsIFQgYiwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDog
bGlnaHRuZXNzIHsgbGlnaHRuZXNzIH0KICAgICAgICAgLCBhIHsgYSB9CiAgICAgICAgICwgYiB7
IGIgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5S
YW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIExhYigpCi0gICAgICAgIDogTGFi
IHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5W
YWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
aW5WYWx1ZSB9CisgICAgICAgIDogTGFiIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApA
QCAtMjc1LDExICs0NjMsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JD
b21wCiAgICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMYWI8VD4gYXNMYWIoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBMYWI8VD4mIGEsIGNvbnN0IExhYjxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yOTMsMTcgKzQ3NiwxOSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBMQ0hBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TENIQTxUPj4gewog
ICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gTENITW9kZWw8
VD47CiAKLSAgICBjb25zdGV4cHIgTENIQShUIGxpZ2h0bmVzcywgVCBjaHJvbWEsIFQgaHVlLCBU
IGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTENI
QShUIGxpZ2h0bmVzcywgVCBjaHJvbWEsIFQgaHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46
Om9wYXF1ZSkKICAgICAgICAgOiBsaWdodG5lc3MgeyBsaWdodG5lc3MgfQogICAgICAgICAsIGNo
cm9tYSB7IGNocm9tYSB9CiAgICAgICAgICwgaHVlIHsgaHVlIH0KICAgICAgICAgLCBhbHBoYSB7
IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAog
ICAgIGNvbnN0ZXhwciBMQ0hBKCkKLSAgICAgICAgOiBMQ0hBIHsgQ29tcG9uZW50VHJhaXRzPFQ+
OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRz
PFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDog
TENIQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTMxOCwxMSArNTAzLDYgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMu
bGlnaHRuZXNzLCBjLmNocm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIExDSEE8VD4gYXNMQ0hBKGNvbnN0IENvbG9yQ29tcG9uZW50czxU
PiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTENIQTxU
PiYgYSwgY29uc3QgTENIQTxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMo
YSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0zMzYsMTcgKzUxNiwxOSBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBIU0xBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8SFNMQTxUPj4gewogICAgIHVzaW5n
IENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gSFNMTW9kZWw8VD47CiAKLSAg
ICBjb25zdGV4cHIgSFNMQShUIGh1ZSwgVCBzYXR1cmF0aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBo
YSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIEhTTEEoVCBo
dWUsIFQgc2F0dXJhdGlvbiwgVCBsaWdodG5lc3MsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6
b3BhcXVlKQogICAgICAgICA6IGh1ZSB7IGh1ZSB9CiAgICAgICAgICwgc2F0dXJhdGlvbiB7IHNh
dHVyYXRpb24gfQogICAgICAgICAsIGxpZ2h0bmVzcyB7IGxpZ2h0bmVzcyB9CiAgICAgICAgICwg
YWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAg
ICB9CiAKICAgICBjb25zdGV4cHIgSFNMQSgpCi0gICAgICAgIDogSFNMQSB7IENvbXBvbmVudFRy
YWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVu
dFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAg
ICAgICA6IEhTTEEgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0zNjMsMTEgKzU0
NSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1
cm4geyBjLmh1ZSwgYy5zYXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgSFNMQTxUPiBhc0hTTEEoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBIU0xBPFQ+JiBhLCBjb25zdCBIU0xBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTM4Miw4ICs1NTksOSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAvLyBGSVhNRTogV2hl
biBDb2xvckNvbXBvbmVudHMgc3VwcG9ydHMgbW9yZSB0aGFuIGxlbmd0aCA9PSA0LCBhZGQgY29u
dmVyc2lvbiB0by9mcm9tIENvbG9yQ29tcG9uZW50czxUPiBmb3IgQ01ZS0EKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDTVlLQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPENNWUtBPFQ+PiB7
CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBDTVlLTW9k
ZWw8VD47CiAKLSAgICBjb25zdGV4cHIgQ01ZS0EoVCBjeWFuLCBUIG1hZ2VudGEsIFQgeWVsbG93
LCBUIGJsYWNrLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBj
b25zdGV4cHIgQ01ZS0EoVCBjeWFuLCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFs
cGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiBjeWFuIHsgY3lhbiB9CiAg
ICAgICAgICwgbWFnZW50YSB7IG1hZ2VudGEgfQogICAgICAgICAsIHllbGxvdyB7IHllbGxvdyB9
CkBAIC0zOTMsNyArNTcxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIDog
Q29sbwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBDTVlLQSgpCi0gICAgICAgIDogQ01ZS0EgeyBD
b21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
LCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBDTVlLQSB7IDAs
IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTQxNywxNyArNTk1LDE5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IFhZWkEgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxYWVpBPFQ+PiB7CiAgICAgdXNp
bmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBYWVpNb2RlbDxUPjsKIAot
ICAgIGNvbnN0ZXhwciBYWVpBKFQgeCwgVCB5LCBUIHosIFQgYWxwaGEgPSBDb21wb25lbnRUcmFp
dHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBYWVpBKFQgeCwgVCB5LCBUIHosIFQgYWxw
aGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHggeyB4IH0KICAgICAgICAg
LCB5IHsgeSB9CiAgICAgICAgICwgeiB7IHogfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQog
ICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3Rl
eHByIFhZWkEoKQotICAgICAgICA6IFhZWkEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
LCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBYWVpBIHsgMCwg
MCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtNDQyLDExICs2MjIsNiBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy54LCBjLnksIGMu
eiwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgWFlaQTxU
PiBhc1hZWkEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNb
MF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBYWVpBPFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBiKQog
ewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhi
KTsKQEAgLTQ1NywyMSArNjMyLDIyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXIKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCisKIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEZ1bmN0b3I+IGNvbnN0ZXhwciBkZWNsdHlwZShhdXRvKSBjYWxsV2l0aENv
bG9yVHlwZShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgRnVuY3RvciYmIGZ1bmN0b3IpCiB7CiAgICAgc3dpdGNoIChjb2xvclNwYWNl
KSB7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc1NSR0JBKGNvbXBvbmVudHMpKTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9y
KSwgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBD
b2xvclNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzTGluZWFyU1JHQkEoY29tcG9uZW50cykpOworICAg
ICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBt
YWtlRnJvbUNvbXBvbmVudHM8TGluZWFyU1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAgICBjYXNl
IENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAg
ICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBt
YWtlRnJvbUNvbXBvbmVudHM8RGlzcGxheVAzPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBD
b2xvclNwYWNlOjpMYWI6Ci0gICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8
RnVuY3Rvcj4oZnVuY3RvciksIGFzTGFiKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25l
bnRzPExhYjxUPj4oY29tcG9uZW50cykpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIGFzU1JHQkEoY29tcG9uZW50cykpOworICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZv
cndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTxUPj4oY29t
cG9uZW50cykpOwogfQogCiAvLyBQYWNrZWQgQ29sb3IgRm9ybWF0cwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIFNSR0JBPHVpbnQ4
X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkcKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwg
MCB9OwogICAgIGlmIChhID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KGZhc3REaXZpZGVCeTI1NShyICogYSksIGZh
c3REaXZpZGVCeTI1NShnICogYSksIGZhc3REaXZpZGVCeTI1NShiICogYSksIGEpOworICAgIHJl
dHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KGZh
c3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVCeTI1NShnICogYSksIGZhc3REaXZpZGVC
eTI1NShiICogYSksIGEpOwogfQogCiBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGlu
ZyhTUkdCQTx1aW50OF90PiBjb2xvcikKQEAgLTg4LDcgKzg4LDcgQEAgU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQgogICAgICAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07
CiAgICAgaWYgKGEgPT0gMjU1KQogICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIGNs
YW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgMjU0KSwg
ZmFzdERpdmlkZUJ5MjU1KGcgKiBhICsgMjU0KSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsgMjU0
KSwgYSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxTUkdC
QTx1aW50OF90Pj4oZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgMjU0KSwgZmFzdERpdmlkZUJ5MjU1
KGcgKiBhICsgMjU0KSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsgMjU0KSwgYSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90
IGMsIHVpbnQ4X3QgYSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBTUkdCQTx1aW50OF90PiB1bnByZW11
bHRpcGxpZWQoU1JHQkE8dWluCiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKICAgICBp
ZiAoIWEgfHwgYSA9PSAyNTUpCiAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4gY2xh
bXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPih1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHIs
IGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGcsIGEpLCB1bnByZW11bHRpcGxpZWRD
b21wb25lbnRCeXRlKGIsIGEpLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50
c0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+Pih1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRl
KHIsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGcsIGEpLCB1bnByZW11bHRpcGxp
ZWRDb21wb25lbnRCeXRlKGIsIGEpLCBhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMiArNDUsMTQgQEAg
U1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4pOwogU1JHQkE8dWludDhfdD4gdW5w
cmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+KTsKIAotdWludDhfdCBjb252ZXJ0UHJlc2NhbGVk
VG9Db21wb25lbnRCeXRlKGZsb2F0KTsKK3VpbnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxv
YXRUb1NSR0JBQnl0ZShmbG9hdCk7CiAKLXVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShm
bG9hdCk7Ci1jb25zdGV4cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCk7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRCeXRlQWxwaGFUbyh1aW50OF90KTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEZsb2F0QWxwaGFUbyhmbG9hdCk7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciB1aW50OF90IGNsYW1wVG9Db21w
b25lbnRCeXRlKENvbXBvbmVudFR5cGUpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlw
ZT4gY29uc3RleHByIGZsb2F0IGNsYW1wVG9Db21wb25lbnRGbG9hdChDb21wb25lbnRUeXBlKTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvKHVpbnQ4X3Qp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbyhmbG9hdCk7
Ci0KLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9y
VHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8Zmxv
YXQ+Jik7Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBj
b25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3Qg
Q29sb3JUeXBlPHVpbnQ4X3Q+Jik7Ci0KLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBl
bmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xv
clR5cGU8dWludDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKENvbXBvbmVudFR5cGUuLi4pOwot
dGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUu
Li4gQ29tcG9uZW50VHlwZT4gY29uc3RleHByIENvbG9yVHlwZTxmbG9hdD4gY2xhbXBUb0NvbXBv
bmVudEZsb2F0cyhDb21wb25lbnRUeXBlLi4uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IFQgY29udmVydFRvKGNvbnN0IFUmKTsKK3RlbXBsYXRlPD4gU1JHQkE8ZmxvYXQ+IGNv
bnZlcnRUbyhjb25zdCBTUkdCQTx1aW50OF90PiYpOwordGVtcGxhdGU8PiBTUkdCQTx1aW50OF90
PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hO
b25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmLCBGdW5jdG9yJiYpOwogCkBAIC03Nyw3
MSArNjksNDkgQEAgY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbgogY29u
c3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKIAotaW5saW5lIHVp
bnQ4X3QgY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewotICAgIHJl
dHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYpLCAwbCwgMjU1bCk7Ci19Ci0KLWlubGluZSB1
aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKLXsKLSAgICByZXR1cm4gc3Rk
OjpjbGFtcChzdGQ6Omxyb3VuZChmICogMjU1LjBmKSwgMGwsIDI1NWwpOwotfQotCi1jb25zdGV4
cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCBieXRlKQoraW5saW5lIHVp
bnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZShmbG9hdCB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gYnl0ZSAvIDI1NS4wZjsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6
Omxyb3VuZCh2YWx1ZSksIDBsLCAyNTVsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9u
ZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xhbXBUb0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50
VHlwZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4o
Y29tcG9uZW50LCAwLCAyNTUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb21wb25lbnRUeXBl
PiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVudFR5cGUgY29t
cG9uZW50KQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wPENvbXBvbmVudFR5cGU+KGNvbXBvbmVu
dCwgMCwgMSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3RleHByIHVpbnQ4X3QgY29udmVydENvbXBv
bmVudEJ5dGVUbzx1aW50OF90Pih1aW50OF90IHZhbHVlKQordGVtcGxhdGU8PiBjb25zdGV4cHIg
dWludDhfdCBjb252ZXJ0Qnl0ZUFscGhhVG88dWludDhfdD4odWludDhfdCB2YWx1ZSkKIHsKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPD4gY29uc3RleHByIGZsb2F0IGNvbnZlcnRD
b21wb25lbnRCeXRlVG88ZmxvYXQ+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNvbnN0ZXhw
ciBmbG9hdCBjb252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+KHVpbnQ4X3QgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWUg
LyAyNTUuMGY7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIHVpbnQ4X3QgY29udmVydENvbXBvbmVu
dEZsb2F0VG88dWludDhfdD4oZmxvYXQgdmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSB1aW50OF90
IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oZmxvYXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0
ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0ZTw+IGlu
bGluZSBmbG9hdCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4oZmxvYXQgdmFsdWUpCit0
ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252ZXJ0RmxvYXRBbHBoYVRvPGZsb2F0PihmbG9hdCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEZsb2F0KHZhbHVlKTsKKyAgICBy
ZXR1cm4gY2xhbXBlZEFscGhhKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5h
bWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3RlbXBsYXRl
PD4gaW5saW5lIFNSR0JBPGZsb2F0PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8dWludDhfdD4mIGNv
bG9yKQogewotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsK
LSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMF0pLCBjb252
ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbM10pIH07
Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUZsb2F0ID0gW10odWludDhfdCB2YWx1ZSkgLT4g
ZmxvYXQgeworICAgICAgICByZXR1cm4gdmFsdWUgLyAyNTUuMGY7CisgICAgfTsKIAotdGVtcGxh
dGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
VHlwZTxmbG9hdD4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbnN0IENvbG9yVHlwZTx1aW50
OF90PiYgY29sb3IpCi17CiAgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNb
MF0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzFdKSwgY29udmVydFRvQ29t
cG9uZW50RmxvYXQoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBv
bmVudHNbM10pIH07CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRz
WzBdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzFdKSwgY29udmVydFRvU1JHQkFG
bG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzNdKSB9
OwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNs
YW1wVG9Db21wb25lbnRCeXRlcyhDb21wb25lbnRUeXBlLi4uIGNvbXBvbmVudHMpCit0ZW1wbGF0
ZTw+IGlubGluZSBTUkdCQTx1aW50OF90PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzKS4u
LiB9OwotfQorICAgIGF1dG8gY29udmVydFRvU1JHQkFCeXRlID0gW10oZmxvYXQgdmFsdWUpIC0+
IHVpbnQ4X3QgeworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSAq
IDI1NS4wZiksIDBsLCAyNTVsKTsKKyAgICB9OwogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFt
ZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4
cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFtcFRvQ29tcG9uZW50RmxvYXRzKENvbXBvbmVudFR5cGUu
Li4gY29tcG9uZW50cykKLXsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29tcG9uZW50RmxvYXQoY29t
cG9uZW50cykuLi4gfTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbMF0pLCBj
b252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb1NSR0JBQnl0ZShjb21w
b25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbM10pIH07CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNv
bG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9y
LCBGdW5jdG9yJiYgZnVuY3RvcikKQEAgLTE1Nyw1MCArMTI3LDYxIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnUKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
Y29uc3RleHByIENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5
cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCiB7CiAgICAgYXV0byBjb3B5ID0gY29s
b3I7Ci0gICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5cGUoY29w
eS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Qnl0ZUFs
cGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsK
ICAgICByZXR1cm4gY29weTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xv
clR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxv
YXQgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNvcHkgPSBjb2xvcjsKLSAgICBjb3B5LmFs
cGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJy
aWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CiAgICAgcmV0dXJuIGNv
cHk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlw
ZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3Is
IHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvckJ5TW9kaWZp
bmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFtdIChhdXRvIGNvbXBvbmVudCkgewotICAg
ICAgICByZXR1cm4gQ29tcG9uZW50VHJhaXRzPGRlY2x0eXBlKGNvbXBvbmVudCk+OjptYXhWYWx1
ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVu
dEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7Ci0gICAgcmV0dXJu
IGNvcHk7CisgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUp
OworCisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAg
IGF1dG8gY29weSA9IGNvbXBvbmVudHM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MzsgKytpKQorICAgICAgICBjb3B5W2ldID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzW2ldLm1h
eCAtIGNvbXBvbmVudHNbaV07CisgICAgY29weVszXSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOworCisgICAgcmV0
dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFs
cGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCiB7Ci0gICAg
YXV0byBjb3B5ID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBb
XSAoYXV0byBjb21wb25lbnQpIHsKLSAgICAgICAgcmV0dXJuIENvbXBvbmVudFRyYWl0czxkZWNs
dHlwZShjb21wb25lbnQpPjo6bWF4VmFsdWUgLSBjb21wb25lbnQ7Ci0gICAgfSk7Ci0gICAgY29w
eS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihv
dmVycmlkZUFscGhhKTsKLSAgICByZXR1cm4gY29weTsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbG9y
VHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGNvcHlbaV0gPSBDb2xv
clR5cGU6Ok1vZGVsOjpyYW5nZXNbaV0ubWF4IC0gY29tcG9uZW50c1tpXTsKKyAgICBjb3B5WzNd
ID0gY29udmVydEZsb2F0QWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
KG92ZXJyaWRlQWxwaGEpOworCisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5
cGU+KGNvcHkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBi
b29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0
byBtaW4gPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pjo6bWluVmFsdWU7Ci0gICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4pOwogCiAgICAgYXV0byBbYzEsIGMy
LCBjMywgYWxwaGFdID0gY29sb3I7Ci0gICAgcmV0dXJuIGMxID09IG1pbiAmJiBjMiA9PSBtaW4g
JiYgYzMgPT0gbWluICYmIGFscGhhID09IG1heDsKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZXMg
PSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXM7CisgICAgcmV0dXJuIGMxID09IHJhbmdlc1swXS5t
aW4gJiYgYzIgPT0gcmFuZ2VzWzFdLm1pbiAmJiBjMyA9PSByYW5nZXNbMl0ubWluICYmIGFscGhh
ID09IEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1
ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1do
aXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCiB7Ci0gICAgY29uc3RleHByIGF1dG8gbWF4ID0g
Q29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZh
bHVlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBl
OjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4pOwog
CiAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7Ci0gICAgcmV0dXJuIGMxID09
IG1heCAmJiBjMiA9PSBtYXggJiYgYzMgPT0gbWF4ICYmIGFscGhhID09IG1heDsKKyAgICBjb25z
dGV4cHIgYXV0byByYW5nZXMgPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXM7CisgICAgcmV0dXJu
IGMxID09IHJhbmdlc1swXS5tYXggJiYgYzIgPT0gcmFuZ2VzWzFdLm1heCAmJiBjMyA9PSByYW5n
ZXNbMl0ubWF4ICYmIGFscGhhID09IEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KIAogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBs
eUJ5MjU1KHVpbnQxNl90IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkocmV2aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBPcHRpb25h
bDxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXAKICAgICAgICAgY29tcG9uZW50QXJyYXlbaV0gPSBj
b21wb25lbnQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNS
R0JBIHsgY29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJh
eVszXSwgY29tcG9uZW50QXJyYXlbMF0gfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4oU1JHQkEgeyBjb21wb25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNv
bXBvbmVudEFycmF5WzNdLCBjb21wb25lbnRBcnJheVswXSB9KTsKIH0KIAogUmVmPEluYmFuZEdl
bmVyaWNDdWU+IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVz
KENGQXR0cmlidXRlZFN0cmluZ1JlZiBhdHRyaWJ1dGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkocmV2aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6dHJhbnNmb3JtQwogICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
IGFycmF5OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7
CiAgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAg
ICAgIGNvbG9yID0gcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAg
ICAgICAgY29sb3IgPSByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IpOwog
ICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29s
b3IgKiAyNTUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcnJheTsKQEAg
LTExNSw3ICsxMTUsNyBAQCB2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1D
CiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKICAgICAgICAgICAgICAgICBm
bG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJU
b1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvcik7CiAgICAgICAgICAgICAgICAgYXJy
YXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI3MTYxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90
Pj4gcm91bmRBbmQKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KTsKKyAg
ICByZXR1cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IHIsIGcsIGIsIGEgfSk7
CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJl
dmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05h
dGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIENvbG9yIE5h
dGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IKICAgICBpZiAoIXBpeGVsWzNdKQogICAg
ICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICByZXR1cm4gY2xhbXBU
b0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsx
XSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7
CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50
OF90Pj4ocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFsz
XSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwogfQogCiB2b2lkIE5hdGl2
ZUltYWdlOjpjbGVhclN1YmltYWdlcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCShy
ZXZpc2lvbiAyNzE2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDE5ICs5MSwxOSBA
QCBib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OnRyCiB7CiAgICAgc3dpdGNo
IChtX3R5cGUpIHsKICAgICBjYXNlIEdSQVlTQ0FMRTogewotICAgICAgICBjb2xvciA9IGFzU1JH
QkEoZ3JheXNjYWxlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFt
cGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3Vu
dCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAg
IGNvbG9yID0gYXNTUkdCQShzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENv
bG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3Ig
PSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oc2VwaWFDb2xvck1hdHJpeCht
X2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29s
b3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIEhVRV9ST1RBVEU6
IHsKLSAgICAgICAgY29sb3IgPSBhc1NSR0JBKGh1ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50
KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsK
KyAgICAgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oaHVl
Um90YXRlQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgY2FzZSBTQVRVUkFURTogewotICAgICAgICBjb2xvciA9IGFzU1JHQkEoc2F0dXJhdGlvbkNv
bG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRz
PFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1l
ZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNzIsNyArMTcyLDcgQEAgYm9vbCBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aQogICAgIH0KICAgICBjYXNlIEJSSUdI
VE5FU1M6CiAgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9u
ZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7Ci0gICAgICAgICAgICByZXR1cm4gc3Rk
OjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBmKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6OmNsYW1wPGZsb2F0PihtX2Ftb3VudCAqIGNvbXBvbmVudCwgMC4wZiwgMS4wZik7
CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMjI0
LDE1ICsyMjQsNzUgQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gSW52ZXJ0TGlnaHRuZXNzRgog
ICAgIHJldHVybiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgpOwogfQog
CisvLyBGSVhNRTogVGhpcyBzaG91bGQgbGlrZWx5IGp1c3QgdXNlIGh1ZVJvdGF0ZUNvbG9yTWF0
cml4KGFtb3VudCkuCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBodWVSb3RhdGUoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29sb3IsIGZsb2F0IGFtb3VudCkKK3sKKyAgICBh
dXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb2xvcjsKKworICAgIGF1dG8gW21pbiwgbWF4XSA9IHN0
ZDo6bWlubWF4KHsgciwgZywgYiB9KTsKKyAgICBmbG9hdCBjaHJvbWEgPSBtYXggLSBtaW47CisK
KyAgICBmbG9hdCBsaWdodG5lc3MgPSAwLjVmICogKG1heCArIG1pbik7CisgICAgZmxvYXQgc2F0
dXJhdGlvbjsKKyAgICBpZiAoIWNocm9tYSkKKyAgICAgICAgc2F0dXJhdGlvbiA9IDA7CisgICAg
ZWxzZSBpZiAobGlnaHRuZXNzIDw9IDAuNWYpCisgICAgICAgIHNhdHVyYXRpb24gPSAoY2hyb21h
IC8gKG1heCArIG1pbikpOworICAgIGVsc2UKKyAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEg
LyAoMi4wZiAtIChtYXggKyBtaW4pKSk7CisKKyAgICBpZiAoIXNhdHVyYXRpb24pCisgICAgICAg
IHJldHVybiB7IGxpZ2h0bmVzcywgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGFscGhhIH07CisKKyAg
ICBmbG9hdCBodWU7CisgICAgaWYgKCFjaHJvbWEpCisgICAgICAgIGh1ZSA9IDA7CisgICAgZWxz
ZSBpZiAobWF4ID09IHIpCisgICAgICAgIGh1ZSA9ICg2MC4wZiAqICgoZyAtIGIpIC8gY2hyb21h
KSkgKyAzNjAuMGY7CisgICAgZWxzZSBpZiAobWF4ID09IGcpCisgICAgICAgIGh1ZSA9ICg2MC4w
ZiAqICgoYiAtIHIpIC8gY2hyb21hKSkgKyAxMjAuMGY7CisgICAgZWxzZQorICAgICAgICBodWUg
PSAoNjAuMGYgKiAoKHIgLSBnKSAvIGNocm9tYSkpICsgMjQwLjBmOworCisgICAgaWYgKGh1ZSA+
PSAzNjAuMGYpCisgICAgICAgIGh1ZSAtPSAzNjAuMGY7CisKKyAgICBodWUgLz0gMzYwLjBmOwor
CisgICAgLy8gUGVyZm9ybSByb3RhdGlvbi4KKyAgICBodWUgPSBzdGQ6OmZtb2QoaHVlICsgYW1v
dW50LCAxLjBmKTsKKworICAgIGZsb2F0IHRlbXAyID0gbGlnaHRuZXNzIDw9IDAuNWYgPyBsaWdo
dG5lc3MgKiAoMS4wZiArIHNhdHVyYXRpb24pIDogbGlnaHRuZXNzICsgc2F0dXJhdGlvbiAtIGxp
Z2h0bmVzcyAqIHNhdHVyYXRpb247CisgICAgZmxvYXQgdGVtcDEgPSAyLjBmICogbGlnaHRuZXNz
IC0gdGVtcDI7CisgICAgCisgICAgaHVlICo9IDYuMGY7IC8vIGNhbGNIdWUoKSB3YW50cyBodWUg
aW4gdGhlIDAtNiByYW5nZS4KKworICAgIC8vIEh1ZSBpcyBpbiB0aGUgcmFuZ2UgMC02LCBvdGhl
ciBhcmdzIGluIDAtMS4KKyAgICBhdXRvIGNhbGNIdWUgPSBbXShmbG9hdCB0ZW1wMSwgZmxvYXQg
dGVtcDIsIGZsb2F0IGh1ZVZhbCkgeworICAgICAgICBpZiAoaHVlVmFsIDwgMC4wZikKKyAgICAg
ICAgICAgIGh1ZVZhbCArPSA2LjBmOworICAgICAgICBlbHNlIGlmIChodWVWYWwgPj0gNi4wZikK
KyAgICAgICAgICAgIGh1ZVZhbCAtPSA2LjBmOworICAgICAgICBpZiAoaHVlVmFsIDwgMS4wZikK
KyAgICAgICAgICAgIHJldHVybiB0ZW1wMSArICh0ZW1wMiAtIHRlbXAxKSAqIGh1ZVZhbDsKKyAg
ICAgICAgaWYgKGh1ZVZhbCA8IDMuMGYpCisgICAgICAgICAgICByZXR1cm4gdGVtcDI7CisgICAg
ICAgIGlmIChodWVWYWwgPCA0LjBmKQorICAgICAgICAgICAgcmV0dXJuIHRlbXAxICsgKHRlbXAy
IC0gdGVtcDEpICogKDQuMGYgLSBodWVWYWwpOworICAgICAgICByZXR1cm4gdGVtcDE7CisgICAg
fTsKKworICAgIHJldHVybiB7CisgICAgICAgIGNhbGNIdWUodGVtcDEsIHRlbXAyLCBodWUgKyAy
LjBmKSwKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVtcDIsIGh1ZSksCisgICAgICAgIGNhbGNI
dWUodGVtcDEsIHRlbXAyLCBodWUgLSAyLjBmKSwKKyAgICAgICAgYWxwaGEKKyAgICB9OworfQor
CiBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoU1JH
QkE8ZmxvYXQ+JiBjb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIGhzbGEgPSB0b0hTTEEoY29sb3Ip
OwotICAgIAotICAgIC8vIFJvdGF0ZSB0aGUgaHVlIDE4MGRlZy4KLSAgICBoc2xhLmh1ZSA9IHN0
ZDo6Zm1vZChoc2xhLmh1ZSArIDAuNWYsIDEuMGYpOwotICAgIAotICAgIC8vIENvbnZlcnQgYmFj
ayB0byBSR0IuCi0gICAgYXV0byBodWVSb3RhdGVkU1JHQkEgPSB0b1NSR0JBKGhzbGEpOworICAg
IGF1dG8gaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvciksIDAuNWYpOwogICAgIAogICAgIC8vIEFwcGx5IHRoZSBtYXRyaXguIFNlZSBy
ZGFyOi8vcHJvYmxlbS80MTE0NjY1MCBmb3IgaG93IHRoaXMgbWF0cml4IHdhcyBkZXJpdmVkLgog
ICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDw1LCAzPiB0b0RhcmtNb2RlTWF0cml4IHsKQEAgLTI0
MCw3ICszMDAsNyBAQCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6dHJhCiAg
ICAgICAgIDAuMDMwZiwgLTAuNzQxZiwgLTAuMDg5ZiwgMC4wZiwgMS4wZiwKICAgICAgICAgMC4w
MzBmLCAgMC4wNTlmLCAtMC44OTBmLCAwLjBmLCAxLjBmCiAgICAgfTsKLSAgICBjb2xvciA9IGFz
U1JHQkEodG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhodWVSb3RhdGVkU1JHQkEpKSk7CisgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdD
b21wb25lbnRzPFNSR0JBPGZsb2F0Pj4odG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTI1MiwxNiArMzEyLDExIEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3Bl
cmF0aW9uOjppbnYKICAgICAgICAgLTAuMDQ5ZiwgLTEuMzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4y
NWYsCiAgICAgICAgIC0wLjA0OWYsIC0wLjA5N2YsIC0xLjEwNGYsIDAuMGYsIDEuMjVmCiAgICAg
fTsKLSAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRNb2RlID0gYXNTUkdCQSh0b0xpZ2h0TW9kZU1h
dHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikp
KTsKLQotICAgIC8vIENvbnZlcnQgdG8gSFNMLgotICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb252
ZXJ0ZWRUb0xpZ2h0TW9kZSk7CisgICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVu
dHMgPSB0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikpOwogCi0gICAgLy8gSHVlIHJvdGF0ZSBieSAxODBkZWcuCi0gICAg
aHNsYS5odWUgPSBzdGQ6OmZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKKyAgICBhdXRvIGh1
ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoY29udmVydGVkVG9MaWdodE1vZGVD
b21wb25lbnRzLCAwLjVmKTsKIAotICAgIC8vIEFuZCByZXR1cm4gUkdCLgotICAgIGNvbG9yID0g
dG9TUkdCQShoc2xhKTsKKyAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8
ZmxvYXQ+PihodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNzE2MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRp
b25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoc1JHQkFDb2xvcik7CisgICAg
Y29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHNSR0JBQ29sb3IpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0xMzYsNyArMTM2LDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjpp
bnZlcnNlVHJhbnNmb3JtQwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoc1JHQkFDb2xvcik7CisgICAgY29sb3Ig
PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHNSR0JBQ29sb3IpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Db2xvckd0ay5jcHAJKHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JHQkEm
IGNvbG9yKQotICAgIDogQ29sb3IoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBzdGF0
aWNfY2FzdDxmbG9hdD4oY29sb3IucmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmdyZWVu
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3IuYWxwaGEpIH0pKQorICAgIDogQ29sb3IoY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdC
QSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci5hbHBoYSkgfSkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI3MTYxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsMTMgKzkyLDEzIEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90
Pj4gbWFrZVNpbXAKICAgICAgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKICAgICAgICAgW29mZnNj
cmVlblJlcCBnZXRQaXhlbDpwaXhlbCBhdFg6MCB5OjBdOwogCi0gICAgICAgIHJldHVybiBjbGFt
cFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIHBp
eGVsWzNdKTsKKyAgICAgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWlu
dDhfdD4+KHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIHBpeGVsWzNdKTsKICAgICB9CiAK
ICAgICBbcmdiQ29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50
IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBz
dGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVu
Q29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYWxwaGEpIH0pOworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+
KFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlZENvbXBvbmVudCksIHN0YXRpY19jYXN0PGZs
b2F0PihncmVlbkNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihibHVlQ29tcG9uZW50KSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KTsKIH0KIAogQ29sb3IgY29sb3JGcm9tTlNDb2xv
cihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI3MTYxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBD
b2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQotICAgIDogQ29sb3IoY29udmVydFRvQ29t
cG9uZW50Qnl0ZXMoU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0p
KQorICAgIDogQ29sb3IoY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IGNvbG9yLnIs
IGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OnNldEFjdGl2ZUwKIAogQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPiBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6YnJ1c2hXaXRoQ29sb3IoY29uc3QgRDJEMV9DT0xPUl9GJiBjb2xvcikKIHsK
LSAgICBhdXRvIGNvbG9yS2V5ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBjb2xv
ci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOworICAgIGF1dG8gY29sb3JLZXkgPSBj
b252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3Iu
YiwgY29sb3IuYSB9KTsKIAogICAgIGlmICghY29sb3JLZXkpIHsKICAgICAgICAgaWYgKCFtX3pl
cm9CcnVzaCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0JKHJl
dmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBDb2xvciBjb2xvckZyb21VSUNvbG9y
KFVJQ29sb3IgKmNvbG9yKQogCiAgICAgW2NvbG9yIGdldFJlZDomcmVkQ29tcG9uZW50IGdyZWVu
OiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZhbHBoYV07CiAKLSAg
ICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9h
dD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEp
IH0pOworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHJlZENvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihncmVlbkNvbXBv
bmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihibHVlQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGFscGhhKSB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMjcxNjE5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01MDYsNyArNTA2LDcgQEAgc3RhdGljIFNSR0JBPHVpbnQ4X3Q+IG1lbnVCYWNrZ3Jv
dW5kQ29sbwogICAgIE5TVUludGVnZXIgcGl4ZWxbNF07CiAgICAgW29mZnNjcmVlblJlcCBnZXRQ
aXhlbDpwaXhlbCBhdFg6MCB5OjBdOwogCi0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOworICAgIHJl
dHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PihwaXhlbFswXSwgcGl4
ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lTWFjOjpz
eXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpP
cHRpb25zPiBvcHRpb25zKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVG
dW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjcxNjE5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgYmx1ZSA9IEJh
c2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJsdWUsIHNpbXBs
ZVRvLmJsdWUsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWUsIHNpbXBsZUFuaW1hdGVkLmJs
dWUpOwogICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVh
dENvdW50LCBzaW1wbGVGcm9tLmFscGhhLCBzaW1wbGVUby5hbHBoYSwgc2ltcGxlVG9BdEVuZE9m
RHVyYXRpb24uYWxwaGEsIHNpbXBsZUFuaW1hdGVkLmFscGhhKTsKICAgICAgICAgCi0gICAgICAg
IGFuaW1hdGVkID0gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihzdGQ6Omxyb3VuZChyZWQp
LCBzdGQ6Omxyb3VuZChncmVlbiksIHN0ZDo6bHJvdW5kKGJsdWUpLCBzdGQ6Omxyb3VuZChhbHBo
YSkpOworICAgICAgICBhbmltYXRlZCA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWlu
dDhfdD4+KHN0ZDo6bHJvdW5kKHJlZCksIHN0ZDo6bHJvdW5kKGdyZWVuKSwgc3RkOjpscm91bmQo
Ymx1ZSksIHN0ZDo6bHJvdW5kKGFscGhhKSk7CiAgICAgfQogCiAgICAgT3B0aW9uYWw8ZmxvYXQ+
IGNhbGN1bGF0ZURpc3RhbmNlKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0
IFN0cmluZyYgdG8pIGNvbnN0IG92ZXJyaWRlCkBAIC0xMjAsNyArMTIwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAK
ICAgICAgICAgLy8gSWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRv
IDEwMCUgb3BhcXVlLgotICAgICAgICBtX3RvID0gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JB
PihzaW1wbGVUby5yZWQgKyBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8uZ3JlZW4gKyBzaW1wbGVG
cm9tLmdyZWVuLCBzaW1wbGVUby5ibHVlICsgc2ltcGxlRnJvbS5ibHVlKTsKKyAgICAgICAgbV90
byA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHNpbXBsZVRvLnJlZCAr
IHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBs
ZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyBDb2xvciBj
b2xvckZyb21TdHJpbmcoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI3MTYxOSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDEtMTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgorCisgICAgICAgIFJld29yayBjb2xvciBjbGFtcGluZyBsb2dpYyB0byBiZSBtb3Jl
IGNvbnNpc3RlbnQgYW5kIGNsZWFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjA3MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcDoKKyAgICAg
ICAgKHdlYmtpdENvbG9yVG9XZWJDb3JlQ29sb3IpOgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5l
dyBjb252ZXJ0VG88PiBmdW5jdGlvbnMuCisKIDIwMjEtMDEtMTkgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNjk4NjUp
IE1haWwncyBjb250ZXh0IG1lbnUgd2hlbiByaWdodCBjbGlja2luZyBvbiBhIGxpbmsgZG9lcyBu
b3QgY29udGFpbiBjb3JyZWN0IGVudHJpZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyNzE2MTkpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNyArNzUsNyBAQCBHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdENvbG9yLCB3ZWJr
aXRfCiAKIGNvbnN0IFdlYkNvcmU6OkNvbG9yIHdlYmtpdENvbG9yVG9XZWJDb3JlQ29sb3IoV2Vi
S2l0Q29sb3IqIGNvbG9yKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb252ZXJ0VG9Db21wb25l
bnRCeXRlcyhXZWJDb3JlOjpTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ci0+Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpIH0pOworICAgIHJldHVy
biBXZWJDb3JlOjpjb252ZXJ0VG88V2ViQ29yZTo6U1JHQkE8dWludDhfdD4+KFdlYkNvcmU6OlNS
R0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3ItPmdyZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ibHVlKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yLT5hbHBoYSkgfSk7CiB9CiAKIHZvaWQgd2Via2l0Q29sb3JGaWxsRnJv
bVdlYkNvcmVDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgd2ViQ29yZUNvbG9yLCBXZWJLaXRD
b2xvciogY29sb3IpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNzE2MTkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wMS0xOCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5nIGxvZ2ljIHRvIGJlIG1v
cmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgVXBkYXRlIHRlc3RzIHRvIHVzZSBuZXcgY29udmVy
dFRvPD4gZnVuY3Rpb25zLgorCiAyMDIxLTAxLTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJk
QGFwcGxlLmNvbT4KIAogICAgICAgICBbY29tbWl0LXF1ZXVlXSBDYWNoZSBjcmVkZW50aWFscyBm
b3IgaHR0cHMgaW5zdGVhZCBvZiBodHRwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNzE2MTkpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiAgICAgCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNz
KTsKICAgICAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0g
Y29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVD
VF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC02Miw3ICs2Miw3IEBAIFRF
U1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxp
Z2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsK
IAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0
b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0
VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNv
bG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTk0LDcgKzk0LDcgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfR3JlZW4pCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNz
KCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byBy
b3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xh
Q29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApA
QCAtMTEwLDcgKzExMCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiAKICAgICBFWFBF
Q1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0g
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JH
QkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxT
UkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3Is
IHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBAIFRFU1QoQ29sb3Is
IFJHQlRvSFNMX0RhcmtHcmF5KQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdo
dG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENv
bG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBh
dXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JB
KGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwog
fQogCkBAIC0xNDIsNyArMTQyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkKIAogICAg
IEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7
CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
dG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVy
dFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShj
b2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xNTgsNyArMTU4LDcgQEAgVEVTVChD
b2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxp
Z2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENv
bG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNzE2MTkpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkp
CiAgICAgfQogCiAgICAgYXV0byBjb21wb25lbnRCeXRlcyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1
LCAxMjgsIDYzLCAxMjcgfTsKLSAgICBDb2xvciByZ2IxIHsgY29udmVydFRvQ29tcG9uZW50Rmxv
YXRzKGNvbXBvbmVudEJ5dGVzKSB9OworICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG88U1JHQkE8
ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykgfTsKICAgICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0
ZXMgfTsKICAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7CiAgICAgRVhQRUNUX05FKHJnYjIsIHJn
YjEpOwpAQCAtMTM4LDcgKzEzOCw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKICAgICB9
CiAKICAgICBhdXRvIGNvbXBvbmVudEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwg
NjMsIDEyNyB9OwotICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29t
cG9uZW50Qnl0ZXMpIH07CisgICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+
KGNvbXBvbmVudEJ5dGVzKSB9OwogICAgIENvbG9yIHJnYjIgeyBjb21wb25lbnRCeXRlcyB9Owog
ICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkpOwogfQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHJldmlzaW9uIDI3MTYx
OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgV2ViQ29yZTo6Q29sb3IgVGVzdFBERlBhZ2U6
OmNvbG9yQXRQb2ludAogCiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29s
b3I6OnRyYW5zcGFyZW50QmxhY2s7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNsYW1wVG9Db21wb25l
bnRCeXRlczxXZWJDb3JlOjpTUkdCQT4ociAqIDI1NSAvIGEsIGcgKiAyNTUgLyBhLCBiICogMjU1
IC8gYSwgYSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Om1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNl
cHRBbHBoYTxXZWJDb3JlOjpTUkdCQTx1aW50OF90Pj4ociAqIDI1NSAvIGEsIGcgKiAyNTUgLyBh
LCBiICogMjU1IC8gYSwgYSk7CiB9CiAKIC8vIERvY3VtZW50cwo=
</data>
<flag name="commit-queue"
          id="435757"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417972</attachid>
            <date>2021-01-20 08:29:57 -0800</date>
            <delta_ts>2021-01-20 09:36:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>90586</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcyIEBACiAyMDIxLTAxLTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIG9mIGFkZGluZyBzdXBwb3J0
IGZvciBFeHRlbmRlZC1zUkdCIHRvIGNvbG9yIHR5cGVzLAorICAgICAgICB0aGlzIGFkZHMgY29u
c3RleHByIG1ldGFkYXRhIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb2xvcgorICAg
ICAgICB0eXBlcyB3aXRoIHRoZSBjb3JyZWN0IGNsYW1wZWQgKG9yIHVuY2xhbXBlZCkgdmFsdWVz
IGFuZCBhZG9wdHMgdGhlbQorICAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuCisKKyAg
ICAgICAgLSBSZW1vdmVzICJjb21wb25lbnQgYnl0ZXMiIGFuZCAiY29tcG9uZW50IGZsb2F0cyIg
Y29uY2VwdHMgcmVwbGFjaW5nCisgICAgICAgICAgd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIGNv
bG9yIHR5cGVzIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnM6CisgICAgICAgICAgCisgICAgICAgICAg
ICBjb252ZXJ0VG9Db21wb25lbnRCeXRlcy9jb252ZXJ0VG9Db21wb25lbnRGbG9hdHMgLT4gY29u
dmVydFRvPENvbG9yVHlwZTxUPj4KKyAgICAgICAgICAgIGNsYW1wVG9Db21wb25lbnRCeXRlcy9j
bGFtcFRvQ29tcG9uZW50RmxvYXRzIC0+IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8Q29sb3JUeXBl
PFQ+PgorCisgICAgICAgIC0gQWRkcyBNb2RlbCB0eXBlIGFsaWFzZXMgdG8gZWFjaCBjb2xvciB0
eXBlIHdoaWNoIGNhbiBzcGVjaWZ5IHRyYWl0cyAKKyAgICAgICAgICBmb3IgdGhhdCB0eXBlIG9m
IGNvbG9yLiBUaGVzZSB0cmFpdHMgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgdmFsaWQgCisg
ICAgICAgICAgY29tcG9uZW50IHJhbmdlcyBhbmQgd2hldGhlciB0aGUgY29sb3IgY2FuIGJlIGlu
dmVydGVkLiBNb3JlIHdpbGwgYmUgCisgICAgICAgICAgYWRkZWQgKGxpa2Ugd2hpdGUgcG9pbnQg
YW5kIGJhc2UgY29sb3Igc3BhY2UpIHRvIGhlbHAgc2ltcGxpZnkgdXRpbGl0eSAKKyAgICAgICAg
ICBhbmQgY29udmVyc2lvbiBjb2RlLiAKKworICAgICAgICAtIEFkZHMgYXNzZXJ0aW9ucyB0byBl
YWNoIGNvbG9yIHR5cGUgY29uc3RydWN0b3IgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZAorICAgICAg
ICAgIGFyZSB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlcyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBNb2Rl
bCkuCisKKyAgICAgICAgLSBSZW1vdmVkIGFzRm9vKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYp
IGZ1bmN0aW9ucywgd2hpY2ggd2VyZSBhIGxpdHRsZSAKKyAgICAgICAgICB0byAgc2ltaWxhcmx5
IG5hbWVkIHRvIHRoZSB0b0ZvbygpIGZ1bmN0aW9ucy4gSW5zdGVhZCwgdGhlIGdlbmVyaWMgCisg
ICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZTxUPj4gKG9yIGl0J3MgY2xhbXBp
bmcgdmFyaWFudHMpIGNhbiBiZSB1c2VkCisgICAgICAgICAgdG8gY29udmVydCBmcm9tIENvbG9y
Q29tcG9uZW50cyB0byBjb2xvciB0eXBlcy4KKworICAgICAgICAtIEFkZHMgQWxwaGFUcmFpdHMg
dG8gbW9kZWwgYWxwaGEgdmFsdWVzIGFzIHRoZXNlIGFyZSBjb25zaXN0ZW50IGJldHdlZW4KKyAg
ICAgICAgICBjb2xvciB0eXBlcyBhbmQgb25seSBjaGFuZ2UgYmFzZWQgb24gY29tcG9uZW50IHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6
CisKKzIwMjEtMDEtMTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCiAgICAgICAg
ICJSZW1vdmUgcmVtYWluaW5nIG5vbi1zdGFuZGFyZCBDTVlLQSBzdXBwb3J0IGZyb20gQ2FudmFz
IgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNzYw
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI3
MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHN0
YXRpYyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXgKIAogI2lmIEVOQUJMRShJTlBV
VF9UWVBFX0NPTE9SKQogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBj
b2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9yVmFsdWUoKSk7
CiAgICAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYoInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7CiAgICAgfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjcx
NjQ2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NDcsNyArMTQ0Nyw3IEBA
IC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmEKICAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkgewot
ICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRv
PFNSR0JBPGZsb2F0Pj4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAl
Ny41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjcx
NjQ2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzODUsNyArMjM4NSw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJu
IEAoYmFja2luZ09iamVjdC0+aXNTZWxlY3RlZCgpKTsKIAogICAgICAgICBpZiAoYmFja2luZ09i
amVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0cyhiYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICAg
ICAgYXV0byBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGJhY2tpbmdPYmplY3QtPmNv
bG9yVmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNv
bG9yLmJsdWVdOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkQ1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyNzE2NDYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkKSkKICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29s
b3IuZ3JlZW4pKQogICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9y
LmJsdWUpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgY29udmVydFRv
Q29tcG9uZW50RmxvYXQobV9jb2xvci5hbHBoYSkpKQorICAgICAgICAsIG1fYWxwaGEoY3JlYXRl
V3JhcHBlcihvd25lciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5j
cHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyRmFzdFBhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8
U1JHQkE+KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBl
ZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2Vu
dGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0
byBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMgd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JB
PHVpbnQ4X3Q+LgorICAgICAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1
aW50OF90Pj4ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOyAvLyBGSVhNRTogQWxyZWFkeSBjbGFt
cGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJj
ZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBhbmQgcmVwbGFjZSBjYWxs
IHRvIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+IHdpdGggZGlyZWN0IGNv
bnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KICAgICB9CiAKICAgICAvLyBUcnkgcmdiKCkg
c3ludGF4LgpAQCAtNTA1LDcgKzUwNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlm
IChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
ICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHJlZCwgZ3JlZW4sIGJsdWUp
OyAvLyBGSVhNRTogQWxyZWFkeSBjbGFtcGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVw
ZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4g
dWludDhfdCBhbmQgcmVwbGFjZSBjYWxsIHRvIGNsYW1wVG9Db21wb25lbnRCeXRlcyB3aXRoIGRp
cmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWludDhfdD4uCisgICAgICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PihyZWQsIGdyZWVuLCBibHVlKTsgLy8g
RklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUg
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4
X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4
X3Q+PiB3aXRoIGRpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWludDhfdD4uCiAgICAgfQog
CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI3
MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIHN0YXRpYyB1aW50OF90
IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSAKICAgICBpZiAoaXNQZXJjZW50YWdlKQogICAgICAg
ICB2YWx1ZSA9IHZhbHVlIC8gMTAwLjAgKiAyNTUuMDsKIAotICAgIHJldHVybiBjb252ZXJ0UHJl
c2NhbGVkVG9Db21wb25lbnRCeXRlKHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxl
ZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJH
QlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC03MzksNyArNzM5LDcg
QEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgICAgICB9Ci0gICAgICAg
IGFscGhhQ29tcG9uZW50ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSk7CisgICAgICAg
IGFscGhhQ29tcG9uZW50ID0gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90PihhbHBoYSk7CiAg
ICAgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQpAQCAtNzk0LDcgKzc5NCw3IEBAIHN0YXRp
YyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQo
KSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9u
ZW50Qnl0ZXModG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFy
cmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSkpOworICAg
IHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoSFNMQTxmbG9hdD4geyBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU9w
dGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNzE2NDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTYwMSw3ICs2MDEsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Igd2ls
bCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25lIGNv
bG9yIGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmxpZ2h0
bmVzcyA9IDAuNWY7CiAgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmFscGhhICo9IDAuMzhm
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQSho
c2xhKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVDdXJyZW50Y29sb3IpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IsIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
dW5kZXJsaW5lQ29sb3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAy
NzE2NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAzLDYgKzkwMyw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVzZXQKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgT3B0aW9uYWw8
ZmxvYXQ+IGFscGhhKQogewogICAgIGlmIChhbHBoYSkgeworICAgICAgICBpZiAoc3RkOjppc25h
bigqYWxwaGEpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHNldFN0cm9rZVN0eWxl
KENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIGFs
cGhhLnZhbHVlKCksIGNhbnZhc0Jhc2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
OTE3LDcgKzkyMCwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoZmxv
YXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyBn
cmF5TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSB9OworICAgIGlmIChzdGQ6Omlz
bmFuKGdyYXlMZXZlbCkgfHwgc3RkOjppc25hbihhbHBoYSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8gY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpOwogICAgIGlmIChzdGF0ZSgpLnN0
cm9rZVN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRT
dHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwpAQCAtOTI1LDcgKzkzMSwxMCBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQg
YiwgZmxvYXQgYSkKIHsKLSAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyByLCBnLCBiLCBhIH07Cisg
ICAgaWYgKHN0ZDo6aXNuYW4ocikgfHwgc3RkOjppc25hbihnKSB8fCBzdGQ6OmlzbmFuKGIpICB8
fCBzdGQ6OmlzbmFuKGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0gbWFr
ZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KHIsIGcsIGIsIGEpOwogICAgIGlmIChz
dGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsK
ICAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwpAQCAtOTM0LDYgKzk0Myw5
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3QKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbENvbG9yKGNvbnN0IFN0cmluZyYgY29sb3Is
IE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkKIHsKICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgaWYg
KCFzdGQ6OmlzbmFuKCphbHBoYSkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgc2V0
RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEo
Y29sb3IsIGFscGhhLnZhbHVlKCksIGNhbnZhc0Jhc2UoKSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtOTQ4LDcgKzk2MCwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldEZpCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbENv
bG9yKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgYXV0byBjb2xvciA9IFNS
R0JBIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAo
c3RkOjppc25hbihncmF5TGV2ZWwpIHx8IHN0ZDo6aXNuYW4oYWxwaGEpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGNvbG9yID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9h
dD4+KGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKTsKICAgICBpZiAoc3Rh
dGUoKS5maWxsU3R5bGUuaXNFcXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJuOwogICAg
IHNldEZpbGxTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwpAQCAtOTU2LDcgKzk3MSwxMCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpCiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0
IGIsIGZsb2F0IGEpCiB7Ci0gICAgYXV0byBjb2xvciA9IFNSR0JBIHsgciwgZywgYiwgYSB9Owor
ICAgIGlmIChzdGQ6OmlzbmFuKHIpIHx8IHN0ZDo6aXNuYW4oZykgfHwgc3RkOjppc25hbihiKSAg
fHwgc3RkOjppc25hbihhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBjb2xvciA9IG1h
a2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+PihyLCBnLCBiLCBhKTsKICAgICBpZiAo
c3RhdGUoKS5maWxsU3R5bGUuaXNFcXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwpAQCAtMTI4OSw2ICsxMzA3LDkg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdHJvawogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nLCBPcHRpb25hbDxmbG9h
dD4gYWxwaGEpCiB7CisgICAgaWYgKGFscGhhICYmICFzdGQ6OmlzbmFuKCphbHBoYSkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7
CiAgICAgaWYgKCFjb2xvclN0cmluZy5pc051bGwoKSkgewogICAgICAgICBjb2xvciA9IHBhcnNl
Q29sb3JPckN1cnJlbnRDb2xvcihjb2xvclN0cmluZywgY2FudmFzQmFzZSgpKTsKQEAgLTEzMDAs
MTIgKzEzMjEsMTggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaAog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhh
KQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZl
bCwgYWxwaGEgfSkpOworICAgIGlmICghc3RkOjppc25hbihncmF5TGV2ZWwpIHx8ICFzdGQ6Omlz
bmFuKGFscGhhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3
aWR0aCwgaGVpZ2h0KSwgYmx1ciwgbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+
KGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7
Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29udmVydFRv
Q29tcG9uZW50Qnl0ZXMoU1JHQkEgeyByLCBnLCBiLCBhIH0pKTsKKyAgICBpZiAoIXN0ZDo6aXNu
YW4ocikgfHwgIXN0ZDo6aXNuYW4oZykgfHwgIXN0ZDo6aXNuYW4oYikgIHx8ICFzdGQ6OmlzbmFu
KGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpLCBibHVyLCBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4ociwgZywg
YiwgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hh
ZG93KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJ
KHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0
eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBDYW52YXNTdHlsZTo6Q2Fu
dmFzU3R5bGUoQ29sb3IgY29sb3IpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25z
dCBTUkdCQTxmbG9hdD4mIGNvbG9yQ29tcG9uZW50cykKLSAgICA6IG1fc3R5bGUoY29udmVydFRv
Q29tcG9uZW50Qnl0ZXMoY29sb3JDb21wb25lbnRzKSkKKyAgICA6IG1fc3R5bGUoY29udmVydFRv
PFNSR0JBPHVpbnQ4X3Q+Pihjb2xvckNvbXBvbmVudHMpKQogewogfQogCkBAIC0xNDgsNyArMTQ4
LDcgQEAgYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENh
bnZhc1N0eWxlOjppc0VxdWl2YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBj
b25zdAogewotICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxl
KSAmJiBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
Y29tcG9uZW50cyk7CisgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1f
c3R5bGUpICYmIFdURjo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0VG88U1JHQkE8dWlu
dDhfdD4+KGNvbXBvbmVudHMpOwogfQogCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNv
bG9yKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZp
c2lvbiAyNzE2NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHN0YXRpYyBD
b2xvciBwYXJzZUNvbG9yKFJlZlB0cjxKU09OOjpPYmoKIAogICAgIGF1dG8gYSA9IGNvbG9yT2Jq
ZWN0LT5nZXREb3VibGUoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKICAgICBpZiAo
IWEpCi0gICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywg
KmIpOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIs
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoKmEpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VDbGFtcGlu
Z0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KCpyLCAqZywgKmIpOworICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KCpyLCAqZywgKmIs
IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oKmEpKTsKIH0KIAogc3RhdGljIENvbG9yIHBh
cnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046Ok9iamVjdCYgY29u
ZmlnT2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmNwcAkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIENvbG9yIENvbG9y
OjpsaWdodGVuZWQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEu
MGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVz
KFNSR0JBIHsgbXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwg
YSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRp
cGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CiB9CiAKIENv
bG9yIENvbG9yOjpkYXJrZW5lZCgpIGNvbnN0CkBAIC0xMDUsNyArMTA1LDcgQEAgQ29sb3IgQ29s
b3I6OmRhcmtlbmVkKCkgY29uc3QKICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0p
OwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYp
OwogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgbXVsdGlwbGll
ciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKKyAgICByZXR1cm4g
Y29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBs
aWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CiB9CiAKIGZsb2F0IENvbG9yOjpsaWdodG5l
c3MoKSBjb25zdApAQCAtMTQxLDcgKzE0MSwxNSBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxw
aGEoZmxvYXQgYWxwaGEpCiBDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9h
dCBhbHBoYSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FsbE9uVW5kZXJseWluZ1R5cGUoWyZdIChj
b25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIC0+IENvbG9yIHsKLSAgICAgICAgcmV0dXJuIGlu
dmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEodW5kZXJseWluZ0NvbG9yLCBhbHBoYSk7Cisg
ICAgICAgIHVzaW5nIENvbG9yVHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZSh1bmRlcmx5aW5n
Q29sb3IpPjsKKworICAgICAgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWVh
bmluZ2Z1bCB1bmRlcnN0YW5kaW5nIG9mIGludmVyc2lvbiB0aGF0IHdvcmtzCisgICAgICAgIC8v
IGJldHRlciBmb3Igbm9uLWludmVydGlibGUgY29sb3IgdHlwZXMgbGlrZSBMYWIgb3IgY29uc2lk
ZXIgcmVtb3ZpbmcgdGhpcyBpbiBmYXZvcgorICAgICAgICAvLyBvZiBhbHRlcm5hdGl2ZXMuCisg
ICAgICAgIGlmIGNvbnN0ZXhwciAoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKQorICAg
ICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEodW5kZXJseWlu
Z0NvbG9yLCBhbHBoYSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBpbnZlcnRl
ZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKHRvU1JHQkEodW5kZXJseWluZ0NvbG9yKSwgYWxwaGEp
OwogICAgIH0pOwogfQogCkBAIC0xNTcsNyArMTY1LDcgQEAgc3RkOjpwYWlyPENvbG9yU3BhY2Us
IENvbG9yQ29tcG9uZW50czxmbAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCiAgICAgICAgIHJl
dHVybiB7IGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCksIGFzRXh0ZW5kZWQoKS5jb21wb25lbnRz
KCkgfTsKLSAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhj
b252ZXJ0VG9Db21wb25lbnRGbG9hdHMoYXNJbmxpbmUoKSkpIH07CisgICAgcmV0dXJuIHsgQ29s
b3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29udmVydFRvPFNSR0JBPGZsb2F0Pj4o
YXNJbmxpbmUoKSkpIH07CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkg
PyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAgOiBhc0lubGluZSgpLmFscGhhID09IDI1NTsg
fQogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNF
eHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiBhc0lubGluZSgpLmFscGhhID4gMDsgfQotICAgIHVp
bnQ4X3QgYWxwaGFCeXRlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gY29udmVydFRv
Q29tcG9uZW50Qnl0ZShhc0V4dGVuZGVkKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9
Ci0gICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8g
YXNFeHRlbmRlZCgpLmFscGhhKCkgOiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhc0lubGluZSgp
LmFscGhhKTsgfQorICAgIHVpbnQ4X3QgYWxwaGFCeXRlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRl
bmRlZCgpID8gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90Pihhc0V4dGVuZGVkKCkuYWxwaGEo
KSkgOiBhc0lubGluZSgpLmFscGhhOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3Qg
eyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBjb252ZXJ0Qnl0
ZUFscGhhVG88ZmxvYXQ+KGFzSW5saW5lKCkuYWxwaGEpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBmbG9hdCBsdW1pbmFuY2UoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdo
dG5lc3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMgd2l0aCBsdW1p
bmFuY2UuCkBAIC0zMzEsMTEgKzMzMSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxU
PiBDb2xvcjo6dG9TCiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQs
IHVpbnQ4X3Q+KQogICAgICAgICAgICAgICAgIHJldHVybiBjb2xvcjsKICAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQotICAgICAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29sb3IpOworICAgICAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+Pihjb2xvcik7CiAgICAgICAgIH0sCiAgICAgICAg
IFtdIChjb25zdCBhdXRvJiBjb2xvcikgewogICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX3NhbWVfdjxULCB1aW50OF90PikKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRv
Q29tcG9uZW50Qnl0ZXModG9TUkdCQShjb2xvcikpOworICAgICAgICAgICAgICAgIHJldHVybiBj
b252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoY29sb3IpKTsKICAgICAgICAgICAgIGlm
IGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQogICAgICAgICAgICAgICAgIHJl
dHVybiB0b1NSR0JBKGNvbG9yKTsKICAgICAgICAgfQpAQCAtMzkxLDE1ICszOTEsMTUgQEAgaW5s
aW5lIHZvaWQgQ29sb3I6OnNldEV4dGVuZGVkQ29sb3IoUmVmPAogCiBpbmxpbmUgYm9vbCBDb2xv
cjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICByZXR1cm4gY29sb3Iu
Y2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgIHJl
dHVybiBXZWJDb3JlOjppc0JsYWNrKGNvbG9yKTsKKyAgICByZXR1cm4gY29sb3IuY2FsbE9uVW5k
ZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1dG8mIHVuZGVybHlpbmdDb2xvcikgeworICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6aXNCbGFjayh1bmRlcmx5aW5nQ29sb3IpOwogICAgIH0pOwogfQogCiBp
bmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICByZXR1cm4gY29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1dG8mIGNvbG9y
KSB7Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKGNvbG9yKTsKKyAgICByZXR1cm4g
Y29sb3IuY2FsbE9uVW5kZXJseWluZ1R5cGUoW10gKGNvbnN0IGF1dG8mIHVuZGVybHlpbmdDb2xv
cikgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6aXNXaGl0ZSh1bmRlcmx5aW5nQ29sb3IpOwog
ICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckJsZW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENvbG9yJiBiYWNrZAog
ICAgIGludCBnID0gKGJhY2tkcm9wRyAqIGJhY2tkcm9wQSAqICgweEZGIC0gc291cmNlQSkgKyAw
eEZGICogc291cmNlQSAqIHNvdXJjZUcpIC8gZDsKICAgICBpbnQgYiA9IChiYWNrZHJvcEIgKiBi
YWNrZHJvcEEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEgKiBzb3VyY2VCKSAv
IGQ7CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihyLCBnLCBiLCBh
KTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4ociwg
ZywgYiwgYSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikK
QEAgLTc4LDcgKzc4LDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9y
KQogICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywgYWxwaGEpOwogICAg
ICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEpOwogCi0gICAgICAg
IHJlc3VsdCA9IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywgYiwgYWxwaGEpOwor
ICAgICAgICByZXN1bHQgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihy
LCBnLCBiLCBhbHBoYSk7CiAKICAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+PSAw
KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDAsNyArMTAwLDcgQEAgQ29sb3IgYmxlbmQoY29u
c3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20gPSBw
cmVtdWx0aXBsaWVkQ2VpbGluZyhmcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpKTsKICAgICBh
dXRvIHByZW11bHRpcGxpZWRUbyA9IHByZW11bHRpcGxpZWRDZWlsaW5nKHRvLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpKTsKIAotICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBjbGFtcFRv
Q29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBt
YWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6
YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8ucmVkLCBwcm9ncmVz
cyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuLCBwcmVt
dWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJl
bXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHByb2dyZXNzKSwKQEAg
LTEyMCw3ICsxMjAsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xv
CiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAg
YXV0byB0b1NSR0IgPSB0by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgIHJldHVybiBj
bGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KAorICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21w
b25lbnRzPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0Iu
cmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
UkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAko
cmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjggKzMyLDc0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9h
dCBjKQorLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgorLy8gaHR0cDovL3d3
dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAor
c3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhclNSR0JNYXRyaXgg
eworICAgICAzLjI0MDQ1NDJmLCAtMS41MzcxMzg1ZiwgLTAuNDk4NTMxNGYsCisgICAgLTAuOTY5
MjY2MGYsICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKKyAgICAgMC4wNTU2NDM0ZiwgLTAuMjA0
MDI1OWYsICAxLjA1NzIyNTJmCit9OworCisvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lr
aS9TUkdCCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9S
R0JfWFlaX01hdHJpeC5odG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+IGxp
bmVhclNSR0JUb1hZWk1hdHJpeCB7CisgICAgMC40MTI0NTY0ZiwgIDAuMzU3NTc2MWYsICAwLjE4
MDQzNzVmLAorICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwKKyAgICAw
LjAxOTMzMzlmLCAgMC4xMTkxOTIwZiwgIDAuOTUwMzA0MWYKK307CisKKy8vIGh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQorc3RhdGljIGNv
bnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeCB7Cisg
ICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlmLCAtMC40MDI3MTA3
ODQ0NTA3MTY4ZiwKKyAgICAtMC44Mjk0ODg5Njk1NjE1NzQ3ZiwgIDEuNzYyNjY0MDYwMzE4MzQ2
M2YsICAwLjAyMzYyNDY4NTg0MTk0MzZmLAorICAgICAwLjAzNTg0NTgzMDI0Mzc4NDVmLCAtMC4w
NzYxNzIzODkyNjgwNDE4ZiwgIDAuOTU2ODg0NTI0MDA3Njg3MmYKK307CisKKy8vIGh0dHBzOi8v
ZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQorc3RhdGlj
IGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeCB7
CisgICAgMC40ODY1NzA5NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4xOTgyMTcy
ODUyMzQzNjNmLAorICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAuNjkxNzM4NTIxODM2NTA2NGYs
IDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKKyAgICAwLjBmLCAgICAgICAgICAgICAgICAwLjA0NTExMzM4
MTg1ODkwMjZmLCAxLjA0Mzk0NDM2ODkwMDk3NmYKK307CisKKy8vIGh0dHA6Ly93d3cuYnJ1Y2Vs
aW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAorc3RhdGljIGNvbnN0
ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7CisgICAgIDAuOTU1NTc2NmYs
IC0wLjAyMzAzOTNmLCAwLjA2MzE2MzZmLAorICAgIC0wLjAyODI4OTVmLCAgMS4wMDk5NDE2Ziwg
MC4wMjEwMDc3ZiwKKyAgICAgMC4wMTIyOTgyZiwgLTAuMDIwNDgzMGYsIDEuMzI5OTA5OGYKK307
CisKKy8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9t
QWRhcHQuaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENjVUb0Q1ME1h
dHJpeCB7CisgICAgIDEuMDQ3ODExMmYsIDAuMDIyODg2NmYsIC0wLjA1MDEyNzBmLAorICAgICAw
LjAyOTU0MjRmLCAwLjk5MDQ4NDRmLCAtMC4wMTcwNDkxZiwKKyAgICAtMC4wMDkyMzQ1ZiwgMC4w
MTUwNDM2ZiwgIDAuNzUyMTMxNmYKK307CisKK2Zsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25l
bnRDbGFtcGluZyhmbG9hdCBjKQogewogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKLSAgICAgICAg
cmV0dXJuIDEyLjkyZiAqIGM7CisgICAgICAgIHJldHVybiBzdGQ6Om1heDxmbG9hdD4oMTIuOTJm
ICogYywgMCk7CiAKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oMS4wNTVmICogc3RkOjpwb3co
YywgMS4wZiAvIDIuNGYpIC0gMC4wNTVmLCAwLCAxKTsKIH0KIAotZmxvYXQgcmdiVG9MaW5lYXJD
b2xvckNvbXBvbmVudChmbG9hdCBjKQorZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENs
YW1waW5nKGZsb2F0IGMpCiB7CiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCi0gICAgICAgIHJldHVy
biBjIC8gMTIuOTJmOworICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KGMgLyAxMi45MmYs
IDApOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsgMC4wNTVmKSAv
IDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCisvLyBHYW1tYSBjb252ZXJzaW9ucy4KKwogTGlu
ZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikK
IHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9y
LnJlZCksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAot
ICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBy
Z2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwKKyAgICAgICAgcmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwKKyAgICAgICAgcmdi
VG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAogICAgICAgICBjb2xv
ci5hbHBoYQogICAgIH07CiB9CkBAIC02MSw5ICsxMDcsOSBAQCBMaW5lYXJTUkdCQTxmbG9hdD4g
dG9MaW5lYXJTUkdCQShjb25zdCBTCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJT
UkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBv
bmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29s
b3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xv
ci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3Iu
Z3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3Iu
Ymx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTcxLDkgKzExNyw5IEBA
IFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGYKIExpbmVhckRpc3BsYXlQ
MzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYgY29sb3Ip
CiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xv
ci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmdyZWVuKSwK
LSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVlKSwKKyAgICAgICAg
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCksCisgICAgICAgIHJn
YlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiksCisgICAgICAgIHJn
YlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwKICAgICAgICAgY29s
b3IuYWxwaGEKICAgICB9OwogfQpAQCAtODEsODEgKzEyNyw0OSBAQCBMaW5lYXJEaXNwbGF5UDM8
ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzCiBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNv
bnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAg
ICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFy
VG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29s
b3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25l
bnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50
Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50
Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KIAor
Ly8gTWF0cml4IGNvbnZlcnNpb25zLgorCiBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdC
QShjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvU1JHQgotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2lu
ZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRy
aXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKLSAgICAgICAgIDMuMjQwNDU0MmYsIC0x
LjUzNzEzODVmLCAtMC40OTg1MzE0ZiwKLSAgICAgICAgLTAuOTY5MjY2MGYsICAxLjg3NjAxMDhm
LCAgMC4wNDE1NTYwZiwKLSAgICAgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAyNTlmLCAgMS4wNTcy
MjUyZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyU1JHQkEoeHl6VG9MaW5lYXJTUkdCTWF0
cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkp
OworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8TGluZWFyU1JH
QkE8ZmxvYXQ+Pih4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVu
dHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8ZmxvYXQ+IHRvWFlaQShj
b25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL1NSR0IKLSAgICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNv
bS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCi0gICAgY29uc3RleHByIENvbG9y
TWF0cml4PDMsIDM+IGxpbmVhclNSR0JUb1hZWk1hdHJpeCB7Ci0gICAgICAgIDAuNDEyNDU2NGYs
ICAwLjM1NzU3NjFmLCAgMC4xODA0Mzc1ZiwKLSAgICAgICAgMC4yMTI2NzI5ZiwgIDAuNzE1MTUy
MmYsICAwLjA3MjE3NTBmLAotICAgICAgICAwLjAxOTMzMzlmLCAgMC4xMTkxOTIwZiwgIDAuOTUw
MzA0MWYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEobGluZWFyU1JHQlRvWFlaTWF0cml4LnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAg
IHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFlaQTxmbG9hdD4+KGxp
bmVhclNSR0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKIH0KIAogTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRp
c3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6Ly9kcmFm
dHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2RlCi0gICAgY29uc3Rl
eHByIENvbG9yTWF0cml4PDMsIDM+IHh5elRvTGluZWFyRGlzcGxheVAzTWF0cml4IHsKLSAgICAg
ICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlmLCAtMC40MDI3MTA3
ODQ0NTA3MTY4ZiwKLSAgICAgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAxLjc2MjY2NDA2MDMx
ODM0NjNmLCAgMC4wMjM2MjQ2ODU4NDE5NDM2ZiwKLSAgICAgICAgIDAuMDM1ODQ1ODMwMjQzNzg0
NWYsIC0wLjA3NjE3MjM4OTI2ODA0MThmLCAgMC45NTY4ODQ1MjQwMDc2ODcyZgotICAgIH07Ci0g
ICAgcmV0dXJuIGFzTGluZWFyRGlzcGxheVAzKHh5elRvTGluZWFyRGlzcGxheVAzTWF0cml4LnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAg
IHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8TGluZWFyRGlzcGxheVAz
PGZsb2F0Pj4oeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIFhZWkE8ZmxvYXQ+IHRvWFla
QShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAvLyBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNvZGUKLSAgICBj
b25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAzVG9YWVpNYXRyaXggewot
ICAgICAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5MzE2OTA5MzFmLCAwLjE5ODIx
NzI4NTIzNDM2M2YsCi0gICAgICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAuNjkxNzM4NTIxODM2
NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKLSAgICAgICAgMC4wZiwgICAgICAgICAgICAgICAg
MC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCi0gICAgfTsKLSAgICByZXR1
cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21w
b25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlQ2xhbXBp
bmdDb21wb25lbnRzRXhjZXB0QWxwaGE8WFlaQTxmbG9hdD4+KGxpbmVhckRpc3BsYXlQM1RvWFla
TWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOwogfQogCisvLyBDaHJvbWF0aWMgQWRhcHRhdGlvbiBjb252ZXJzaW9ucy4KKwogc3RhdGlj
IFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDUwV2hpdGVQb2ludFRvRDY1V2hpdGVQb2ludChjb25z
dCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9v
bS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1sCi0gICAgY29uc3RleHByIENvbG9y
TWF0cml4PDMsIDM+IEQ1MFRvRDY1TWF0cml4IHsKLSAgICAgICAgIDAuOTU1NTc2NmYsIC0wLjAy
MzAzOTNmLCAwLjA2MzE2MzZmLAotICAgICAgICAtMC4wMjgyODk1ZiwgIDEuMDA5OTQxNmYsIDAu
MDIxMDA3N2YsCi0gICAgICAgICAwLjAxMjI5ODJmLCAtMC4wMjA0ODMwZiwgMS4zMjk5MDk4Zgot
ICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENTBUb0Q2NU1hdHJpeC50cmFuc2Zvcm1lZENvbG9y
Q29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICByZXR1cm4gbWFrZUNs
YW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENTBUb0Q2NU1hdHJpeC50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0K
IAogc3RhdGljIFhZWkE8ZmxvYXQ+IGNvbnZlcnRGcm9tRDY1V2hpdGVQb2ludFRvRDUwV2hpdGVQ
b2ludChjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cDovL3d3dy5icnVj
ZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hyb21BZGFwdC5odG1sCi0gICAgY29uc3Rl
eHByIENvbG9yTWF0cml4PDMsIDM+IEQ2NVRvRDUwTWF0cml4IHsKLSAgICAgICAgIDEuMDQ3ODEx
MmYsIDAuMDIyODg2NmYsIC0wLjA1MDEyNzBmLAotICAgICAgICAgMC4wMjk1NDI0ZiwgMC45OTA0
ODQ0ZiwgLTAuMDE3MDQ5MWYsCi0gICAgICAgIC0wLjAwOTIzNDVmLCAwLjAxNTA0MzZmLCAgMC43
NTIxMzE2ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFlaQShENjVUb0Q1ME1hdHJpeC50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICByZXR1
cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENjVUb0Q1
ME1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpKTsKIH0KIAorLy8gTGFiIGNvbnZlcnNpb25zLgorCiBzdGF0aWMgY29uc3RleHByIGZsb2F0
IExBQmUgPSAyMTYuMGYgLyAyNDM4OS4wZjsKIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgTEFCayA9
IDI0Mzg5LjBmIC8gMjcuMGY7CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IEQ1MFdoaXRlVmFsdWVz
W10gPSB7IDAuOTY0MjJmLCAxLjBmLCAwLjgyNTIxZiB9OwpAQCAtMjIxLDYgKzIzNSw5IEBAIExh
YjxmbG9hdD4gdG9MYWIoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG8KICAgICByZXR1cm4geyBsaWdo
dG5lc3MsIGEsIGIsIGNvbG9yV2l0aEQ1MFdoaXRlUG9pbnQuYWxwaGEgfTsKIH0KIAorCisvLyBM
Q0ggY29udmVyc2lvbnMuCisKIExDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI2xhYi10
by1sY2gKQEAgLTI0Nyw2ICsyNjQsOCBAQCBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IExDSEE8Zmxv
YXQ+JiBjb2xvCiAgICAgfTsKIH0KIAorLy8gSFNMIGNvbnZlcnNpb25zLgorCiBIU0xBPGZsb2F0
PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwOi8vZW4u
d2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS4KQEAgLTMzMiw2ICszNTEsOCBAQCBT
UkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgCiAgICAgfTsKIH0KIAorLy8g
Q01ZSyBjb252ZXJzaW9ucy4KKwogU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgQ01ZS0E8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICBhdXRvIFtjLCBtLCB5LCBrLCBhXSA9IGNvbG9yOwpAQCAtMzU2
LDYgKzM3Nyw5IEBAIENNWUtBPGZsb2F0PiB0b0NNWUtBKGNvbnN0IFNSR0JBPGZsb2F0PiYKICAg
ICByZXR1cm4geyBjLCBtLCB5LCBrLCBhIH07CiB9CiAKKworLy8gQ29tYmluYXRpb24gY29udmVy
c2lvbnMgKGNvbnN0cnVjdGVkIGZyb20gbW9yZSBiYXNpYyBjb252ZXJzaW9ucyBhYm92ZSkuCisK
IFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJl
dHVybiB0b1hZWkEodG9MaW5lYXJTUkdCQShjb2xvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJKHJldmlzaW9uIDI3
MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIC8vIFRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgc1JHQiA8LT4gTGluZWFyUkdCIC8gRGlzcGxh
eVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4u
d2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgotZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dChmbG9hdCk7Ci1mbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLQorZmxv
YXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRv
TGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhmbG9hdCk7CiAKIC8vIEFsbCBjb2xvciB0eXBl
cyBtdXN0IGF0IGxlYXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zIHRvIGFu
ZCBmcm9tIHRoZSBYWVpBIGNvbG9yIHNwYWNlOgogLy8gICAgWFlaQTxmbG9hdD4gdG9YWVpBKGNv
bnN0IENvbG9yVHlwZTxmbG9hdD4mKTsKQEAgLTU2LDQyICs1NSwzNiBAQCBXRUJDT1JFX0VYUE9S
VCBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5lCiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JU
IFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOwogCi0KIC8v
IERpc3BsYXlQMwogV0VCQ09SRV9FWFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IERpc3Bs
YXlQMzxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5
UDMoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgTGlu
ZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8Zmxv
YXQ+Jik7CiAKLQogLy8gTGluZWFyRGlzcGxheVAzCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0
PiB0b1hZWkEoY29uc3QgTGluZWFyRGlzcGxheVAzPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQg
TGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0
PiYpOwogLy8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlz
cGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIAotCiAvLyBMYWIKIFdFQkNP
UkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBMYWI8ZmxvYXQ+Jik7CiBXRUJDT1JF
X0VYUE9SVCBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlv
bnMKIFdFQkNPUkVfRVhQT1JUIExDSEE8ZmxvYXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+Jik7
CiAKLQogLy8gTENIQQogV0VCQ09SRV9FWFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExD
SEE8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgWFla
QTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0PiB0b0xh
Yihjb25zdCBMQ0hBPGZsb2F0PiYpOwogCi0KIC8vIEhTTEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8
ZmxvYXQ+IHRvWFlaQShjb25zdCBIU0xBPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgSFNMQTxm
bG9hdD4gdG9IU0xBKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVf
RVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKLQogLy8g
Q01ZS0EKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBDTVlLQTxmbG9h
dD4mKTsKIFdFQkNPUkVfRVhQT1JUIENNWUtBPGZsb2F0PiB0b0NNWUtBKGNvbnN0IFhZWkE8Zmxv
YXQ+Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JU
eXBlcy5oCShyZXZpc2lvbiAyNzE2NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSwyMTYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENvbXBvbmVu
dFRyYWl0czsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgQWxwaGFUcmFpdHM7CiAKLXRlbXBs
YXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0czx1aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50OF90IG1pblZhbHVlID0gMDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qg
bWF4VmFsdWUgPSAyNTU7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBbHBoYVRyYWl0czx1aW50OF90PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IHRyYW5zcGFyZW50ID0gMDsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQ4X3Qgb3BhcXVlID0gMjU1OwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29tcG9uZW50VHJhaXRzPGZsb2F0PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBt
aW5WYWx1ZSA9IDAuMGY7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBtYXhWYWx1ZSA9IDEu
MGY7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBbHBoYVRyYWl0czxmbG9hdD4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgZmxvYXQgdHJhbnNwYXJlbnQgPSAwLjBmOworICAgIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgb3BhcXVlID0gMS4wZjsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b2xvckNvbXBvbmVudFJhbmdlIHsKKyAgICBUIG1pbjsKKyAgICBUIG1heDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IExhYk1vZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMQ0hNb2RlbDsKK3RlbXBsYXRl
PHR5cGVuYW1lPiBzdHJ1Y3QgSFNMTW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENN
WUtNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgWFlaTW9kZWw7CisKK3RlbXBsYXRl
PD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6
YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTx1aW50OF90PiwgMz4gcmFuZ2VzIHsgeworICAgICAg
ICB7IDAsIDI1NSB9LAorICAgICAgICB7IDAsIDI1NSB9LAorICAgICAgICB7IDAsIDI1NSB9Cisg
ICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOwor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdCTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7
IHsKKyAgICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEg
fQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gdHJ1
ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5n
ZXMgeyB7CisgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCkgfSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCks
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0
ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0ludmVydGlibGUgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVs
PGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50
UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7IDAsIDM2MCB9CisgICAgfSB9Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEhTTE1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
dGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAg
ICAgIHsgMCwgMzYwIH0sCisgICAgICAgIHsgMCwgMTAwIH0sCisgICAgICAgIHsgMCwgMTAwIH0K
KyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDTVlLTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDQ+IHJhbmdl
cyB7IHsKKyAgICAgICAgeyAwLCAxIH0sCisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAs
IDEgfSwKKyAgICAgICAgeyAwLCAxIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2Rl
bDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVu
dFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmlu
aXR5KCkgfSwKKyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsg
LXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHMo
Y29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQoreworICAgIHJldHVybiBDb2xvclR5cGUgeyBj
WzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdW5zaWduZWQgSW5kZXgsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIGNsYW1wZWRDb21w
b25lbnQoVCBjKSAtPiB0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUKK3sKKyAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWxfdjxUPik7CisKKyAgICBjb25zdGV4cHIgYXV0
byByYW5nZSA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlc1tJbmRleF07CisgICAgcmV0dXJuIHN0
ZDo6Y2xhbXA8VD4oYywgcmFuZ2UubWluLCByYW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xvclR5cGUsIHVuc2lnbmVkIEluZGV4PiBjb25zdGV4cHIgZmxvYXQgY2xhbXBlZENv
bXBvbmVudChmbG9hdCBjKQoreworICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlID0gQ29sb3JUeXBl
OjpNb2RlbDo6cmFuZ2VzW0luZGV4XTsKKworICAgIGlmIGNvbnN0ZXhwciAocmFuZ2UubWluID09
IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSAmJiByYW5nZS5tYXggPT0g
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpCisgICAgICAgIHJldHVybiBj
OworCisgICAgaWYgY29uc3RleHByIChyYW5nZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjptaW4oYywgcmFuZ2UubWF4
KTsKKworICAgIGlmIGNvbnN0ZXhwciAocmFuZ2UubWF4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjptYXgoYywgcmFuZ2UubWlu
KTsKKworICAgIHJldHVybiBzdGQ6OmNsYW1wKGMsIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwgdHlwZW5hbWUg
VD4gY29uc3RleHByIFQgY2xhbXBlZENvbXBvbmVudChjb25zdCBDb2xvckNvbXBvbmVudHM8VD4m
IGMpCit7CisgICAgcmV0dXJuIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCBJbmRleD4oY1tJ
bmRleF0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wb25lbnRUeXBl
ID0gVD4gY29uc3RleHByIENvbXBvbmVudFR5cGUgY2xhbXBlZEFscGhhKFQgYWxwaGEpCit7Cisg
ICAgcmV0dXJuIHN0ZDo6Y2xhbXA8VD4oYWxwaGEsIEFscGhhVHJhaXRzPENvbXBvbmVudFR5cGU+
Ojp0cmFuc3BhcmVudCwgQWxwaGFUcmFpdHM8Q29tcG9uZW50VHlwZT46Om9wYXF1ZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9y
Q29tcG9uZW50czxUPiBjbGFtcGVkQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4m
IGNvbXBvbmVudHMpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxD
b2xvclR5cGUsIDA+KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9y
VHlwZSwgMT4oY29tcG9uZW50cyksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBl
LCAyPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZEFscGhhKGNvbXBvbmVudHNbM10pCisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGNsYW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGEoY29u
c3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25lbnRzKQoreworICAgIHJldHVybiB7CisgICAg
ICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihjb21wb25lbnRzKSwKKyAgICAgICAg
Y2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFt
cGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oY29tcG9uZW50cyksCisgICAgICAgIGNvbXBvbmVu
dHNbM10KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50cyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9u
ZW50czxDb2xvclR5cGU+KGNsYW1wZWRDb21wb25lbnRzPENvbG9yVHlwZT4oY29tcG9uZW50cykp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50cyhUIGMxLCBUIGMyLCBUIGMzKQorewor
ICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihDb2xvckNvbXBvbmVudHMg
eworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oYzEpLAorICAgICAgICBj
bGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLAorICAgICAgICBjbGFtcGVkQ29tcG9u
ZW50PENvbG9yVHlwZSwgMj4oYzMpLAorICAgICAgICBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUKKyAgICB9KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VDbGFt
cGluZ0NvbXBvbmVudHMoVCBjMSwgVCBjMiwgVCBjMywgVCBhbHBoYSkKK3sKKyAgICByZXR1cm4g
bWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAgICAg
Y2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDE+KGMyKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5
cGUsIDI+KGMzKSwKKyAgICAgICAgY2xhbXBlZEFscGhhPFQsIHR5cGVuYW1lIENvbG9yVHlwZTo6
Q29tcG9uZW50VHlwZT4oYWxwaGEpCisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21w
b25lbnRzRXhjZXB0QWxwaGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25lbnRzKQor
eworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjbGFtcGVkQ29tcG9u
ZW50c0V4Y2VwdEFscGhhPENvbG9yVHlwZT4oY29tcG9uZW50cykpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFscGhhPiBjb25zdGV4cHIg
Q29sb3JUeXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYShUIGMxLCBUIGMyLCBU
IGMzLCBBbHBoYSBhbHBoYSkKK3sKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9y
VHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5
cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwK
KyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGMzKSwKKyAgICAgICAgYWxw
aGEKKyAgICB9KTsKK30KKworI2lmIEFTU0VSVF9FTkFCTEVECisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoVCBjb2xvcikKK3sKKyAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGUsIGZsb2F0Pikg
eworICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tpXSA+PSBUOjpNb2RlbDo6cmFuZ2VzW2ldLm1p
biwgIkNvbXBvbmVudCBhdCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBhbGxv
d2VkIG1pbmltdW0gJWYiLCBpLCAgY29tcG9uZW50c1tpXSwgVDo6TW9kZWw6OnJhbmdlc1tpXS5t
aW4pOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldIDw9IFQ6
Ok1vZGVsOjpyYW5nZXNbaV0ubWF4LCAiQ29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBp
cyBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgbWF4aW11bSAlZiIsIGksICBjb21wb25lbnRzW2ld
LCBUOjpNb2RlbDo6cmFuZ2VzW2ldLm1heCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShjb2xvci5hbHBoYSA+PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25l
bnRUeXBlPjo6dHJhbnNwYXJlbnQsICJBbHBoYSBpcyAlZiBhbmQgaXMgbGVzcyB0aGFuIHRoZSBh
bGxvd2VkIG1pbmltdW0gKHRyYW5zcGFyZW50KSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0
czx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6dHJhbnNwYXJlbnQpOworICAgICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKGNvbG9yLmFscGhhIDw9IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNv
bXBvbmVudFR5cGU+OjpvcGFxdWUsICJBbHBoYSBpcyAlZiBhbmQgaXMgZ3JlYXRlciB0aGFuIHRo
ZSBhbGxvd2VkIG1heGltdW0gKG9wYXF1ZSkgJWYiLCBjb2xvci5hbHBoYSwgQWxwaGFUcmFpdHM8
dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZSk7CisgICAgfQorfQorCisjZWxzZQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQpCit7
Cit9CisKKyNlbmRpZgorCiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBpbmxp
bmUgY29uc3RleHByIGJvb2wgSGFzQ29sb3JTcGFjZU1lbWJlciA9IGZhbHNlOwogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBib29sIEhhc0NvbG9yU3BhY2VNZW1iZXI8VCwg
c3RkOjp2b2lkX3Q8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFQ+KCkuY29sb3JTcGFjZSk+PiA9IHRy
dWU7CiAKQEAgLTc0LDE4ICsyNzIsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUGFyZW50PiBzdHJ1
Y3QgQ29sb3JXaQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU1JHQkEgOiBDb2xvcldp
dGhBbHBoYUhlbHBlcjxTUkdCQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQjsK
LQotICAgIGNvbnN0ZXhwciBTUkdCQShUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0g
Q29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1vZGVs
PFQ+OworICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6
U1JHQiB9OworICAgIAorICAgIGNvbnN0ZXhwciBTUkdCQShUIHJlZCwgVCBncmVlbiwgVCBibHVl
LCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiByZWQgeyByZWQg
fQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAgICAgICAsIGJsdWUgeyBibHVlIH0KICAg
ICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRo
aXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBTUkdCQSgpCi0gICAgICAgIDogU1JHQkEgeyBD
b21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVl
LCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlIH0KKyAgICAgICAgOiBTUkdCQSB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAg
LTEwMCwxMSArMzAwLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29t
cAogICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoY29uc3QgQ29s
b3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNb
M10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTUkdCQTxUPiYgYSwgY29uc3QgU1JHQkE8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFz
Q29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAtMTE4LDE4ICsz
MTMsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyU1JHQkEgOiBDb2xvcldpdGhBbHBoYUhlbHBl
cjxMaW5lYXJTUkdCQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVz
aW5nIE1vZGVsID0gUkdCTW9kZWw8VD47CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9y
U3BhY2UgPSBDb2xvclNwYWNlOjpMaW5lYXJSR0I7CiAKLSAgICBjb25zdGV4cHIgTGluZWFyU1JH
QkEoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6
bWF4VmFsdWUpCisgICAgY29uc3RleHByIExpbmVhclNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJs
dWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJl
ZCB9CiAgICAgICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQog
ICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgq
dGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIExpbmVhclNSR0JBKCkKLSAgICAgICAgOiBM
aW5lYXJTUkdCQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0
czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRy
YWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IExpbmVhclNSR0JBIHsgMCwgMCwgMCwgMCB9
CiAgICAgewogICAgIH0KIApAQCAtMTQ0LDExICszNDEsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1
ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgTGluZWFy
U1JHQkE8VD4gYXNMaW5lYXJTUkdCQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0g
ICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVhclNSR0JBPFQ+JiBh
LCBjb25zdCBMaW5lYXJTUkdCQTxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0xNjIsMTggKzM1NCwyMCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEaXNwbGF5UDMgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxEaXNwbGF5UDM8VD4+
IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1v
ZGVsPFQ+OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFj
ZTo6RGlzcGxheVAzOwogCi0gICAgY29uc3RleHByIERpc3BsYXlQMyhUIHJlZCwgVCBncmVlbiwg
VCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25z
dGV4cHIgRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBBbHBoYVRy
YWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJlZCB9CiAgICAgICAgICwgZ3JlZW4g
eyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxw
aGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAg
Y29uc3RleHByIERpc3BsYXlQMygpCi0gICAgICAgIDogRGlzcGxheVAzIHsgQ29tcG9uZW50VHJh
aXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50
VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAg
ICAgIDogRGlzcGxheVAzIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMTg4LDEx
ICszODIsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAg
cmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgRGlzcGxheVAzPFQ+IGFzRGlzcGxheVAzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBj
WzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PT0oY29uc3QgRGlzcGxheVAzPFQ+JiBhLCBjb25zdCBEaXNwbGF5UDM8VD4mIGIpCiB7CiAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAt
MjA2LDE3ICszOTUsMTkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3Bl
cgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyRGlzcGxheVAzIDogQ29sb3JX
aXRoQWxwaGFIZWxwZXI8TGluZWFyRGlzcGxheVAzPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50
VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhw
ciBMaW5lYXJEaXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBv
bmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIExpbmVhckRpc3BsYXlQMyhU
IHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkK
ICAgICAgICAgOiByZWQgeyByZWQgfQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAgICAg
ICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAg
ICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBMaW5lYXJE
aXNwbGF5UDMoKQotICAgICAgICA6IExpbmVhckRpc3BsYXlQMyB7IENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0
czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6
IExpbmVhckRpc3BsYXlQMyB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTIzMSwx
MSArNDIyLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAg
IHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExpbmVhckRpc3BsYXlQMzxUPiBhc0xpbmVhckRpc3Bs
YXlQMyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwg
Y1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYSwgY29uc3QgTGluZWFy
RGlzcGxheVAzPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBh
c0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTI0OSwxOCArNDM1LDIwIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IExhYiA6IENvbG9yV2l0aEFscGhhSGVscGVyPExhYjxUPj4gewogICAgIHVzaW5nIENvbXBvbmVu
dFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gTGFiTW9kZWw8VD47CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpMYWI7CiAKLSAgICBjb25zdGV4
cHIgTGFiKFQgbGlnaHRuZXNzLCBUIGEsIFQgYiwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxU
Pjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIExhYihUIGxpZ2h0bmVzcywgVCBhLCBUIGIsIFQg
YWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGxpZ2h0bmVzcyB7IGxp
Z2h0bmVzcyB9CiAgICAgICAgICwgYSB7IGEgfQogICAgICAgICAsIGIgeyBiIH0KICAgICAgICAg
LCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwog
ICAgIH0KIAogICAgIGNvbnN0ZXhwciBMYWIoKQotICAgICAgICA6IExhYiB7IENvbXBvbmVudFRy
YWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVu
dFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAg
ICAgICA6IExhYiB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTI3NSwxMSArNDYz
LDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVy
biB7IGMubGlnaHRuZXNzLCBjLmEsIGMuYiwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgTGFiPFQ+IGFzTGFiKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYg
YykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTGFiPFQ+JiBh
LCBjb25zdCBMYWI8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09
IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAtMjkzLDE3ICs0NzYsMTkgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgTENIQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPExDSEE8VD4+IHsKICAgICB1c2luZyBDb21w
b25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IExDSE1vZGVsPFQ+OwogCi0gICAgY29u
c3RleHByIExDSEEoVCBsaWdodG5lc3MsIFQgY2hyb21hLCBUIGh1ZSwgVCBhbHBoYSA9IENvbXBv
bmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIExDSEEoVCBsaWdodG5lc3Ms
IFQgY2hyb21hLCBUIGh1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAg
ICAgIDogbGlnaHRuZXNzIHsgbGlnaHRuZXNzIH0KICAgICAgICAgLCBjaHJvbWEgeyBjaHJvbWEg
fQogICAgICAgICAsIGh1ZSB7IGh1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAg
eworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIg
TENIQSgpCi0gICAgICAgIDogTENIQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENv
bXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUs
IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IExDSEEgeyAwLCAwLCAw
LCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0zMTgsMTEgKzUwMyw2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmxpZ2h0bmVzcywgYy5j
aHJvbWEsIGMuaHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBMQ0hBPFQ+IGFzTENIQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAg
cmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExDSEE8VD4mIGEsIGNvbnN0IExD
SEE8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JD
b21wb25lbnRzKGIpOwpAQCAtMzM2LDE3ICs1MTYsMTkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSFNMQSA6
IENvbG9yV2l0aEFscGhhSGVscGVyPEhTTEE8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBl
ID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IEhTTE1vZGVsPFQ+OwogCi0gICAgY29uc3RleHByIEhT
TEEoVCBodWUsIFQgc2F0dXJhdGlvbiwgVCBsaWdodG5lc3MsIFQgYWxwaGEgPSBDb21wb25lbnRU
cmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBIU0xBKFQgaHVlLCBUIHNhdHVyYXRp
b24sIFQgbGlnaHRuZXNzLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAg
ICAgOiBodWUgeyBodWUgfQogICAgICAgICAsIHNhdHVyYXRpb24geyBzYXR1cmF0aW9uIH0KICAg
ICAgICAgLCBsaWdodG5lc3MgeyBsaWdodG5lc3MgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEg
fQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29u
c3RleHByIEhTTEEoKQotICAgICAgICA6IEhTTEEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBIU0xBIHsg
MCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMzYzLDExICs1NDUsNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5odWUsIGMu
c2F0dXJhdGlvbiwgYy5saWdodG5lc3MsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIEhTTEE8VD4gYXNIU0xBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYg
YykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgSFNMQTxUPiYg
YSwgY29uc3QgSFNMQTxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkg
PT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0zODIsOCArNTU5LDkgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogLy8gRklYTUU6IFdoZW4gQ29sb3JDb21wb25l
bnRzIHN1cHBvcnRzIG1vcmUgdGhhbiBsZW5ndGggPT0gNCwgYWRkIGNvbnZlcnNpb24gdG8vZnJv
bSBDb2xvckNvbXBvbmVudHM8VD4gZm9yIENNWUtBCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ01ZS0EgOiBDb2xvcldpdGhBbHBoYUhlbHBlcjxDTVlLQTxUPj4gewogICAgIHVzaW5nIENv
bXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gQ01ZS01vZGVsPFQ+OwogCi0gICAg
Y29uc3RleHByIENNWUtBKFQgY3lhbiwgVCBtYWdlbnRhLCBUIHllbGxvdywgVCBibGFjaywgVCBh
bHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIENNWUtB
KFQgY3lhbiwgVCBtYWdlbnRhLCBUIHllbGxvdywgVCBibGFjaywgVCBhbHBoYSA9IEFscGhhVHJh
aXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogY3lhbiB7IGN5YW4gfQogICAgICAgICAsIG1hZ2Vu
dGEgeyBtYWdlbnRhIH0KICAgICAgICAgLCB5ZWxsb3cgeyB5ZWxsb3cgfQpAQCAtMzkzLDcgKzU3
MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDTVlLQSA6IENvbG8KICAgICB9CiAK
ICAgICBjb25zdGV4cHIgQ01ZS0EoKQotICAgICAgICA6IENNWUtBIHsgQ29tcG9uZW50VHJhaXRz
PFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJh
aXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50
VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogQ01ZS0EgeyAwLCAwLCAwLCAwLCAwIH0K
ICAgICB7CiAgICAgfQogCkBAIC00MTcsMTcgKzU5NSwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBYWVpB
IDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8WFlaQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5
cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gWFlaTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIg
WFlaQShUIHgsIFQgeSwgVCB6LCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1
ZSkKKyAgICBjb25zdGV4cHIgWFlaQShUIHgsIFQgeSwgVCB6LCBUIGFscGhhID0gQWxwaGFUcmFp
dHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiB4IHsgeCB9CiAgICAgICAgICwgeSB7IHkgfQogICAg
ICAgICAsIHogeyB6IH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAg
IGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBYWVpBKCkKLSAg
ICAgICAgOiBYWVpBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJh
aXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50
VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogWFlaQSB7IDAsIDAsIDAsIDAgfQogICAg
IHsKICAgICB9CiAKQEAgLTQ0MiwxMSArNjIyLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMueCwgYy55LCBjLnosIGMuYWxwaGEgfTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFhZWkE8VD4gYXNYWVpBKGNvbnN0
IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJd
LCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPT0oY29uc3QgWFlaQTxUPiYgYSwgY29uc3QgWFlaQTxUPiYgYikKIHsKICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC00NTcsMjEg
KzYzMiwyMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAgICAg
cmV0dXJuICEoYSA9PSBiKTsKIH0KIAorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBG
dW5jdG9yPiBjb25zdGV4cHIgZGVjbHR5cGUoYXV0bykgY2FsbFdpdGhDb2xvclR5cGUoY29uc3Qg
Q29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEZ1
bmN0b3ImJiBmdW5jdG9yKQogewogICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewogICAgIGNhc2Ug
Q29sb3JTcGFjZTo6U1JHQjoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNTUkdCQShjb21wb25lbnRzKSk7CisgICAgICAgIHJldHVy
biBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIG1ha2VGcm9tQ29t
cG9uZW50czxTUkdCQTxUPj4oY29tcG9uZW50cykpOwogICAgIGNhc2UgQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCOgotICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+
KGZ1bmN0b3IpLCBhc0xpbmVhclNSR0JBKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25l
bnRzPExpbmVhclNSR0JBPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpE
aXNwbGF5UDM6Ci0gICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rv
cj4oZnVuY3RvciksIGFzRGlzcGxheVAzKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25l
bnRzPERpc3BsYXlQMzxUPj4oY29tcG9uZW50cykpOwogICAgIGNhc2UgQ29sb3JTcGFjZTo6TGFi
OgotICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0
b3IpLCBhc0xhYihjb21wb25lbnRzKSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6
OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxMYWI8VD4+KGNv
bXBvbmVudHMpKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc1NSR0JBKGNv
bXBvbmVudHMpKTsKKyAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+
KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKIH0K
IAogLy8gUGFja2VkIENvbG9yIEZvcm1hdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI3MTY0NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBs
aWVkRmxvb3JpbmcoU1JHCiAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKICAgICBpZiAo
YSA9PSAyNTUpCiAgICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBv
bmVudEJ5dGVzPFNSR0JBPihmYXN0RGl2aWRlQnkyNTUociAqIGEpLCBmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBhKTsKKyAgICByZXR1cm4gbWFrZUNsYW1w
aW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRlQnkyNTUo
ciAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBh
KTsKIH0KIAogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4gY29sb3IpCkBAIC04OCw3ICs4OCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRD
ZWlsaW5nKFNSR0IKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09
IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50
Qnl0ZXM8U1JHQkE+KGZhc3REaXZpZGVCeTI1NShyICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1
NShnICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShiICogYSArIDI1NCksIGEpOworICAgIHJl
dHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8U1JHQkE8dWludDhfdD4+KGZh
c3REaXZpZGVCeTI1NShyICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShnICogYSArIDI1NCks
IGZhc3REaXZpZGVCeTI1NShiICogYSArIDI1NCksIGEpOwogfQogCiBzdGF0aWMgaW5saW5lIHVp
bnQxNl90IHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUodWludDhfdCBjLCB1aW50OF90IGEp
CkBAIC0xMDEsNyArMTAxLDcgQEAgU1JHQkE8dWludDhfdD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JB
PHVpbgogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CiAgICAgaWYgKCFhIHx8IGEgPT0g
MjU1KQogICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRC
eXRlczxTUkdCQT4odW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZShyLCBhKSwgdW5wcmVtdWx0
aXBsaWVkQ29tcG9uZW50Qnl0ZShnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZShi
LCBhKSwgYSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxT
UkdCQTx1aW50OF90Pj4odW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZShyLCBhKSwgdW5wcmVt
dWx0aXBsaWVkQ29tcG9uZW50Qnl0ZShnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0
ZShiLCBhKSwgYSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNp
b24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGls
aXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMjIgKzQ1LDE0IEBAIFNSR0JBPHVpbnQ4X3Q+
IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkcKIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRD
ZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKIFNSR0JBPHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGllZChT
UkdCQTx1aW50OF90Pik7CiAKLXVpbnQ4X3QgY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0
ZShmbG9hdCk7Cit1aW50OF90IGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUo
ZmxvYXQpOwogCi11aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZmxvYXQpOwotY29uc3Rl
eHByIGZsb2F0IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHVpbnQ4X3QpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCBjb252ZXJ0Qnl0ZUFscGhhVG8odWludDhfdCk7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUIGNvbnZlcnRGbG9hdEFscGhhVG8oZmxvYXQpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
b21wb25lbnRUeXBlPiBjb25zdGV4cHIgdWludDhfdCBjbGFtcFRvQ29tcG9uZW50Qnl0ZShDb21w
b25lbnRUeXBlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBm
bG9hdCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoQ29tcG9uZW50VHlwZSk7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgY29udmVydENvbXBvbmVudEJ5dGVUbyh1aW50OF90KTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgY29udmVydENvbXBvbmVudEZsb2F0VG8oZmxvYXQpOwotCi10ZW1wbGF0ZTx0
ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGU8dWludDhfdD4g
Y29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29uc3QgQ29sb3JUeXBlPGZsb2F0PiYpOwotdGVtcGxh
dGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
VHlwZTxmbG9hdD4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbnN0IENvbG9yVHlwZTx1aW50
OF90PiYpOwotCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBl
LCB0eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+
IGNsYW1wVG9Db21wb25lbnRCeXRlcyhDb21wb25lbnRUeXBlLi4uKTsKLXRlbXBsYXRlPHRlbXBs
YXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5
cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNsYW1wVG9Db21wb25lbnRGbG9hdHMoQ29t
cG9uZW50VHlwZS4uLik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBUIGNvbnZl
cnRUbyhjb25zdCBVJik7Cit0ZW1wbGF0ZTw+IFNSR0JBPGZsb2F0PiBjb252ZXJ0VG8oY29uc3Qg
U1JHQkE8dWludDhfdD4mKTsKK3RlbXBsYXRlPD4gU1JHQkE8dWludDhfdD4gY29udmVydFRvKGNv
bnN0IFNSR0JBPGZsb2F0PiYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVu
YW1lIEZ1bmN0b3I+IENvbG9yVHlwZSBjb2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25l
bnQoY29uc3QgQ29sb3JUeXBlJiwgRnVuY3RvciYmKTsKIApAQCAtNzAsNzggKzYyLDYxIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGMKIHRlbXBsYXRlPHR5cGVuYW1l
IENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRl
bkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSk7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRl
bkFscGhhKGNvbnN0IENvbG9yVHlwZSYsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JU
eXBlJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBib29sIGlzV2hp
dGUoY29uc3QgQ29sb3JUeXBlJik7Citjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IExhYjxm
bG9hdD4mKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2Rl
bDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pj4qID0gbnVsbHB0cj4KK2NvbnN0
ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJik7CisKK2NvbnN0ZXhwciBib29sIGlz
V2hpdGUoY29uc3QgTGFiPGZsb2F0PiYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlw
ZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+Piog
PSBudWxscHRyPgorY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKIAog
Y29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90KTsKIGNvbnN0ZXhw
ciB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCiAKLWlubGluZSB1aW50OF90
IGNvbnZlcnRQcmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKLXsKLSAgICByZXR1cm4g
c3RkOjpjbGFtcChzdGQ6Omxyb3VuZChmKSwgMGwsIDI1NWwpOwotfQotCi1pbmxpbmUgdWludDhf
dCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xh
bXAoc3RkOjpscm91bmQoZiAqIDI1NS4wZiksIDBsLCAyNTVsKTsKLX0KLQotY29uc3RleHByIGZs
b2F0IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHVpbnQ4X3QgYnl0ZSkKK2lubGluZSB1aW50OF90
IGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUoZmxvYXQgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIGJ5dGUgLyAyNTUuMGY7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91
bmQodmFsdWUpLCAwbCwgMjU1bCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbXBvbmVudFR5
cGU+IGNvbnN0ZXhwciB1aW50OF90IGNsYW1wVG9Db21wb25lbnRCeXRlKENvbXBvbmVudFR5cGUg
Y29tcG9uZW50KQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wPENvbXBvbmVudFR5cGU+KGNvbXBv
bmVudCwgMCwgMjU1KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29u
c3RleHByIGZsb2F0IGNsYW1wVG9Db21wb25lbnRGbG9hdChDb21wb25lbnRUeXBlIGNvbXBvbmVu
dCkKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcDxDb21wb25lbnRUeXBlPihjb21wb25lbnQsIDAs
IDEpOwotfQotCi10ZW1wbGF0ZTw+IGNvbnN0ZXhwciB1aW50OF90IGNvbnZlcnRDb21wb25lbnRC
eXRlVG88dWludDhfdD4odWludDhfdCB2YWx1ZSkKK3RlbXBsYXRlPD4gY29uc3RleHByIHVpbnQ4
X3QgY29udmVydEJ5dGVBbHBoYVRvPHVpbnQ4X3Q+KHVpbnQ4X3QgdmFsdWUpCiB7CiAgICAgcmV0
dXJuIHZhbHVlOwogfQogCi10ZW1wbGF0ZTw+IGNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0Q29tcG9u
ZW50Qnl0ZVRvPGZsb2F0Pih1aW50OF90IHZhbHVlKQordGVtcGxhdGU8PiBjb25zdGV4cHIgZmxv
YXQgY29udmVydEJ5dGVBbHBoYVRvPGZsb2F0Pih1aW50OF90IHZhbHVlKQogewotICAgIHJldHVy
biBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlIC8gMjU1
LjBmOwogfQogCi10ZW1wbGF0ZTw+IGlubGluZSB1aW50OF90IGNvbnZlcnRDb21wb25lbnRGbG9h
dFRvPHVpbnQ4X3Q+KGZsb2F0IHZhbHVlKQordGVtcGxhdGU8PiBpbmxpbmUgdWludDhfdCBjb252
ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGZsb2F0IHZhbHVlKQogewotICAgIHJldHVybiBjb252
ZXJ0VG9Db21wb25lbnRCeXRlKHZhbHVlKTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxy
b3VuZCh2YWx1ZSAqIDI1NS4wZiksIDBsLCAyNTVsKTsKIH0KIAotdGVtcGxhdGU8PiBpbmxpbmUg
ZmxvYXQgY29udmVydENvbXBvbmVudEZsb2F0VG88ZmxvYXQ+KGZsb2F0IHZhbHVlKQordGVtcGxh
dGU8PiBpbmxpbmUgZmxvYXQgY29udmVydEZsb2F0QWxwaGFUbzxmbG9hdD4oZmxvYXQgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRGbG9hdCh2YWx1ZSk7CisgICAgcmV0dXJu
IGNsYW1wZWRBbHBoYSh2YWx1ZSk7CiB9CiAKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0
eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBDb2xvclR5cGU8dWludDhfdD4gY29udmVydFRvQ29t
cG9uZW50Qnl0ZXMoY29uc3QgQ29sb3JUeXBlPGZsb2F0PiYgY29sb3IpCit0ZW1wbGF0ZTw+IGlu
bGluZSBTUkdCQTxmbG9hdD4gY29udmVydFRvKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+JiBjb2xvcikK
IHsKLSAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7Ci0gICAg
cmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzBdKSwgY29udmVydFRv
Q29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21w
b25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzNdKSB9OwotfQor
ICAgIGF1dG8gY29udmVydFRvU1JHQkFGbG9hdCA9IFtdKHVpbnQ4X3QgdmFsdWUpIC0+IGZsb2F0
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC8gMjU1LjBmOworICAgIH07CiAKLXRlbXBsYXRlPHRl
bXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8
ZmxvYXQ+IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb25zdCBDb2xvclR5cGU8dWludDhfdD4m
IGNvbG9yKQotewogICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KTsKLSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzBdKSwg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRz
WzNdKSB9OworICAgIHJldHVybiB7IGNvbnZlcnRUb1NSR0JBRmxvYXQoY29tcG9uZW50c1swXSks
IGNvbnZlcnRUb1NSR0JBRmxvYXQoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb1NSR0JBRmxvYXQo
Y29tcG9uZW50c1syXSksIGNvbnZlcnRUb1NSR0JBRmxvYXQoY29tcG9uZW50c1szXSkgfTsKIH0K
IAotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUuLi4gQ29tcG9uZW50VHlwZT4gY29uc3RleHByIENvbG9yVHlwZTx1aW50OF90PiBjbGFtcFRv
Q29tcG9uZW50Qnl0ZXMoQ29tcG9uZW50VHlwZS4uLiBjb21wb25lbnRzKQordGVtcGxhdGU8PiBp
bmxpbmUgU1JHQkE8dWludDhfdD4gY29udmVydFRvKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3Ip
CiB7Ci0gICAgcmV0dXJuIHsgY2xhbXBUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50cykuLi4gfTsK
LX0KKyAgICBhdXRvIGNvbnZlcnRUb1NSR0JBQnl0ZSA9IFtdKGZsb2F0IHZhbHVlKSAtPiB1aW50
OF90IHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFsdWUgKiAyNTUu
MGYpLCAwbCwgMjU1bCk7CisgICAgfTsKIAotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5
cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4gQ29tcG9uZW50VHlwZT4gY29uc3RleHByIENv
bG9yVHlwZTxmbG9hdD4gY2xhbXBUb0NvbXBvbmVudEZsb2F0cyhDb21wb25lbnRUeXBlLi4uIGNv
bXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIHsgY2xhbXBUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVu
dHMpLi4uIH07CisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3Ip
OworICAgIHJldHVybiB7IGNvbnZlcnRUb1NSR0JBQnl0ZShjb21wb25lbnRzWzBdKSwgY29udmVy
dFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50
c1syXSksIGNvbnZlcnRUb1NSR0JBQnl0ZShjb21wb25lbnRzWzNdKSB9OwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IENvbG9yVHlwZSBjb2xvckJ5
TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgRnVu
Y3RvciYmIGZ1bmN0b3IpCkBAIC0xNTcsNTAgKzEzMiw2OSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGUsIHR5cGVuYW1lIEZ1CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0
ZXhwciBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBj
b2xvciwgdWludDhfdCBvdmVycmlkZUFscGhhKQogewogICAgIGF1dG8gY29weSA9IGNvbG9yOwot
ICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGRlY2x0eXBlKGNvcHkuYWxw
aGEpPihvdmVycmlkZUFscGhhKTsKKyAgICBjb3B5LmFscGhhID0gY29udmVydEJ5dGVBbHBoYVRv
PHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CiAgICAg
cmV0dXJuIGNvcHk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBl
IGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92
ZXJyaWRlQWxwaGEpCiB7CiAgICAgYXV0byBjb3B5ID0gY29sb3I7Ci0gICAgY29weS5hbHBoYSA9
IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFs
cGhhKTsKKyAgICBjb3B5LmFscGhhID0gY29udmVydEZsb2F0QWxwaGFUbzx0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVybiBjb3B5Owog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52
ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCB1aW50
OF90IG92ZXJyaWRlQWxwaGEpCiB7Ci0gICAgYXV0byBjb3B5ID0gY29sb3JCeU1vZGlmaW5nRWFj
aE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbXSAoYXV0byBjb21wb25lbnQpIHsKLSAgICAgICAg
cmV0dXJuIENvbXBvbmVudFRyYWl0czxkZWNsdHlwZShjb21wb25lbnQpPjo6bWF4VmFsdWUgLSBj
b21wb25lbnQ7Ci0gICAgfSk7Ci0gICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRCeXRl
VG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOwotICAgIHJldHVybiBjb3B5
OworICAgIHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpNb2RlbDo6aXNJbnZlcnRpYmxlKTsKKwor
ICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBhdXRv
IGNvcHkgPSBjb21wb25lbnRzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsr
aSkKKyAgICAgICAgY29weVtpXSA9IENvbG9yVHlwZTo6TW9kZWw6OnJhbmdlc1tpXS5tYXggLSBj
b21wb25lbnRzW2ldOworICAgIGNvcHlbM10gPSBjb252ZXJ0Qnl0ZUFscGhhVG88dHlwZW5hbWUg
Q29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKKworICAgIHJldHVybiBt
YWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjb3B5KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShj
b25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKQogewotICAgIGF1dG8g
Y29weSA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb2xvciwgW10gKGF1
dG8gY29tcG9uZW50KSB7Ci0gICAgICAgIHJldHVybiBDb21wb25lbnRUcmFpdHM8ZGVjbHR5cGUo
Y29tcG9uZW50KT46Om1heFZhbHVlIC0gY29tcG9uZW50OwotICAgIH0pOwotICAgIGNvcHkuYWxw
aGEgPSBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJp
ZGVBbHBoYSk7Ci0gICAgcmV0dXJuIGNvcHk7CisgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6
Ok1vZGVsOjppc0ludmVydGlibGUpOworCisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNv
bXBvbmVudHMoY29sb3IpOworICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKQorICAgICAgICBjb3B5W2ldID0gQ29sb3JUeXBl
OjpNb2RlbDo6cmFuZ2VzW2ldLm1heCAtIGNvbXBvbmVudHNbaV07CisgICAgY29weVszXSA9IGNv
bnZlcnRGbG9hdEFscGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVy
cmlkZUFscGhhKTsKKworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihj
b3B5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBp
c0JsYWNrKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCitjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNv
bnN0IExhYjxmbG9hdD4mIGNvbG9yKQogewotICAgIGNvbnN0ZXhwciBhdXRvIG1pbiA9IENvbXBv
bmVudFRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptaW5WYWx1ZTsK
LSAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRUcmFpdHM8dHlwZW5hbWUgQ29sb3JU
eXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisgICAgcmV0dXJuIGNvbG9yLmxpZ2h0bmVz
cyA9PSAwICYmIGNvbG9yLmFscGhhID09IEFscGhhVHJhaXRzPGZsb2F0Pjo6b3BhcXVlOworfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4+Kj4KK2NvbnN0ZXhwciBib29sIGlzQmxhY2so
Y29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK3sKICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBjb2xvcjsKLSAgICByZXR1cm4gYzEgPT0gbWluICYmIGMyID09IG1pbiAmJiBjMyA9PSBtaW4g
JiYgYWxwaGEgPT0gbWF4OworICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlcyA9IENvbG9yVHlwZTo6
TW9kZWw6OnJhbmdlczsKKyAgICByZXR1cm4gYzEgPT0gcmFuZ2VzWzBdLm1pbiAmJiBjMiA9PSBy
YW5nZXNbMV0ubWluICYmIGMzID09IHJhbmdlc1syXS5taW4gJiYgYWxwaGEgPT0gQWxwaGFUcmFp
dHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29s
b3JUeXBlJiBjb2xvcikKK2NvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgTGFiPGZsb2F0PiYg
Y29sb3IpCiB7Ci0gICAgY29uc3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5cGVu
YW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1heFZhbHVlOworICAgIHJldHVybiBjb2xv
ci5saWdodG5lc3MgPT0gMSAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9w
YXF1ZTsKK30KIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIFJHQk1v
ZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+Pio+Citjb25zdGV4cHIgYm9v
bCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCit7CiAgICAgYXV0byBbYzEsIGMyLCBj
MywgYWxwaGFdID0gY29sb3I7Ci0gICAgcmV0dXJuIGMxID09IG1heCAmJiBjMiA9PSBtYXggJiYg
YzMgPT0gbWF4ICYmIGFscGhhID09IG1heDsKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZXMgPSBD
b2xvclR5cGU6Ok1vZGVsOjpyYW5nZXM7CisgICAgcmV0dXJuIGMxID09IHJhbmdlc1swXS5tYXgg
JiYgYzIgPT0gcmFuZ2VzWzFdLm1heCAmJiBjMyA9PSByYW5nZXNbMl0ubWF4ICYmIGFscGhhID09
IEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsK
IH0KIAogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVl
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0lu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
LmNwcAkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gbWFr
ZVNpbXAKICAgICAgICAgY29tcG9uZW50QXJyYXlbaV0gPSBjb21wb25lbnQ7CiAgICAgfQogCi0g
ICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgY29tcG9uZW50QXJyYXlb
MV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29tcG9uZW50QXJyYXlb
MF0gfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb21w
b25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBvbmVudEFycmF5WzNdLCBjb21w
b25lbnRBcnJheVswXSB9KTsKIH0KIAogUmVmPEluYmFuZEdlbmVyaWNDdWU+IEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1Jl
ZiBhdHRyaWJ1dGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcAkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsNyArMTA0LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQwog
ICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZmxv
YXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gcmdiVG9MaW5l
YXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSByZ2JUb0xp
bmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IpOwogICAgICAgICAgICAgICAgIGFycmF5
W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lk
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1DCiAgICAgICAgICAgICBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMjU2OyBpKyspIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUu
MGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNv
bG9yKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRD
bGFtcGluZyhjb2xvcik7CiAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1
aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIGFycmF5OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4
MSw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcm91bmRBbmQKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+PihTUkdCQSB7IHIsIGcsIGIsIGEgfSk7CiB9CiAKIENvbG9yOjpDb2xvcihD
R0NvbG9yUmVmIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIENvbG9yIE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhl
bFNvbGlkQ29sb3IKICAgICBpZiAoIXBpeGVsWzNdKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2s7CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JB
PihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VDbGFt
cGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0gKiAyNTUg
LyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBw
aXhlbFszXSwgcGl4ZWxbM10pOwogfQogCiB2b2lkIE5hdGl2ZUltYWdlOjpjbGVhclN1YmltYWdl
cygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNzE2NDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDE5ICs5MSwxOSBAQCBib29sIEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb246OnRyCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IEdSQVlTQ0FMRTogewotICAgICAgICBjb2xvciA9IGFzU1JHQkEoZ3JheXNjYWxlQ29sb3JNYXRy
aXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8
ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzZXBp
YUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25l
bnRzPFNSR0JBPGZsb2F0Pj4oc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRD
b2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBjYXNlIEhVRV9ST1RBVEU6IHsKLSAgICAgICAgY29sb3IgPSBh
c1NSR0JBKGh1ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oaHVlUm90YXRlQ29sb3JNYXRyaXgobV9h
bW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBTQVRVUkFURTogewot
ICAgICAgICBjb2xvciA9IGFzU1JHQkEoc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAg
ICAgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oc2F0dXJh
dGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGRlZmF1bHQ6CkBAIC0xNzIsNyArMTcyLDcgQEAgYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aQogICAgIH0KICAgICBjYXNlIEJSSUdIVE5FU1M6CiAgICAgICAgIGNvbG9y
ID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQg
Y29tcG9uZW50KSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50
ICogY29tcG9uZW50LCAwLjBmKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wPGZsb2F0
PihtX2Ftb3VudCAqIGNvbXBvbmVudCwgMC4wZiwgMS4wZik7CiAgICAgICAgIH0pOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMjI0LDE1ICsyMjQsNzggQEAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gSW52ZXJ0TGlnaHRuZXNzRgogICAgIHJldHVybiBJbnZlcnRMaWdo
dG5lc3NGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgpOwogfQogCisvLyBGSVhNRTogVGhpcyBodWVS
b3RhdGUgY29kZSBleGlzdHMgdG8gYWxsb3cgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9u
IHRvIHBlcmZvcm0gaHVlIHJvdGF0aW9uCisvLyBvbiBjb2xvciB2YWx1ZXMgb3V0c2lkZSBvZiB0
aGUgbm9uLWV4dGVuZGVkIFNSR0IgdmFsdWUgcmFuZ2UgKDAtMSkgdG8gbWFpbnRhaW4gdGhlIGJl
aGF2aW9yIG9mIGNvbG9ycworLy8gcHJpb3IgdG8gY2xhbXBpbmcgYmVpbmcgZW5mb3JjZWQuIEl0
IHNob3VsZCBsaWtlbHkganVzdCB1c2UgdGhlIGV4aXN0aW5nIGh1ZVJvdGF0ZUNvbG9yTWF0cml4
KGFtb3VudCkKKy8vIGluIENvbG9yTWF0cml4LmgKK3N0YXRpYyBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IGh1ZVJvdGF0ZShjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xvciwgZmxvYXQg
YW1vdW50KQoreworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOworCisgICAgYXV0
byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOworICAgIGZsb2F0IGNocm9t
YSA9IG1heCAtIG1pbjsKKworICAgIGZsb2F0IGxpZ2h0bmVzcyA9IDAuNWYgKiAobWF4ICsgbWlu
KTsKKyAgICBmbG9hdCBzYXR1cmF0aW9uOworICAgIGlmICghY2hyb21hKQorICAgICAgICBzYXR1
cmF0aW9uID0gMDsKKyAgICBlbHNlIGlmIChsaWdodG5lc3MgPD0gMC41ZikKKyAgICAgICAgc2F0
dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4ICsgbWluKSk7CisgICAgZWxzZQorICAgICAgICBzYXR1
cmF0aW9uID0gKGNocm9tYSAvICgyLjBmIC0gKG1heCArIG1pbikpKTsKKworICAgIGlmICghc2F0
dXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGxpZ2h0bmVz
cywgYWxwaGEgfTsKKworICAgIGZsb2F0IGh1ZTsKKyAgICBpZiAoIWNocm9tYSkKKyAgICAgICAg
aHVlID0gMDsKKyAgICBlbHNlIGlmIChtYXggPT0gcikKKyAgICAgICAgaHVlID0gKDYwLjBmICog
KChnIC0gYikgLyBjaHJvbWEpKSArIDM2MC4wZjsKKyAgICBlbHNlIGlmIChtYXggPT0gZykKKyAg
ICAgICAgaHVlID0gKDYwLjBmICogKChiIC0gcikgLyBjaHJvbWEpKSArIDEyMC4wZjsKKyAgICBl
bHNlCisgICAgICAgIGh1ZSA9ICg2MC4wZiAqICgociAtIGcpIC8gY2hyb21hKSkgKyAyNDAuMGY7
CisKKyAgICBpZiAoaHVlID49IDM2MC4wZikKKyAgICAgICAgaHVlIC09IDM2MC4wZjsKKworICAg
IGh1ZSAvPSAzNjAuMGY7CisKKyAgICAvLyBQZXJmb3JtIHJvdGF0aW9uLgorICAgIGh1ZSA9IHN0
ZDo6Zm1vZChodWUgKyBhbW91bnQsIDEuMGYpOworCisgICAgZmxvYXQgdGVtcDIgPSBsaWdodG5l
c3MgPD0gMC41ZiA/IGxpZ2h0bmVzcyAqICgxLjBmICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3Mg
KyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9
IDIuMGYgKiBsaWdodG5lc3MgLSB0ZW1wMjsKKyAgICAKKyAgICBodWUgKj0gNi4wZjsgLy8gY2Fs
Y0h1ZSgpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgorCisgICAgLy8gSHVlIGlzIGluIHRo
ZSByYW5nZSAwLTYsIG90aGVyIGFyZ3MgaW4gMC0xLgorICAgIGF1dG8gY2FsY0h1ZSA9IFtdKGZs
b2F0IHRlbXAxLCBmbG9hdCB0ZW1wMiwgZmxvYXQgaHVlVmFsKSB7CisgICAgICAgIGlmIChodWVW
YWwgPCAwLjBmKQorICAgICAgICAgICAgaHVlVmFsICs9IDYuMGY7CisgICAgICAgIGVsc2UgaWYg
KGh1ZVZhbCA+PSA2LjBmKQorICAgICAgICAgICAgaHVlVmFsIC09IDYuMGY7CisgICAgICAgIGlm
IChodWVWYWwgPCAxLjBmKQorICAgICAgICAgICAgcmV0dXJuIHRlbXAxICsgKHRlbXAyIC0gdGVt
cDEpICogaHVlVmFsOworICAgICAgICBpZiAoaHVlVmFsIDwgMy4wZikKKyAgICAgICAgICAgIHJl
dHVybiB0ZW1wMjsKKyAgICAgICAgaWYgKGh1ZVZhbCA8IDQuMGYpCisgICAgICAgICAgICByZXR1
cm4gdGVtcDEgKyAodGVtcDIgLSB0ZW1wMSkgKiAoNC4wZiAtIGh1ZVZhbCk7CisgICAgICAgIHJl
dHVybiB0ZW1wMTsKKyAgICB9OworCisgICAgcmV0dXJuIHsKKyAgICAgICAgY2FsY0h1ZSh0ZW1w
MSwgdGVtcDIsIGh1ZSArIDIuMGYpLAorICAgICAgICBjYWxjSHVlKHRlbXAxLCB0ZW1wMiwgaHVl
KSwKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVtcDIsIGh1ZSAtIDIuMGYpLAorICAgICAgICBh
bHBoYQorICAgIH07Cit9CisKIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0
cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gaHNs
YSA9IHRvSFNMQShjb2xvcik7Ci0gICAgCi0gICAgLy8gUm90YXRlIHRoZSBodWUgMTgwZGVnLgot
ICAgIGhzbGEuaHVlID0gc3RkOjpmbW9kKGhzbGEuaHVlICsgMC41ZiwgMS4wZik7Ci0gICAgCi0g
ICAgLy8gQ29udmVydCBiYWNrIHRvIFJHQi4KLSAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQSA9IHRv
U1JHQkEoaHNsYSk7CisgICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90
YXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwgMC41Zik7CiAgICAgCiAgICAgLy8gQXBwbHkg
dGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVtLzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRy
aXggd2FzIGRlcml2ZWQuCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01v
ZGVNYXRyaXggewpAQCAtMjQwLDcgKzMwMyw3IEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVy
T3BlcmF0aW9uOjp0cmEKICAgICAgICAgMC4wMzBmLCAtMC43NDFmLCAtMC4wODlmLCAwLjBmLCAx
LjBmLAogICAgICAgICAwLjAzMGYsICAwLjA1OWYsIC0wLjg5MGYsIDAuMGYsIDEuMGYKICAgICB9
OwotICAgIGNvbG9yID0gYXNTUkdCQSh0b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGh1ZVJvdGF0ZWRTUkdCQSkpKTsKKyAgICBjb2xv
ciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+Pih0b0RhcmtNb2RlTWF0cml4
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjUyLDE2ICszMTUsMTEgQEAgYm9vbCBJbnZlcnRM
aWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmludgogICAgICAgICAtMC4wNDlmLCAtMS4zNDdmLCAg
MC4xNDZmLCAwLjBmLCAxLjI1ZiwKICAgICAgICAgLTAuMDQ5ZiwgLTAuMDk3ZiwgLTEuMTA0Ziwg
MC4wZiwgMS4yNWYKICAgICB9OwotICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGUgPSBhc1NS
R0JBKHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yKSkpOwotCi0gICAgLy8gQ29udmVydCB0byBIU0wuCi0gICAgYXV0byBo
c2xhID0gdG9IU0xBKGNvbnZlcnRlZFRvTGlnaHRNb2RlKTsKKyAgICBhdXRvIGNvbnZlcnRlZFRv
TGlnaHRNb2RlQ29tcG9uZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSk7CiAKLSAgICAvLyBIdWUgcm90YXRl
IGJ5IDE4MGRlZy4KLSAgICBoc2xhLmh1ZSA9IHN0ZDo6Zm1vZChoc2xhLmh1ZSArIDAuNWYsIDEu
MGYpOworICAgIGF1dG8gaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShjb252
ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMsIDAuNWYpOwogCi0gICAgLy8gQW5kIHJldHVybiBS
R0IuCi0gICAgY29sb3IgPSB0b1NSR0JBKGhzbGEpOworICAgIGNvbG9yID0gbWFrZUNsYW1waW5n
Q29tcG9uZW50czxTUkdCQTxmbG9hdD4+KGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBi
b29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhz
UkdCQUNvbG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oc1JHQkFD
b2xvcik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIEZp
bHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNv
bG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjcxNjQ2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29s
b3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpCisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JH
QkE8dWludDhfdD4+KFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRp
Y19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ibHVl
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhhKSB9KSkKIHsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2
aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMyArOTIsMTMgQEAgc3RhdGljIE9wdGlv
bmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAgICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRd
OwogICAgICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAg
ICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocGl4ZWxbMF0sIHBpeGVs
WzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOworICAgICAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29t
cG9uZW50czxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4
ZWxbM10pOwogICAgIH0KIAogICAgIFtyZ2JDb2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVl
bjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25l
bnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBv
bmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRU
bzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiBDb2xv
ciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2
aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Nv
bG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCi0gICAgOiBD
b2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNv
bG9yLmIsIGNvbG9yLmEgfSkpCisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+
KFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSkKIHsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNzE2NDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1
c2g+IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NP
TE9SX0YmIGNvbG9yKQogewotICAgIGF1dG8gY29sb3JLZXkgPSBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSk7CisgICAg
YXV0byBjb2xvcktleSA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb2xvci5y
LCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwogCiAgICAgaWYgKCFjb2xvcktleSkgewog
ICAgICAgICBpZiAoIW1femVyb0JydXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9y
IGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiAKICAgICBbY29sb3IgZ2V0UmVkOiZy
ZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxw
aGE6JmFscGhhXTsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7
IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3Jl
ZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19j
YXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90
Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShy
ZXZpc2lvbiAyNzE2NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWlu
dDhfdD4gbWVudUJhY2tncm91bmRDb2xvCiAgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKICAgICBb
b2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICByZXR1cm4gY2xh
bXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBw
aXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhf
dD4+KHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIHBpeGVsWzNdKTsKIH0KIAogQ29sb3Ig
UmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJRCwgT3B0aW9u
U2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0
aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNzE2NDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rp
b25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgICAg
ICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBs
ZUZyb20uYmx1ZSwgc2ltcGxlVG8uYmx1ZSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwg
c2ltcGxlQW5pbWF0ZWQuYmx1ZSk7CiAgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0
ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGEsIHNpbXBsZVRvLmFscGhh
LCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwog
ICAgICAgICAKLSAgICAgICAgYW5pbWF0ZWQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+
KHN0ZDo6bHJvdW5kKHJlZCksIHN0ZDo6bHJvdW5kKGdyZWVuKSwgc3RkOjpscm91bmQoYmx1ZSks
IHN0ZDo6bHJvdW5kKGFscGhhKSk7CisgICAgICAgIGFuaW1hdGVkID0gbWFrZUNsYW1waW5nQ29t
cG9uZW50czxTUkdCQTx1aW50OF90Pj4oc3RkOjpscm91bmQocmVkKSwgc3RkOjpscm91bmQoZ3Jl
ZW4pLCBzdGQ6Omxyb3VuZChibHVlKSwgc3RkOjpscm91bmQoYWxwaGEpKTsKICAgICB9CiAKICAg
ICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFuY2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0
cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29uc3Qgb3ZlcnJpZGUKQEAgLTEyMCw3ICsx
MjAsNyBAQCBwcml2YXRlOgogICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9z
c3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFueSBhbHBoYSBhbmQgc2V0cyBh
bHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0gICAgICAgIG1fdG8gPSBjbGFtcFRvQ29t
cG9uZW50Qnl0ZXM8U1JHQkE+KHNpbXBsZVRvLnJlZCArIHNpbXBsZUZyb20ucmVkLCBzaW1wbGVU
by5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJs
dWUpOworICAgICAgICBtX3RvID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90
Pj4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxl
RnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5n
Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wMS0yMCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5n
IGxvZ2ljIHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JUb1dlYkNvcmVDb2xvcik6CisgICAgICAg
IFVwZGF0ZSB0byB1c2UgbmV3IGNvbnZlcnRUbzw+IGZ1bmN0aW9ucy4KKwogMjAyMS0wMS0yMCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgT24gcGFnZSBjbG9z
ZSwgbWFrZSBzdXJlIHRvIG5vdGlmeSBvZiBjYXB0dXJlIHN0YXRlIGltbWVkaWF0ZWx5CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAko
cmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgR19ERUZJTkVfQk9Y
RURfVFlQRShXZWJLaXRDb2xvciwgd2Via2l0XwogCiBjb25zdCBXZWJDb3JlOjpDb2xvciB3ZWJr
aXRDb2xvclRvV2ViQ29yZUNvbG9yKFdlYktpdENvbG9yKiBjb2xvcikKIHsKLSAgICByZXR1cm4g
V2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50Qnl0ZXMoV2ViQ29yZTo6U1JHQkEgeyBzdGF0aWNf
Y2FzdDxmbG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+Z3JlZW4p
LCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3ItPmFscGhhKSB9KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29udmVydFRvPFdlYkNvcmU6OlNS
R0JBPHVpbnQ4X3Q+PihXZWJDb3JlOjpTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+
cmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvci0+Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpIH0pOwogfQog
CiB2b2lkIHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29s
b3ImIHdlYkNvcmVDb2xvciwgV2ViS2l0Q29sb3IqIGNvbG9yKQpJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjQ2KQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDEt
MjAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJld29yayBjb2xv
ciBjbGFtcGluZyBsb2dpYyB0byBiZSBtb3JlIGNvbnNpc3RlbnQgYW5kIGNsZWFyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA3MTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9y
VGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIFVwZGF0
ZSB0ZXN0cyB0byB1c2UgbmV3IGNvbnZlcnRUbzw+IGZ1bmN0aW9ucy4KKwogMjAyMS0wMS0yMCAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQSBET01XaW5kb3cg
c2hvdWxkIG5vdCBiZSByZXVzZWQgaWYgaXRzIEpTRE9NV2luZG93IGhhcyBiZWVuIGNyZWF0ZWQK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0
cy5jcHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBURVNU
KENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
bGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogICAgIAotICAgIGF1dG8gcm91bmRU
cmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikp
OworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+
KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRD
b2xvcik7CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2sp
CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdo
dG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBF
Q1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNzgsNyArNzgsNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAg
YXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdC
QShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsK
IH0KIApAQCAtOTQsNyArOTQsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIAogICAg
IEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7
CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
dG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVy
dFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShj
b2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMTAsNyArMTEwLDcgQEAgVEVTVChD
b2xvciwgUkdCVG9IU0xfQmx1ZSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5l
c3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRv
IHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhz
bGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQog
CkBAIC0xMjYsNyArMTI2LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiAgICAg
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRu
ZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBj
b252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNU
X0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxp
Z2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkp
CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdo
dG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBF
Q1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5j
cHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcg
QEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAgICB9CiAKICAgICBhdXRvIGNvbXBv
bmVudEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OwotICAgIENv
bG9yIHJnYjEgeyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29tcG9uZW50Qnl0ZXMpIH07Cisg
ICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9
OwogICAgIENvbG9yIHJnYjIgeyBjb21wb25lbnRCeXRlcyB9OwogICAgIEVYUEVDVF9ORShyZ2Ix
LCByZ2IyKTsKICAgICBFWFBFQ1RfTkUocmdiMiwgcmdiMSk7CkBAIC0xMzgsNyArMTM4LDcgQEAg
VEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogICAgIH0KIAogICAgIGF1dG8gY29tcG9uZW50Qnl0
ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07Ci0gICAgQ29sb3Igcmdi
MSB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb21wb25lbnRCeXRlcykgfTsKKyAgICBDb2xv
ciByZ2IxIHsgY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29tcG9uZW50Qnl0ZXMpIH07CiAgICAg
Q29sb3IgcmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07CiAgICAgRVhQRUNUX05FKHJnYjEuaGFzaCgp
LCByZ2IyLmhhc2goKSk7CiB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQ
REZEb2N1bWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rl
c3RQREZEb2N1bWVudC5tbQkocmV2aXNpb24gMjcxNjQ2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUs
NyBAQCBXZWJDb3JlOjpDb2xvciBUZXN0UERGUGFnZTo6Y29sb3JBdFBvaW50CiAKICAgICBpZiAo
IWEpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKLSAg
ICByZXR1cm4gV2ViQ29yZTo6Y2xhbXBUb0NvbXBvbmVudEJ5dGVzPFdlYkNvcmU6OlNSR0JBPihy
ICogMjU1IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAyNTUgLyBhLCBhKTsKKyAgICByZXR1cm4gV2Vi
Q29yZTo6bWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFdlYkNvcmU6OlNSR0JBPHVp
bnQ4X3Q+PihyICogMjU1IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAyNTUgLyBhLCBhKTsKIH0KIAog
Ly8gRG9jdW1lbnRzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417978</attachid>
            <date>2021-01-20 09:36:12 -0800</date>
            <delta_ts>2021-01-20 16:15:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>90580</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcyIEBACiAyMDIxLTAxLTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0aW9uIG9mIGFkZGluZyBzdXBwb3J0
IGZvciBFeHRlbmRlZC1zUkdCIHRvIGNvbG9yIHR5cGVzLAorICAgICAgICB0aGlzIGFkZHMgY29u
c3RleHByIG1ldGFkYXRhIGFuZCBoZWxwZXIgZnVuY3Rpb25zIHRvIGNyZWF0ZSBjb2xvcgorICAg
ICAgICB0eXBlcyB3aXRoIHRoZSBjb3JyZWN0IGNsYW1wZWQgKG9yIHVuY2xhbXBlZCkgdmFsdWVz
IGFuZCBhZG9wdHMgdGhlbQorICAgICAgICB0aHJvdWdob3V0IHRoZSBjb2RlIGJhc2UuCisKKyAg
ICAgICAgLSBSZW1vdmVzICJjb21wb25lbnQgYnl0ZXMiIGFuZCAiY29tcG9uZW50IGZsb2F0cyIg
Y29uY2VwdHMgcmVwbGFjaW5nCisgICAgICAgICAgd2l0aCBmdW5jdGlvbnMgdGhhdCB0YWtlIGNv
bG9yIHR5cGVzIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnM6CisgICAgICAgICAgCisgICAgICAgICAg
ICBjb252ZXJ0VG9Db21wb25lbnRCeXRlcy9jb252ZXJ0VG9Db21wb25lbnRGbG9hdHMgLT4gY29u
dmVydFRvPENvbG9yVHlwZTxUPj4KKyAgICAgICAgICAgIGNsYW1wVG9Db21wb25lbnRCeXRlcy9j
bGFtcFRvQ29tcG9uZW50RmxvYXRzIC0+IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8Q29sb3JUeXBl
PFQ+PgorCisgICAgICAgIC0gQWRkcyBNb2RlbCB0eXBlIGFsaWFzZXMgdG8gZWFjaCBjb2xvciB0
eXBlIHdoaWNoIGNhbiBzcGVjaWZ5IHRyYWl0cyAKKyAgICAgICAgICBmb3IgdGhhdCB0eXBlIG9m
IGNvbG9yLiBUaGVzZSB0cmFpdHMgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgdmFsaWQgCisg
ICAgICAgICAgY29tcG9uZW50IHJhbmdlcyBhbmQgd2hldGhlciB0aGUgY29sb3IgY2FuIGJlIGlu
dmVydGVkLiBNb3JlIHdpbGwgYmUgCisgICAgICAgICAgYWRkZWQgKGxpa2Ugd2hpdGUgcG9pbnQg
YW5kIGJhc2UgY29sb3Igc3BhY2UpIHRvIGhlbHAgc2ltcGxpZnkgdXRpbGl0eSAKKyAgICAgICAg
ICBhbmQgY29udmVyc2lvbiBjb2RlLiAKKworICAgICAgICAtIEFkZHMgYXNzZXJ0aW9ucyB0byBl
YWNoIGNvbG9yIHR5cGUgY29uc3RydWN0b3IgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZAorICAgICAg
ICAgIGFyZSB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlcyAoYXMgc3BlY2lmaWVkIGJ5IHRoZSBNb2Rl
bCkuCisKKyAgICAgICAgLSBSZW1vdmVkIGFzRm9vKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYp
IGZ1bmN0aW9ucywgd2hpY2ggd2VyZSBhIGxpdHRsZSAKKyAgICAgICAgICB0byAgc2ltaWxhcmx5
IG5hbWVkIHRvIHRoZSB0b0ZvbygpIGZ1bmN0aW9ucy4gSW5zdGVhZCwgdGhlIGdlbmVyaWMgCisg
ICAgICAgICAgbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZTxUPj4gKG9yIGl0J3MgY2xhbXBp
bmcgdmFyaWFudHMpIGNhbiBiZSB1c2VkCisgICAgICAgICAgdG8gY29udmVydCBmcm9tIENvbG9y
Q29tcG9uZW50cyB0byBjb2xvciB0eXBlcy4KKworICAgICAgICAtIEFkZHMgQWxwaGFUcmFpdHMg
dG8gbW9kZWwgYWxwaGEgdmFsdWVzIGFzIHRoZXNlIGFyZSBjb25zaXN0ZW50IGJldHdlZW4KKyAg
ICAgICAgICBjb2xvciB0eXBlcyBhbmQgb25seSBjaGFuZ2UgYmFzZWQgb24gY29tcG9uZW50IHR5
cGUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRD
U1NPTVJHQkNvbG9yLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXJGYXN0UGF0aHMu
Y3BwOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yQ29udmVyc2lvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAg
KiBzdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6
CisKKzIwMjEtMDEtMTkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCiAgICAgICAg
ICJSZW1vdmUgcmVtYWluaW5nIG5vbi1zdGFuZGFyZCBDTVlLQSBzdXBwb3J0IGZyb20gQ2FudmFz
IgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNzYw
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI3
MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHN0
YXRpYyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXgKIAogI2lmIEVOQUJMRShJTlBV
VF9UWVBFX0NPTE9SKQogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3Np
YmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBj
b2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9yVmFsdWUoKSk7
CiAgICAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYoInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7CiAgICAgfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjcx
NjQ2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NDcsNyArMTQ0Nyw3IEBA
IC0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmEKICAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkgewot
ICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKHNlbGYuYXhCYWNr
aW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRv
PFNSR0JBPGZsb2F0Pj4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAl
Ny41ZiAxIiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjcx
NjQ2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzODUsNyArMjM4NSw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJu
IEAoYmFja2luZ09iamVjdC0+aXNTZWxlY3RlZCgpKTsKIAogICAgICAgICBpZiAoYmFja2luZ09i
amVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0cyhiYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICAg
ICAgYXV0byBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGJhY2tpbmdPYmplY3QtPmNv
bG9yVmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNv
bG9yLmJsdWVdOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNh
dGVkQ1NTT01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkQ1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyNzE2NDYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IucmVkKSkKICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29s
b3IuZ3JlZW4pKQogICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9y
LmJsdWUpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgY29udmVydFRv
Q29tcG9uZW50RmxvYXQobV9jb2xvci5hbHBoYSkpKQorICAgICAgICAsIG1fYWxwaGEoY3JlYXRl
V3JhcHBlcihvd25lciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5j
cHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyRmFzdFBhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8
U1JHQkE+KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBl
ZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2Vu
dGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0
byBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMgd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JB
PHVpbnQ4X3Q+LgorICAgICAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1
aW50OF90Pj4ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOyAvLyBGSVhNRTogQWxyZWFkeSBjbGFt
cGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVwZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJj
ZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4gdWludDhfdCBhbmQgcmVwbGFjZSBjYWxs
IHRvIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+IHdpdGggZGlyZWN0IGNv
bnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KICAgICB9CiAKICAgICAvLyBUcnkgcmdiKCkg
c3ludGF4LgpAQCAtNTA1LDcgKzUwNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlm
IChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
ICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHJlZCwgZ3JlZW4sIGJsdWUp
OyAvLyBGSVhNRTogQWxyZWFkeSBjbGFtcGVkLCBkb2Vzbid0IG5lZWQgdG8gcmUtY2xhbXAuIFVw
ZGF0ZSBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlL3BhcnNlQWxwaGFWYWx1ZSB0byByZXR1cm4g
dWludDhfdCBhbmQgcmVwbGFjZSBjYWxsIHRvIGNsYW1wVG9Db21wb25lbnRCeXRlcyB3aXRoIGRp
cmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWludDhfdD4uCisgICAgICAgIHJldHVybiBtYWtl
Q2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+PihyZWQsIGdyZWVuLCBibHVlKTsgLy8g
RklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUg
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4
X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPHVpbnQ4
X3Q+PiB3aXRoIGRpcmVjdCBjb25zdHJ1Y3Rpb24gb2YgU1JHQkE8dWludDhfdD4uCiAgICAgfQog
CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI3
MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIHN0YXRpYyB1aW50OF90
IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSAKICAgICBpZiAoaXNQZXJjZW50YWdlKQogICAgICAg
ICB2YWx1ZSA9IHZhbHVlIC8gMTAwLjAgKiAyNTUuMDsKIAotICAgIHJldHVybiBjb252ZXJ0UHJl
c2NhbGVkVG9Db21wb25lbnRCeXRlKHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxl
ZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJH
QlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC03MzksNyArNzM5LDcg
QEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgICAgICB9Ci0gICAgICAg
IGFscGhhQ29tcG9uZW50ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZShhbHBoYSk7CisgICAgICAg
IGFscGhhQ29tcG9uZW50ID0gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90PihhbHBoYSk7CiAg
ICAgfTsKIAogICAgIGlmICghYXJncy5hdEVuZCgpKQpAQCAtNzk0LDcgKzc5NCw3IEBAIHN0YXRp
YyBDb2xvciBwYXJzZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICBpZiAoIWFyZ3MuYXRFbmQo
KSkKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9u
ZW50Qnl0ZXModG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFy
cmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSkpOworICAg
IHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoSFNMQTxmbG9hdD4geyBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ckFycmF5WzFdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYWxwaGEpIH0pKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU9w
dGlvbmFsQWxwaGEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNzE2NDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtp
bmcgY29weSkKQEAgLTYwMSw3ICs2MDEsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Igd2ls
bCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsgYmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25lIGNv
bG9yIGNhbiBiZSBzcGVjaWZpZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmxpZ2h0
bmVzcyA9IDAuNWY7CiAgICAgICAgICAgICAgICAgICAgICAgICBoc2xhLmFscGhhICo9IDAuMzhm
OwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byB1bmRlcmxpbmVDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQSho
c2xhKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgQ1NTVmFsdWVDdXJyZW50Y29sb3IpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3IsIHNlcmlhbGl6YXRpb25Gb3JDU1Mo
dW5kZXJsaW5lQ29sb3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAy
NzE2NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAzLDYgKzkwMyw5IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVzZXQKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgT3B0aW9uYWw8
ZmxvYXQ+IGFscGhhKQogewogICAgIGlmIChhbHBoYSkgeworICAgICAgICBpZiAoc3RkOjppc25h
bigqYWxwaGEpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHNldFN0cm9rZVN0eWxl
KENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIGFs
cGhhLnZhbHVlKCksIGNhbnZhc0Jhc2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
OTE3LDcgKzkyMCwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoZmxv
YXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyBn
cmF5TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSB9OworICAgIGlmIChzdGQ6Omlz
bmFuKGdyYXlMZXZlbCkgfHwgc3RkOjppc25hbihhbHBoYSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8gY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpOwogICAgIGlmIChzdGF0ZSgpLnN0
cm9rZVN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRT
dHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwpAQCAtOTI1LDcgKzkzMSwxMCBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQg
YiwgZmxvYXQgYSkKIHsKLSAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyByLCBnLCBiLCBhIH07Cisg
ICAgaWYgKHN0ZDo6aXNuYW4ocikgfHwgc3RkOjppc25hbihnKSB8fCBzdGQ6OmlzbmFuKGIpICB8
fCBzdGQ6OmlzbmFuKGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0gbWFr
ZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KHIsIGcsIGIsIGEpOwogICAgIGlmIChz
dGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsK
ICAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwpAQCAtOTM0LDYgKzk0Myw5
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3QKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbENvbG9yKGNvbnN0IFN0cmluZyYgY29sb3Is
IE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkKIHsKICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgaWYg
KHN0ZDo6aXNuYW4oKmFscGhhKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBzZXRG
aWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYShj
b2xvciwgYWxwaGEudmFsdWUoKSwgY2FudmFzQmFzZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC05NDgsNyArOTYwLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2V0RmkKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaWxsQ29s
b3IoZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBhdXRvIGNvbG9yID0gU1JH
QkEgeyBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSB9OworICAgIGlmIChz
dGQ6OmlzbmFuKGdyYXlMZXZlbCkgfHwgc3RkOjppc25hbihhbHBoYSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0
Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpOwogICAgIGlmIChzdGF0
ZSgpLmZpbGxTdHlsZS5pc0VxdWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAg
c2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlKGNvbG9yKSk7CkBAIC05NTYsNyArOTcxLDEwIEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmkKIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaWxsQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQg
YiwgZmxvYXQgYSkKIHsKLSAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyByLCBnLCBiLCBhIH07Cisg
ICAgaWYgKHN0ZDo6aXNuYW4ocikgfHwgc3RkOjppc25hbihnKSB8fCBzdGQ6OmlzbmFuKGIpICB8
fCBzdGQ6OmlzbmFuKGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0gbWFr
ZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KHIsIGcsIGIsIGEpOwogICAgIGlmIChz
dGF0ZSgpLmZpbGxTdHlsZS5pc0VxdWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAg
ICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlKGNvbG9yKSk7CkBAIC0xMjg5LDYgKzEzMDcsOSBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnN0cm9rCiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWln
aHQsIGZsb2F0IGJsdXIsIGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIE9wdGlvbmFsPGZsb2F0
PiBhbHBoYSkKIHsKKyAgICBpZiAoYWxwaGEgJiYgc3RkOjppc25hbigqYWxwaGEpKQorICAgICAg
ICByZXR1cm47CisKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwog
ICAgIGlmICghY29sb3JTdHJpbmcuaXNOdWxsKCkpIHsKICAgICAgICAgY29sb3IgPSBwYXJzZUNv
bG9yT3JDdXJyZW50Q29sb3IoY29sb3JTdHJpbmcsIGNhbnZhc0Jhc2UoKSk7CkBAIC0xMzAwLDEy
ICsxMzIxLDE4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAog
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgs
IGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkK
IHsKLSAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWws
IGFscGhhIH0pKTsKKyAgICBpZiAoc3RkOjppc25hbihncmF5TGV2ZWwpIHx8IHN0ZDo6aXNuYW4o
YWxwaGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRo
LCBoZWlnaHQpLCBibHVyLCBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKTsKIH0KIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCwgZmxvYXQgYmx1ciwgZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAg
ICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21w
b25lbnRCeXRlcyhTUkdCQSB7IHIsIGcsIGIsIGEgfSkpOworICAgIGlmIChzdGQ6OmlzbmFuKHIp
IHx8IHN0ZDo6aXNuYW4oZykgfHwgc3RkOjppc25hbihiKSAgfHwgc3RkOjppc25hbihhKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwg
Ymx1ciwgbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTxmbG9hdD4+KHIsIGcsIGIsIGEpKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclNoYWRvdygpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lv
biAyNzE2NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxl
KENvbG9yIGNvbG9yKQogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoY29uc3QgU1JHQkE8
ZmxvYXQ+JiBjb2xvckNvbXBvbmVudHMpCi0gICAgOiBtX3N0eWxlKGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGVzKGNvbG9yQ29tcG9uZW50cykpCisgICAgOiBtX3N0eWxlKGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4oY29sb3JDb21wb25lbnRzKSkKIHsKIH0KIApAQCAtMTQ4LDcgKzE0OCw3IEBAIGJv
b2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnMKIAogYm9vbCBDYW52YXNTdHls
ZTo6aXNFcXVpdmFsZW50KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29tcG9uZW50cykgY29uc3QKIHsK
LSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RG
OjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKGNvbXBvbmVu
dHMpOworICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAm
JiBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pihj
b21wb25lbnRzKTsKIH0KIAogdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjcx
NjQ2KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdGF0aWMgQ29sb3IgcGFy
c2VDb2xvcihSZWZQdHI8SlNPTjo6T2JqCiAKICAgICBhdXRvIGEgPSBjb2xvck9iamVjdC0+Z2V0
RG91YmxlKFByb3RvY29sOjpET006OlJHQkFDb2xvcjo6YUtleSk7CiAgICAgaWYgKCFhKQotICAg
ICAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiKTsKLSAg
ICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiLCBjb252ZXJ0
VG9Db21wb25lbnRCeXRlKCphKSk7CisgICAgICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25l
bnRzPFNSR0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5n
Q29tcG9uZW50c0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiLCBjb252ZXJ0
RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KCphKSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZp
Z0NvbG9yKGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBKU09OOjpPYmplY3QmIGNvbmZpZ09iamVj
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJl
dmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBDb2xvciBDb2xvcjo6bGlnaHRl
bmVkKCkgY29uc3QKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsg
MC4zM2YpIC8gdjsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7
IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7Cisg
ICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBtdWx0aXBsaWVyICog
ciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOwogfQogCiBDb2xvciBDb2xv
cjo6ZGFya2VuZWQoKSBjb25zdApAQCAtMTA1LDcgKzEwNSw3IEBAIENvbG9yIENvbG9yOjpkYXJr
ZW5lZCgpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBm
bG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAg
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBt
dWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRU
bzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBtdWx0aXBsaWVyICogciwgbXVsdGlwbGllciAqIGcs
IG11bHRpcGxpZXIgKiBiLCBhIH0pOwogfQogCiBmbG9hdCBDb2xvcjo6bGlnaHRuZXNzKCkgY29u
c3QKQEAgLTE0MSw3ICsxNDEsMTUgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0
IGFscGhhKQogQ29sb3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhbGxPblVuZGVybHlpbmdUeXBlKFsmXSAoY29uc3QgYXV0
byYgdW5kZXJseWluZ0NvbG9yKSAtPiBDb2xvciB7Ci0gICAgICAgIHJldHVybiBpbnZlcnRlZENv
bG9yV2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwgYWxwaGEpOworICAgICAgICB1
c2luZyBDb2xvclR5cGUgPSBzdGQ6OmRlY2F5X3Q8ZGVjbHR5cGUodW5kZXJseWluZ0NvbG9yKT47
CisKKyAgICAgICAgLy8gRklYTUU6IERldGVybWluZSBpZiB0aGVyZSBpcyBhIG1lYW5pbmdmdWwg
dW5kZXJzdGFuZGluZyBvZiBpbnZlcnNpb24gdGhhdCB3b3JrcworICAgICAgICAvLyBiZXR0ZXIg
Zm9yIG5vbi1pbnZlcnRpYmxlIGNvbG9yIHR5cGVzIGxpa2UgTGFiIG9yIGNvbnNpZGVyIHJlbW92
aW5nIHRoaXMgaW4gZmF2b3IKKyAgICAgICAgLy8gb2YgYWx0ZXJuYXRpdmVzLgorICAgICAgICBp
ZiBjb25zdGV4cHIgKENvbG9yVHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSkKKyAgICAgICAgICAg
IHJldHVybiBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKHVuZGVybHlpbmdDb2xvciwg
YWxwaGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldp
dGhPdmVycmlkZW5BbHBoYSh0b1NSR0JBKHVuZGVybHlpbmdDb2xvciksIGFscGhhKTsKICAgICB9
KTsKIH0KIApAQCAtMTU3LDcgKzE2NSw3IEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNv
bXBvbmVudHM8ZmwKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKQogICAgICAgICByZXR1cm4geyBh
c0V4dGVuZGVkKCkuY29sb3JTcGFjZSgpLCBhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpIH07Ci0g
ICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29udmVydFRv
Q29tcG9uZW50RmxvYXRzKGFzSW5saW5lKCkpKSB9OworICAgIHJldHVybiB7IENvbG9yU3BhY2U6
OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGFzSW5saW5l
KCkpKSB9OwogfQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRl
bmRlZCgpLmFscGhhKCkgPT0gMS4wIDogYXNJbmxpbmUoKS5hbHBoYSA9PSAyNTU7IH0KICAgICBi
b29sIGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQo
KS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KLSAgICB1aW50OF90IGFs
cGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGUoYXNFeHRlbmRlZCgpLmFscGhhKCkpIDogYXNJbmxpbmUoKS5hbHBoYTsgfQotICAgIGZs
b2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5k
ZWQoKS5hbHBoYSgpIDogY29udmVydFRvQ29tcG9uZW50RmxvYXQoYXNJbmxpbmUoKS5hbHBoYSk7
IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/
IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oYXNFeHRlbmRlZCgpLmFscGhhKCkpIDogYXNJ
bmxpbmUoKS5hbHBoYTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJu
IGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpIDogY29udmVydEJ5dGVBbHBoYVRv
PGZsb2F0Pihhc0lubGluZSgpLmFscGhhKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQg
bHVtaW5hbmNlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkg
Y29uc3Q7IC8vIEZJWE1FOiBSZXBsYWNlIHJlbWFpbmluZyB1c2VzIHdpdGggbHVtaW5hbmNlLgpA
QCAtMzMxLDExICszMzEsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gQ29sb3I6
OnRvUwogICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCB1aW50OF90
PikKICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKLSAgICAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbG9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvPFNSR0JBPGZsb2F0Pj4oY29sb3IpOwogICAgICAgICB9LAogICAgICAgICBbXSAoY29u
c3QgYXV0byYgY29sb3IpIHsKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1l
X3Y8VCwgdWludDhfdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGVzKHRvU1JHQkEoY29sb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRv
PFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGNvbG9yKSk7CiAgICAgICAgICAgICBpZiBjb25zdGV4
cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKICAgICAgICAgICAgICAgICByZXR1cm4gdG9T
UkdCQShjb2xvcik7CiAgICAgICAgIH0KQEAgLTM5MSwxNSArMzkxLDE1IEBAIGlubGluZSB2b2lk
IENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjwKIAogaW5saW5lIGJvb2wgQ29sb3I6OmlzQmxh
Y2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJuIGNvbG9yLmNhbGxPblVu
ZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiBjb2xvcikgewotICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6aXNCbGFjayhjb2xvcik7CisgICAgcmV0dXJuIGNvbG9yLmNhbGxPblVuZGVybHlpbmdU
eXBlKFtdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIHsKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OmlzQmxhY2sodW5kZXJseWluZ0NvbG9yKTsKICAgICB9KTsKIH0KIAogaW5saW5lIGJv
b2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgcmV0dXJu
IGNvbG9yLmNhbGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiBjb2xvcikgewotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6aXNXaGl0ZShjb2xvcik7CisgICAgcmV0dXJuIGNvbG9yLmNh
bGxPblVuZGVybHlpbmdUeXBlKFtdIChjb25zdCBhdXRvJiB1bmRlcmx5aW5nQ29sb3IpIHsKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUodW5kZXJseWluZ0NvbG9yKTsKICAgICB9KTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JCbGVuZGluZy5jcHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYgYmFja2QKICAgICBpbnQg
ZyA9IChiYWNrZHJvcEcgKiBiYWNrZHJvcEEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNv
dXJjZUEgKiBzb3VyY2VHKSAvIGQ7CiAgICAgaW50IGIgPSAoYmFja2Ryb3BCICogYmFja2Ryb3BB
ICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3VyY2VBICogc291cmNlQikgLyBkOwogCi0g
ICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywgYiwgYSk7CisgICAg
cmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHIsIGcsIGIsIGEp
OwogfQogCiBDb2xvciBibGVuZFdpdGhXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCkBAIC03OCw3
ICs3OCw3IEBAIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAg
ICAgaW50IGcgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0csIGFscGhhKTsKICAgICAgICAgaW50
IGIgPSBibGVuZENvbXBvbmVudChleGlzdGluZ0IsIGFscGhhKTsKIAotICAgICAgICByZXN1bHQg
PSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIGFscGhhKTsKKyAgICAgICAg
cmVzdWx0ID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4ociwgZywgYiwg
YWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYmIGIgPj0gMCkKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbG9yIGJsZW5kKGNvbnN0IENvbG9y
JiBmcm9tLCBjb25zdCBDb2wKICAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gcHJlbXVsdGlw
bGllZENlaWxpbmcoZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKSk7CiAgICAgYXV0byBwcmVt
dWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyh0by50b1NSR0JBTG9zc3k8dWludDhf
dD4oKSk7CiAKLSAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gY2xhbXBUb0NvbXBvbmVu
dEJ5dGVzPFNSR0JBPigKKyAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gbWFrZUNsYW1w
aW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHBy
ZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJlZCwgcHJvZ3Jlc3MpLAogICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbiwgcHJlbXVsdGlwbGll
ZFRvLmdyZWVuLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxp
ZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVlLCBwcm9ncmVzcyksCkBAIC0xMjAsNyAr
MTIwLDcgQEAgQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogICAgIGF1
dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgIGF1dG8gdG9T
UkdCID0gdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKLSAgICByZXR1cm4gY2xhbXBUb0Nv
bXBvbmVudEJ5dGVzPFNSR0JBPigKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50czxT
UkdCQTx1aW50OF90Pj4oCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZCwgdG9T
UkdCLnJlZCwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVl
biwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
UkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlzaW9u
IDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVy
c2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI4ICszMiw3NCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWZsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQgYykKKy8v
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKKy8vIGh0dHA6Ly93d3cuYnJ1Y2Vs
aW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKK3N0YXRpYyBj
b25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKKyAgICAg
My4yNDA0NTQyZiwgLTEuNTM3MTM4NWYsIC0wLjQ5ODUzMTRmLAorICAgIC0wLjk2OTI2NjBmLCAg
MS44NzYwMTA4ZiwgIDAuMDQxNTU2MGYsCisgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAyNTlmLCAg
MS4wNTcyMjUyZgorfTsKKworLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgor
Ly8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9N
YXRyaXguaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJTUkdC
VG9YWVpNYXRyaXggeworICAgIDAuNDEyNDU2NGYsICAwLjM1NzU3NjFmLCAgMC4xODA0Mzc1ZiwK
KyAgICAwLjIxMjY3MjlmLCAgMC43MTUxNTIyZiwgIDAuMDcyMTc1MGYsCisgICAgMC4wMTkzMzM5
ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCit9OworCisvLyBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNvZGUKK3N0YXRpYyBjb25zdGV4cHIg
Q29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXggeworICAgICAyLjQ5
MzQ5NjkxMTk0MTQyNWYsICAtMC45MzEzODM2MTc5MTkxMjM5ZiwgLTAuNDAyNzEwNzg0NDUwNzE2
OGYsCisgICAgLTAuODI5NDg4OTY5NTYxNTc0N2YsICAxLjc2MjY2NDA2MDMxODM0NjNmLCAgMC4w
MjM2MjQ2ODU4NDE5NDM2ZiwKKyAgICAgMC4wMzU4NDU4MzAyNDM3ODQ1ZiwgLTAuMDc2MTcyMzg5
MjY4MDQxOGYsICAwLjk1Njg4NDUyNDAwNzY4NzJmCit9OworCisvLyBodHRwczovL2RyYWZ0cy5j
c3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNvZGUKK3N0YXRpYyBjb25zdGV4
cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxheVAzVG9YWVpNYXRyaXggeworICAgIDAu
NDg2NTcwOTQ4NjQ4MjE2MmYsIDAuMjY1NjY3NjkzMTY5MDkzMWYsIDAuMTk4MjE3Mjg1MjM0MzYz
ZiwKKyAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTczODUyMTgzNjUwNjRmLCAwLjA3OTI4
NjkxNDA5Mzc0NWYsCisgICAgMC4wZiwgICAgICAgICAgICAgICAgMC4wNDUxMTMzODE4NTg5MDI2
ZiwgMS4wNDM5NDQzNjg5MDA5NzZmCit9OworCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29t
LmNvbS9pbmRleC5odG1sP0Vxbl9DaHJvbUFkYXB0Lmh0bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29s
b3JNYXRyaXg8MywgMz4gRDUwVG9ENjVNYXRyaXggeworICAgICAwLjk1NTU3NjZmLCAtMC4wMjMw
MzkzZiwgMC4wNjMxNjM2ZiwKKyAgICAtMC4wMjgyODk1ZiwgIDEuMDA5OTQxNmYsIDAuMDIxMDA3
N2YsCisgICAgIDAuMDEyMjk4MmYsIC0wLjAyMDQ4MzBmLCAxLjMyOTkwOThmCit9OworCisvLyBo
dHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9DaHJvbUFkYXB0Lmh0
bWwKK3N0YXRpYyBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gRDY1VG9ENTBNYXRyaXggewor
ICAgICAxLjA0NzgxMTJmLCAwLjAyMjg4NjZmLCAtMC4wNTAxMjcwZiwKKyAgICAgMC4wMjk1NDI0
ZiwgMC45OTA0ODQ0ZiwgLTAuMDE3MDQ5MWYsCisgICAgLTAuMDA5MjM0NWYsIDAuMDE1MDQzNmYs
ICAwLjc1MjEzMTZmCit9OworCitmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBp
bmcoZmxvYXQgYykKIHsKICAgICBpZiAoYyA8IDAuMDAzMTMwOGYpCi0gICAgICAgIHJldHVybiAx
Mi45MmYgKiBjOworICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KDEyLjkyZiAqIGMsIDAp
OwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KDEuMDU1ZiAqIHN0ZDo6cG93KGMsIDEuMGYg
LyAyLjRmKSAtIDAuMDU1ZiwgMCwgMSk7CiB9CiAKLWZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21w
b25lbnQoZmxvYXQgYykKK2Zsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhm
bG9hdCBjKQogewogICAgIGlmIChjIDw9IDAuMDQwNDVmKQotICAgICAgICByZXR1cm4gYyAvIDEy
LjkyZjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PGZsb2F0PihjIC8gMTIuOTJmLCAwKTsKIAog
ICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihzdGQ6OnBvdygoYyArIDAuMDU1ZikgLyAxLjA1NWYs
IDIuNGYpLCAwLCAxKTsKIH0KIAorLy8gR2FtbWEgY29udmVyc2lvbnMuCisKIExpbmVhclNSR0JB
PGZsb2F0PiB0b0xpbmVhclNSR0JBKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAg
cmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5yZWQpLAot
ICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmdyZWVuKSwKLSAgICAgICAg
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVlKSwKKyAgICAgICAgcmdiVG9MaW5l
YXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCksCisgICAgICAgIHJnYlRvTGluZWFy
Q29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiksCisgICAgICAgIHJnYlRvTGluZWFy
Q29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwKICAgICAgICAgY29sb3IuYWxwaGEK
ICAgICB9OwogfQpAQCAtNjEsOSArMTA3LDkgQEAgTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFy
U1JHQkEoY29uc3QgUwogU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgTGluZWFyU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29t
cG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29s
b3IuZ3JlZW4pLAotICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUp
LAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwK
KyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwK
KyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAog
ICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBAIC03MSw5ICsxMTcsOSBAQCBTUkdCQTxm
bG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmCiBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+
IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAg
IHJldHVybiB7Ci0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwK
LSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAg
IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIHJnYlRvTGlu
ZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICByZ2JUb0xpbmVh
ckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICByZ2JUb0xpbmVh
ckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhh
CiAgICAgfTsKIH0KQEAgLTgxLDgxICsxMjcsNDkgQEAgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0
b0xpbmVhckRpc3BsYXlQMwogRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhjb25zdCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICBsaW5l
YXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIGxpbmVhclRvUkdCQ29s
b3JDb21wb25lbnQoY29sb3IuZ3JlZW4pLAotICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9u
ZW50KGNvbG9yLmJsdWUpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBp
bmcoY29sb3IucmVkKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5n
KGNvbG9yLmdyZWVuKSwKKyAgICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudENsYW1waW5n
KGNvbG9yLmJsdWUpLAogICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CiAKKy8vIE1hdHJp
eCBjb252ZXJzaW9ucy4KKwogTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3Qg
WFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL1NSR0IKLSAgICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1s
P0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCi0gICAgY29uc3RleHByIENvbG9yTWF0cml4PDMsIDM+
IHh5elRvTGluZWFyU1JHQk1hdHJpeCB7Ci0gICAgICAgICAzLjI0MDQ1NDJmLCAtMS41MzcxMzg1
ZiwgLTAuNDk4NTMxNGYsCi0gICAgICAgIC0wLjk2OTI2NjBmLCAgMS44NzYwMTA4ZiwgIDAuMDQx
NTU2MGYsCi0gICAgICAgICAwLjA1NTY0MzRmLCAtMC4yMDQwMjU5ZiwgIDEuMDU3MjI1MmYKLSAg
ICB9OwotICAgIHJldHVybiBhc0xpbmVhclNSR0JBKHh5elRvTGluZWFyU1JHQk1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICBy
ZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPExpbmVhclNSR0JBPGZsb2F0
Pj4oeHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGlu
ZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9TUkdCCi0gICAgLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXgu
aHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwz
LCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggewotICAgICAgICAwLjQxMjQ1NjRmLCAgMC4zNTc1
NzYxZiwgIDAuMTgwNDM3NWYsCi0gICAgICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1MjJmLCAgMC4w
NzIxNzUwZiwKLSAgICAgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTkyMGYsICAwLjk1MDMwNDFmCi0g
ICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhclNSR0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1l
ZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICByZXR1cm4g
bWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihsaW5lYXJTUkdC
VG9YWVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpKSk7CiB9CiAKIExpbmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMo
Y29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dn
Lm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQotICAgIGNvbnN0ZXhwciBDb2xv
ck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeCB7Ci0gICAgICAgICAyLjQ5
MzQ5NjkxMTk0MTQyNWYsICAtMC45MzEzODM2MTc5MTkxMjM5ZiwgLTAuNDAyNzEwNzg0NDUwNzE2
OGYsCi0gICAgICAgIC0wLjgyOTQ4ODk2OTU2MTU3NDdmLCAgMS43NjI2NjQwNjAzMTgzNDYzZiwg
IDAuMDIzNjI0Njg1ODQxOTQzNmYsCi0gICAgICAgICAwLjAzNTg0NTgzMDI0Mzc4NDVmLCAtMC4w
NzYxNzIzODkyNjgwNDE4ZiwgIDAuOTU2ODg0NTI0MDA3Njg3MmYKLSAgICB9OwotICAgIHJldHVy
biBhc0xpbmVhckRpc3BsYXlQMyh4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJpeC50cmFuc2Zvcm1l
ZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICByZXR1cm4g
bWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPExpbmVhckRpc3BsYXlQMzxmbG9hdD4+
KHh5elRvTGluZWFyRGlzcGxheVAzTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3Qg
TGluZWFyRGlzcGxheVAzPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2RlCi0gICAgY29uc3RleHBy
IENvbG9yTWF0cml4PDMsIDM+IGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4IHsKLSAgICAgICAg
MC40ODY1NzA5NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4xOTgyMTcyODUyMzQz
NjNmLAotICAgICAgICAwLjIyODk3NDU2NDA2OTc0ODhmLCAwLjY5MTczODUyMTgzNjUwNjRmLCAw
LjA3OTI4NjkxNDA5Mzc0NWYsCi0gICAgICAgIDAuMGYsICAgICAgICAgICAgICAgIDAuMDQ1MTEz
MzgxODU4OTAyNmYsIDEuMDQzOTQ0MzY4OTAwOTc2ZgotICAgIH07Ci0gICAgcmV0dXJuIGFzWFla
QShsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9u
ZW50c0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50
cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0K
IAorLy8gQ2hyb21hdGljIEFkYXB0YXRpb24gY29udmVyc2lvbnMuCisKIHN0YXRpYyBYWVpBPGZs
b2F0PiBjb252ZXJ0RnJvbUQ1MFdoaXRlUG9pbnRUb0Q2NVdoaXRlUG9pbnQoY29uc3QgWFlaQTxm
bG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2lu
ZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwz
LCAzPiBENTBUb0Q2NU1hdHJpeCB7Ci0gICAgICAgICAwLjk1NTU3NjZmLCAtMC4wMjMwMzkzZiwg
MC4wNjMxNjM2ZiwKLSAgICAgICAgLTAuMDI4Mjg5NWYsICAxLjAwOTk0MTZmLCAwLjAyMTAwNzdm
LAotICAgICAgICAgMC4wMTIyOTgyZiwgLTAuMDIwNDgzMGYsIDEuMzI5OTA5OGYKLSAgICB9Owot
ICAgIHJldHVybiBhc1hZWkEoRDUwVG9ENjVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVu
dHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0Nv
bXBvbmVudHNFeGNlcHRBbHBoYTxYWVpBPGZsb2F0Pj4oRDUwVG9ENjVNYXRyaXgudHJhbnNmb3Jt
ZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAKIHN0YXRp
YyBYWVpBPGZsb2F0PiBjb252ZXJ0RnJvbUQ2NVdoaXRlUG9pbnRUb0Q1MFdoaXRlUG9pbnQoY29u
c3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxv
b20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAotICAgIGNvbnN0ZXhwciBDb2xv
ck1hdHJpeDwzLCAzPiBENjVUb0Q1ME1hdHJpeCB7Ci0gICAgICAgICAxLjA0NzgxMTJmLCAwLjAy
Mjg4NjZmLCAtMC4wNTAxMjcwZiwKLSAgICAgICAgIDAuMDI5NTQyNGYsIDAuOTkwNDg0NGYsIC0w
LjAxNzA0OTFmLAotICAgICAgICAtMC4wMDkyMzQ1ZiwgMC4wMTUwNDM2ZiwgIDAuNzUyMTMxNmYK
LSAgICB9OwotICAgIHJldHVybiBhc1hZWkEoRDY1VG9ENTBNYXRyaXgudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgcmV0dXJuIG1ha2VD
bGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBoYTxYWVpBPGZsb2F0Pj4oRDY1VG9ENTBNYXRyaXgu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9
CiAKKy8vIExhYiBjb252ZXJzaW9ucy4KKwogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBMQUJlID0g
MjE2LjBmIC8gMjQzODkuMGY7CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IExBQmsgPSAyNDM4OS4w
ZiAvIDI3LjBmOwogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBENTBXaGl0ZVZhbHVlc1tdID0geyAw
Ljk2NDIyZiwgMS4wZiwgMC44MjUyMWYgfTsKQEAgLTIyMSw2ICsyMzUsOSBAQCBMYWI8ZmxvYXQ+
IHRvTGFiKGNvbnN0IFhZWkE8ZmxvYXQ+JiBjb2xvCiAgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBh
LCBiLCBjb2xvcldpdGhENTBXaGl0ZVBvaW50LmFscGhhIH07CiB9CiAKKworLy8gTENIIGNvbnZl
cnNpb25zLgorCiBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7
CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci00LyNsYWItdG8tbGNoCkBA
IC0yNDcsNiArMjY0LDggQEAgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBMQ0hBPGZsb2F0PiYgY29s
bwogICAgIH07CiB9CiAKKy8vIEhTTCBjb252ZXJzaW9ucy4KKwogSFNMQTxmbG9hdD4gdG9IU0xB
KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9IU0xfY29sb3Jfc3BhY2UuCkBAIC0zMzIsNiArMzUxLDggQEAgU1JHQkE8Zmxv
YXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mIAogICAgIH07CiB9CiAKKy8vIENNWUsgY29u
dmVyc2lvbnMuCisKIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IENNWUtBPGZsb2F0PiYgY29s
b3IpCiB7CiAgICAgYXV0byBbYywgbSwgeSwgaywgYV0gPSBjb2xvcjsKQEAgLTM1Niw2ICszNzcs
OSBAQCBDTVlLQTxmbG9hdD4gdG9DTVlLQShjb25zdCBTUkdCQTxmbG9hdD4mCiAgICAgcmV0dXJu
IHsgYywgbSwgeSwgaywgYSB9OwogfQogCisKKy8vIENvbWJpbmF0aW9uIGNvbnZlcnNpb25zIChj
b25zdHJ1Y3RlZCBmcm9tIG1vcmUgYmFzaWMgY29udmVyc2lvbnMgYWJvdmUpLgorCiBYWVpBPGZs
b2F0PiB0b1hZWkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gdG9Y
WVpBKHRvTGluZWFyU1JHQkEoY29sb3IpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCShyZXZpc2lvbiAyNzE2NDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsOSArMzAsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBU
aGVzZSBhcmUgdGhlIHN0YW5kYXJkIHNSR0IgPC0+IExpbmVhclJHQiAvIERpc3BsYXlQMyA8LT4g
TGluZWFyRGlzcGxheVAzIGNvbnZlcnNpb24gZnVuY3Rpb25zIChodHRwczovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9TUkdCKS4KLWZsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQp
OwotZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCk7Ci0KK2Zsb2F0IGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnRDbGFtcGluZyhmbG9hdCk7CitmbG9hdCByZ2JUb0xpbmVhckNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoZmxvYXQpOwogCiAvLyBBbGwgY29sb3IgdHlwZXMgbXVzdCBh
dCBsZWFzdCBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBjb252ZXJzaW9ucyB0byBhbmQgZnJvbSB0
aGUgWFlaQSBjb2xvciBzcGFjZToKIC8vICAgIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBDb2xv
clR5cGU8ZmxvYXQ+Jik7CkBAIC01Niw0MiArNTUsMzYgQEAgV0VCQ09SRV9FWFBPUlQgTGluZWFy
U1JHQkE8ZmxvYXQ+IHRvTGluZQogLy8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBTUkdCQTxm
bG9hdD4gdG9TUkdCQShjb25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mKTsKIAotCiAvLyBEaXNwbGF5
UDMKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBEaXNwbGF5UDM8Zmxv
YXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0
IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExpbmVhckRpc3Bs
YXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYpOwog
Ci0KIC8vIExpbmVhckRpc3BsYXlQMwogV0VCQ09SRV9FWFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpB
KGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIExpbmVhckRp
c3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8v
IEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgRGlzcGxheVAzPGZsb2F0PiB0b0Rpc3BsYXlQMyhj
b25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLQogLy8gTGFiCiBXRUJDT1JFX0VYUE9S
VCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGFiPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQg
TGFiPGZsb2F0PiB0b0xhYihjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25zCiBXRUJD
T1JFX0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgTGFiPGZsb2F0PiYpOwogCi0KIC8v
IExDSEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBMQ0hBPGZsb2F0
PiYpOwogV0VCQ09SRV9FWFBPUlQgTENIQTxmbG9hdD4gdG9MQ0hBKGNvbnN0IFhZWkE8ZmxvYXQ+
Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExhYjxmbG9hdD4gdG9MYWIoY29uc3Qg
TENIQTxmbG9hdD4mKTsKIAotCiAvLyBIU0xBCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0
b1hZWkEoY29uc3QgSFNMQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIEhTTEE8ZmxvYXQ+IHRv
SFNMQShjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25zCiBXRUJDT1JFX0VYUE9SVCBT
UkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYpOwogCi0KIC8vIENNWUtBCiBX
RUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgQ01ZS0E8ZmxvYXQ+Jik7CiBX
RUJDT1JFX0VYUE9SVCBDTVlLQTxmbG9hdD4gdG9DTVlLQShjb25zdCBYWVpBPGZsb2F0PiYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAko
cmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsMjE2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDb21wb25lbnRUcmFpdHM7
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEFscGhhVHJhaXRzOwogCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb21wb25lbnRUcmFpdHM8dWludDhfdD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDhfdCBtaW5WYWx1ZSA9IDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1heFZhbHVl
ID0gMjU1OwordGVtcGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8dWludDhfdD4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCB0cmFuc3BhcmVudCA9IDA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50OF90IG9wYXF1ZSA9IDI1NTsKIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IENvbXBv
bmVudFRyYWl0czxmbG9hdD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWluVmFsdWUg
PSAwLjBmOwotICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgbWF4VmFsdWUgPSAxLjBmOwordGVt
cGxhdGU8PiBzdHJ1Y3QgQWxwaGFUcmFpdHM8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGZsb2F0IHRyYW5zcGFyZW50ID0gMC4wZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IG9w
YXF1ZSA9IDEuMGY7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JDb21w
b25lbnRSYW5nZSB7CisgICAgVCBtaW47CisgICAgVCBtYXg7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZT4gc3RydWN0IFJHQk1vZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMYWJNb2Rl
bDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTENITW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IEhTTE1vZGVsOwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBDTVlLTW9kZWw7
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IFhZWk1vZGVsOworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBSR0JNb2RlbDx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENv
bG9yQ29tcG9uZW50UmFuZ2U8dWludDhfdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAy
NTUgfSwKKyAgICAgICAgeyAwLCAyNTUgfSwKKyAgICAgICAgeyAwLCAyNTUgfQorICAgIH0gfTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gdHJ1ZTsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
dGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAg
ICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAwLCAxIH0KKyAgICB9
IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBMYWJNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsgewor
ICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisg
ICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7IC1zdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbnZl
cnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBMQ0hNb2RlbDxmbG9hdD4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZs
b2F0PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAwLCAzNjAgfQorICAgIH0gfTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBIU0xNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJh
eTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAs
IDM2MCB9LAorICAgICAgICB7IDAsIDEwMCB9LAorICAgICAgICB7IDAsIDEwMCB9CisgICAgfSB9
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ01ZS01vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCA0PiByYW5nZXMgeyB7Cisg
ICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAwLCAxIH0sCisg
ICAgICAgIHsgMCwgMSB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
dmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgWFlaTW9kZWw8ZmxvYXQ+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTxm
bG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0s
CisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAorICAgICAgICB7IC1zdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46OmluZmluaXR5KCkgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bnZlcnRpYmxlID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxUPiYgYykKK3sKKyAgICByZXR1cm4gQ29sb3JUeXBlIHsgY1swXSwgY1sx
XSwgY1syXSwgY1szXSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHVuc2ln
bmVkIEluZGV4LCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgYXV0byBjbGFtcGVkQ29tcG9uZW50KFQg
YykgLT4gdHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlCit7CisgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX2ludGVncmFsX3Y8VD4pOworCisgICAgY29uc3RleHByIGF1dG8gcmFuZ2Ug
PSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbSW5kZXhdOworICAgIHJldHVybiBzdGQ6OmNsYW1w
PFQ+KGMsIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB1bnNpZ25lZCBJbmRleD4gY29uc3RleHByIGZsb2F0IGNsYW1wZWRDb21wb25lbnQo
ZmxvYXQgYykKK3sKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZSA9IENvbG9yVHlwZTo6TW9kZWw6
OnJhbmdlc1tJbmRleF07CisKKyAgICBpZiBjb25zdGV4cHIgKHJhbmdlLm1pbiA9PSAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgJiYgcmFuZ2UubWF4ID09IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAgICByZXR1cm4gYzsKKworICAg
IGlmIGNvbnN0ZXhwciAocmFuZ2UubWluID09IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
aW5maW5pdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGMsIHJhbmdlLm1heCk7CisKKyAg
ICBpZiBjb25zdGV4cHIgKHJhbmdlLm1heCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
aW5maW5pdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGMsIHJhbmdlLm1pbik7CisKKyAg
ICByZXR1cm4gc3RkOjpjbGFtcChjLCByYW5nZS5taW4sIHJhbmdlLm1heCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdW5zaWduZWQgSW5kZXgsIHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBUIGNsYW1wZWRDb21wb25lbnQoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQorewor
ICAgIHJldHVybiBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgSW5kZXg+KGNbSW5kZXhdKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcG9uZW50VHlwZSA9IFQ+IGNv
bnN0ZXhwciBDb21wb25lbnRUeXBlIGNsYW1wZWRBbHBoYShUIGFscGhhKQoreworICAgIHJldHVy
biBzdGQ6OmNsYW1wPFQ+KGFscGhhLCBBbHBoYVRyYWl0czxDb21wb25lbnRUeXBlPjo6dHJhbnNw
YXJlbnQsIEFscGhhVHJhaXRzPENvbXBvbmVudFR5cGU+OjpvcGFxdWUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VD4gY2xhbXBlZENvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25l
bnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBl
LCAwPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDE+
KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oY29t
cG9uZW50cyksCisgICAgICAgIGNsYW1wZWRBbHBoYShjb21wb25lbnRzWzNdKQorICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxUPiBjbGFtcGVkQ29tcG9uZW50c0V4Y2VwdEFscGhhKGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1cm4geworICAgICAgICBjbGFt
cGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4oY29tcG9uZW50cyksCisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAxPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBv
bmVudDxDb2xvclR5cGUsIDI+KGNvbXBvbmVudHMpLAorICAgICAgICBjb21wb25lbnRzWzNdCisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JUeXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25l
bnRzPFQ+JiBjb21wb25lbnRzKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29s
b3JUeXBlPihjbGFtcGVkQ29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JU
eXBlIG1ha2VDbGFtcGluZ0NvbXBvbmVudHMoVCBjMSwgVCBjMiwgVCBjMykKK3sKKyAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAg
ICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENv
bXBvbmVudDxDb2xvclR5cGUsIDE+KGMyKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xv
clR5cGUsIDI+KGMzKSwKKyAgICAgICAgQWxwaGFUcmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPjo6b3BhcXVlCisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlQ2xhbXBpbmdDb21w
b25lbnRzKFQgYzEsIFQgYzIsIFQgYzMsIFQgYWxwaGEpCit7CisgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAxPihjMiksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihj
MyksCisgICAgICAgIGNsYW1wZWRBbHBoYTxULCB0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+KGFscGhhKQorICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUs
IHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUNsYW1waW5nQ29tcG9uZW50c0V4
Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICBy
ZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNFeGNl
cHRBbHBoYTxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9yVHlw
ZSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGEoVCBjMSwgVCBjMiwgVCBjMywgQWxw
aGEgYWxwaGEpCit7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENv
bG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihj
MSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAxPihjMiksCisgICAgICAg
IGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjMyksCisgICAgICAgIGFscGhhCisgICAg
fSk7Cit9CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgdm9pZCBhc3NlcnRJblJhbmdlKFQgY29sb3IpCit7CisgICAgaWYgY29uc3RleHByIChz
dGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlLCBmbG9hdD4pIHsKKyAgICAg
ICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGNvbXBvbmVudHNbaV0gPj0gVDo6TW9kZWw6OnJhbmdlc1tpXS5taW4sICJDb21w
b25lbnQgYXQgaW5kZXggJWQgaXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBtaW5p
bXVtICVmIiwgaSwgIGNvbXBvbmVudHNbaV0sIFQ6Ok1vZGVsOjpyYW5nZXNbaV0ubWluKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoY29tcG9uZW50c1tpXSA8PSBUOjpNb2RlbDo6
cmFuZ2VzW2ldLm1heCwgIkNvbXBvbmVudCBhdCBpbmRleCAlZCBpcyAlZiBhbmQgaXMgZ3JlYXRl
ciB0aGFuIHRoZSBhbGxvd2VkIG1heGltdW0gJWYiLCBpLCAgY29tcG9uZW50c1tpXSwgVDo6TW9k
ZWw6OnJhbmdlc1tpXS5tYXgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoY29sb3IuYWxwaGEgPj0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZT46
OnRyYW5zcGFyZW50LCAiQWxwaGEgaXMgJWYgYW5kIGlzIGxlc3MgdGhhbiB0aGUgYWxsb3dlZCBt
aW5pbXVtICh0cmFuc3BhcmVudCkgJWYiLCBjb2xvci5hbHBoYSwgQWxwaGFUcmFpdHM8dHlwZW5h
bWUgVDo6Q29tcG9uZW50VHlwZT46OnRyYW5zcGFyZW50KTsKKyAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShjb2xvci5hbHBoYSA8PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBUOjpDb21wb25lbnRU
eXBlPjo6b3BhcXVlLCAiQWxwaGEgaXMgJWYgYW5kIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dl
ZCBtYXhpbXVtIChvcGFxdWUpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJhaXRzPHR5cGVuYW1l
IFQ6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWUpOworICAgIH0KK30KKworI2Vsc2UKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUKQoreworfQorCisj
ZW5kaWYKKwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZD4gaW5saW5lIGNvbnN0
ZXhwciBib29sIEhhc0NvbG9yU3BhY2VNZW1iZXIgPSBmYWxzZTsKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBjb25zdGV4cHIgYm9vbCBIYXNDb2xvclNwYWNlTWVtYmVyPFQsIHN0ZDo6dm9p
ZF90PGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxUPigpLmNvbG9yU3BhY2UpPj4gPSB0cnVlOwogCkBA
IC03NCwxOCArMjcyLDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFBhcmVudD4gc3RydWN0IENvbG9y
V2kKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNSR0JBIDogQ29sb3JXaXRoQWxwaGFI
ZWxwZXI8U1JHQkE8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKLSAgICBzdGF0
aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0I7Ci0KLSAgICBj
b25zdGV4cHIgU1JHQkEoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IENvbXBvbmVu
dFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgdXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlNSR0IgfTsK
KyAgICAKKyAgICBjb25zdGV4cHIgU1JHQkEoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBo
YSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAg
ICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwg
YWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAg
ICB9CiAKICAgICBjb25zdGV4cHIgU1JHQkEoKQotICAgICAgICA6IFNSR0JBIHsgQ29tcG9uZW50
VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9u
ZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9Cisg
ICAgICAgIDogU1JHQkEgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0xMDAsMTEg
KzMwMCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICBy
ZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBhc1NSR0JBKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19
Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qg
U1JHQkE8VD4mIGEsIGNvbnN0IFNSR0JBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29t
cG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTExOCwxOCArMzEzLDIwIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TGluZWFy
U1JHQkE8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsKKyAgICB1c2luZyBNb2Rl
bCA9IFJHQk1vZGVsPFQ+OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBjb2xvclNwYWNlID0g
Q29sb3JTcGFjZTo6TGluZWFyUkdCOwogCi0gICAgY29uc3RleHByIExpbmVhclNSR0JBKFQgcmVk
LCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVl
KQorICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdCQShUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFs
cGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiByZWQgeyByZWQgfQogICAg
ICAgICAsIGdyZWVuIHsgZ3JlZW4gfQogICAgICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAg
LCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwog
ICAgIH0KIAogICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdCQSgpCi0gICAgICAgIDogTGluZWFyU1JH
QkEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlIH0KKyAgICAgICAgOiBMaW5lYXJTUkdCQSB7IDAsIDAsIDAsIDAgfQogICAgIHsK
ICAgICB9CiAKQEAgLTE0NCwxMSArMzQxLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxw
aGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExpbmVhclNSR0JBPFQ+
IGFzTGluZWFyU1JHQkEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVy
biB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMaW5lYXJTUkdCQTxUPiYgYSwgY29uc3Qg
TGluZWFyU1JHQkE8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09
IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAtMTYyLDE4ICszNTQsMjAgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGlzcGxheVAzIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8RGlzcGxheVAzPFQ+PiB7CiAgICAg
dXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsK
ICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3Bs
YXlQMzsKIAotICAgIGNvbnN0ZXhwciBEaXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwg
VCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIERp
c3BsYXlQMyhUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46
Om9wYXF1ZSkKICAgICAgICAgOiByZWQgeyByZWQgfQogICAgICAgICAsIGdyZWVuIHsgZ3JlZW4g
fQogICAgICAgICAsIGJsdWUgeyBibHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAg
ICB7CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhw
ciBEaXNwbGF5UDMoKQotICAgICAgICA6IERpc3BsYXlQMyB7IENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IERp
c3BsYXlQMyB7IDAsIDAsIDAsIDAgfQogICAgIHsKICAgICB9CiAKQEAgLTE4OCwxMSArMzgyLDYg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7
IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIERpc3BsYXlQMzxUPiBhc0Rpc3BsYXlQMyhjb25zdCBDb2xvckNvbXBv
bmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9Owot
fQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IERpc3BsYXlQMzxUPiYgYSwgY29uc3QgRGlzcGxheVAzPFQ+JiBiKQogewogICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTIwNiwxNyAr
Mzk1LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhckRpc3BsYXlQMyA6IENvbG9yV2l0aEFscGhh
SGVscGVyPExpbmVhckRpc3BsYXlQMzxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBU
OworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgTGluZWFy
RGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFp
dHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBMaW5lYXJEaXNwbGF5UDMoVCByZWQsIFQg
Z3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAg
IDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVl
IHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3Nl
cnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAz
KCkKLSAgICAgICAgOiBMaW5lYXJEaXNwbGF5UDMgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZh
bHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBMaW5lYXJE
aXNwbGF5UDMgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0yMzEsMTEgKzQyMiw2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4g
eyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJEaXNwbGF5UDM8VD4gYXNMaW5lYXJEaXNwbGF5UDMoY29u
c3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNb
Ml0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IExpbmVhckRpc3BsYXlQ
MzxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNv
bXBvbmVudHMoYik7CkBAIC0yNDksMTggKzQzNSwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMYWIgOiBD
b2xvcldpdGhBbHBoYUhlbHBlcjxMYWI8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0g
VDsKKyAgICB1c2luZyBNb2RlbCA9IExhYk1vZGVsPFQ+OwogICAgIHN0YXRpYyBjb25zdGV4cHIg
YXV0byBjb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6TGFiOwogCi0gICAgY29uc3RleHByIExhYihU
IGxpZ2h0bmVzcywgVCBhLCBUIGIsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZh
bHVlKQorICAgIGNvbnN0ZXhwciBMYWIoVCBsaWdodG5lc3MsIFQgYSwgVCBiLCBUIGFscGhhID0g
QWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiBsaWdodG5lc3MgeyBsaWdodG5lc3Mg
fQogICAgICAgICAsIGEgeyBhIH0KICAgICAgICAgLCBiIHsgYiB9CiAgICAgICAgICwgYWxwaGEg
eyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAK
ICAgICBjb25zdGV4cHIgTGFiKCkKLSAgICAgICAgOiBMYWIgeyBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBM
YWIgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0yNzUsMTEgKzQ2Myw2IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmxp
Z2h0bmVzcywgYy5hLCBjLmIsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIExhYjxUPiBhc0xhYihjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0g
ICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExhYjxUPiYgYSwgY29uc3Qg
TGFiPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9y
Q29tcG9uZW50cyhiKTsKQEAgLTI5MywxNyArNDc2LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExDSEEg
OiBDb2xvcldpdGhBbHBoYUhlbHBlcjxMQ0hBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlw
ZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBMQ0hNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBM
Q0hBKFQgbGlnaHRuZXNzLCBUIGNocm9tYSwgVCBodWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFp
dHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBMQ0hBKFQgbGlnaHRuZXNzLCBUIGNocm9t
YSwgVCBodWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGxp
Z2h0bmVzcyB7IGxpZ2h0bmVzcyB9CiAgICAgICAgICwgY2hyb21hIHsgY2hyb21hIH0KICAgICAg
ICAgLCBodWUgeyBodWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAg
ICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIExDSEEoKQot
ICAgICAgICA6IExDSEEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRU
cmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25l
bnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBMQ0hBIHsgMCwgMCwgMCwgMCB9CiAg
ICAgewogICAgIH0KIApAQCAtMzE4LDExICs1MDMsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5saWdodG5lc3MsIGMuY2hyb21hLCBj
Lmh1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgTENI
QTxUPiBhc0xDSEEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7
IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMQ0hBPFQ+JiBhLCBjb25zdCBMQ0hBPFQ+JiBi
KQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50
cyhiKTsKQEAgLTMzNiwxNyArNTE2LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhTTEEgOiBDb2xvcldp
dGhBbHBoYUhlbHBlcjxIU0xBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Cisg
ICAgdXNpbmcgTW9kZWwgPSBIU0xNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBIU0xBKFQgaHVl
LCBUIHNhdHVyYXRpb24sIFQgbGlnaHRuZXNzLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+
OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgSFNMQShUIGh1ZSwgVCBzYXR1cmF0aW9uLCBUIGxp
Z2h0bmVzcywgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogaHVl
IHsgaHVlIH0KICAgICAgICAgLCBzYXR1cmF0aW9uIHsgc2F0dXJhdGlvbiB9CiAgICAgICAgICwg
bGlnaHRuZXNzIHsgbGlnaHRuZXNzIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7
CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBI
U0xBKCkKLSAgICAgICAgOiBIU0xBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogSFNMQSB7IDAsIDAsIDAs
IDAgfQogICAgIHsKICAgICB9CiAKQEAgLTM2MywxMSArNTQ1LDYgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMuaHVlLCBjLnNhdHVyYXRp
b24sIGMubGlnaHRuZXNzLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBIU0xBPFQ+IGFzSFNMQShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCi17Ci0g
ICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhTTEE8VD4mIGEsIGNvbnN0
IEhTTEE8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29s
b3JDb21wb25lbnRzKGIpOwpAQCAtMzgyLDggKzU1OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXIKIC8vIEZJWE1FOiBXaGVuIENvbG9yQ29tcG9uZW50cyBzdXBw
b3J0cyBtb3JlIHRoYW4gbGVuZ3RoID09IDQsIGFkZCBjb252ZXJzaW9uIHRvL2Zyb20gQ29sb3JD
b21wb25lbnRzPFQ+IGZvciBDTVlLQQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtB
IDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8Q01ZS0E8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRU
eXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IENNWUtNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhw
ciBDTVlLQShUIGN5YW4sIFQgbWFnZW50YSwgVCB5ZWxsb3csIFQgYmxhY2ssIFQgYWxwaGEgPSBD
b21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBDTVlLQShUIGN5YW4s
IFQgbWFnZW50YSwgVCB5ZWxsb3csIFQgYmxhY2ssIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6
b3BhcXVlKQogICAgICAgICA6IGN5YW4geyBjeWFuIH0KICAgICAgICAgLCBtYWdlbnRhIHsgbWFn
ZW50YSB9CiAgICAgICAgICwgeWVsbG93IHsgeWVsbG93IH0KQEAgLTM5Myw3ICs1NzEsNyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ01ZS0EgOiBDb2xvCiAgICAgfQogCiAgICAgY29u
c3RleHByIENNWUtBKCkKLSAgICAgICAgOiBDTVlLQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWlu
VmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUgfQorICAgICAgICA6IENNWUtBIHsgMCwgMCwgMCwgMCwgMCB9CiAgICAgewog
ICAgIH0KIApAQCAtNDE3LDE3ICs1OTUsMTkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSA6IENvbG9y
V2l0aEFscGhhSGVscGVyPFhZWkE8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0gVDsK
KyAgICB1c2luZyBNb2RlbCA9IFhZWk1vZGVsPFQ+OwogCi0gICAgY29uc3RleHByIFhZWkEoVCB4
LCBUIHksIFQgeiwgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxUPjo6bWF4VmFsdWUpCisgICAg
Y29uc3RleHByIFhZWkEoVCB4LCBUIHksIFQgeiwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+Ojpv
cGFxdWUpCiAgICAgICAgIDogeCB7IHggfQogICAgICAgICAsIHkgeyB5IH0KICAgICAgICAgLCB6
IHsgeiB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJ
blJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgWFlaQSgpCi0gICAgICAgIDog
WFlaQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6
bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxU
Pjo6bWluVmFsdWUgfQorICAgICAgICA6IFhZWkEgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAg
fQogCkBAIC00NDIsMTEgKzYyMiw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBD
b2xvckNvbXAKICAgICByZXR1cm4geyBjLngsIGMueSwgYy56LCBjLmFscGhhIH07CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBYWVpBPFQ+IGFzWFlaQShjb25zdCBDb2xvckNv
bXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9
OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFhZWkE8VD4mIGEsIGNvbnN0IFhZWkE8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOwpAQCAtNDU3LDIxICs2MzIsMjIg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogICAgIHJldHVybiAh
KGEgPT0gYik7CiB9CiAKKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4g
Y29uc3RleHByIGRlY2x0eXBlKGF1dG8pIGNhbGxXaXRoQ29sb3JUeXBlKGNvbnN0IENvbG9yQ29t
cG9uZW50czxUPiYgY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBGdW5jdG9yJiYg
ZnVuY3RvcikKIHsKICAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKICAgICBjYXNlIENvbG9yU3Bh
Y2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rv
cj4oZnVuY3RvciksIGFzU1JHQkEoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjpp
bnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8
U1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJHQjoK
LSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9y
KSwgYXNMaW5lYXJTUkdCQShjb21wb25lbnRzKSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9r
ZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxMaW5l
YXJTUkdCQTxUPj4oY29tcG9uZW50cykpOwogICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAz
OgotICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0
b3IpLCBhc0Rpc3BsYXlQMyhjb21wb25lbnRzKSk7CisgICAgICAgIHJldHVybiBzdGQ6Omludm9r
ZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxEaXNw
bGF5UDM8VD4+KGNvbXBvbmVudHMpKTsKICAgICBjYXNlIENvbG9yU3BhY2U6OkxhYjoKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNM
YWIoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJk
PEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8TGFiPFQ+Pihjb21wb25lbnRz
KSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6
aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgYXNTUkdCQShjb21wb25lbnRz
KSk7CisgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9y
KSwgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPFQ+Pihjb21wb25lbnRzKSk7CiB9CiAKIC8vIFBh
Y2tlZCBDb2xvciBGb3JtYXRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNzE2NDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDcgKzc4LDcgQEAgU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29y
aW5nKFNSRwogICAgICAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07CiAgICAgaWYgKGEgPT0gMjU1
KQogICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4oZmFzdERpdmlkZUJ5MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwg
ZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBv
bmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4oZmFzdERpdmlkZUJ5MjU1KHIgKiBhKSwg
ZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7CiB9CiAK
IFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9y
KQpAQCAtODgsNyArODgsNyBAQCBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhT
UkdCCiAgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKICAgICBpZiAoYSA9PSAyNTUpCiAg
ICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNS
R0JBPihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEg
KyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKKyAgICByZXR1cm4gbWFr
ZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRl
QnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2
aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKIH0KIAogc3RhdGljIGlubGluZSB1aW50MTZfdCB1
bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHVpbnQ4X3QgYywgdWludDhfdCBhKQpAQCAtMTAx
LDcgKzEwMSw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGllZChTUkdCQTx1aW4KICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwogICAgIGlmICghYSB8fCBhID09IDI1NSkKICAg
ICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JH
QkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGllZENv
bXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEp
OworICAgIHJldHVybiBtYWtlQ2xhbXBpbmdDb21wb25lbnRzRXhjZXB0QWxwaGE8U1JHQkE8dWlu
dDhfdD4+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVsdGlwbGll
ZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoYiwgYSks
IGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI3MTY0
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDIyICs0NSwxNCBAQCBTUkdCQTx1aW50OF90PiBwcmVtdWx0
aXBsaWVkRmxvb3JpbmcoU1JHCiBTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhT
UkdCQTx1aW50OF90Pik7CiBTUkdCQTx1aW50OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWlu
dDhfdD4pOwogCi11aW50OF90IGNvbnZlcnRQcmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQp
OwordWludDhfdCBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0KTsK
IAotdWludDhfdCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGZsb2F0KTsKLWNvbnN0ZXhwciBmbG9h
dCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFQgY29udmVydEJ5dGVBbHBoYVRvKHVpbnQ4X3QpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBj
b252ZXJ0RmxvYXRBbHBoYVRvKGZsb2F0KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50
VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xhbXBUb0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50VHlw
ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgZmxvYXQgY2xh
bXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVudFR5cGUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUIGNvbnZlcnRDb21wb25lbnRCeXRlVG8odWludDhfdCk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUIGNvbnZlcnRDb21wb25lbnRGbG9hdFRvKGZsb2F0KTsKLQotdGVtcGxhdGU8dGVtcGxhdGU8
dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlPHVpbnQ4X3Q+IGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGVzKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4mKTsKLXRlbXBsYXRlPHRlbXBs
YXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8Zmxv
YXQ+IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb25zdCBDb2xvclR5cGU8dWludDhfdD4mKTsK
LQotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUuLi4gQ29tcG9uZW50VHlwZT4gY29uc3RleHByIENvbG9yVHlwZTx1aW50OF90PiBjbGFtcFRv
Q29tcG9uZW50Qnl0ZXMoQ29tcG9uZW50VHlwZS4uLik7Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBl
bmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25z
dGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFtcFRvQ29tcG9uZW50RmxvYXRzKENvbXBvbmVudFR5
cGUuLi4pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gVCBjb252ZXJ0VG8oY29u
c3QgVSYpOwordGVtcGxhdGU8PiBTUkdCQTxmbG9hdD4gY29udmVydFRvKGNvbnN0IFNSR0JBPHVp
bnQ4X3Q+Jik7Cit0ZW1wbGF0ZTw+IFNSR0JBPHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdC
QTxmbG9hdD4mKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5j
dG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0
IENvbG9yVHlwZSYsIEZ1bmN0b3ImJik7CiAKQEAgLTcwLDc4ICs2Miw2MSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGU+IGNvbnN0ZXhwciBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShj
b25zdCBDb2xvclR5cGUmLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpOwogdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYShj
b25zdCBDb2xvclR5cGUmLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0
IENvbG9yVHlwZSYpOworY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBMYWI8ZmxvYXQ+Jik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5h
bWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPj4+KiA9IG51bGxwdHI+Citjb25zdGV4cHIgYm9v
bCBpc0JsYWNrKGNvbnN0IENvbG9yVHlwZSYpOworCitjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNv
bnN0IExhYjxmbG9hdD4mKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVs
LCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pj4qID0gbnVsbHB0
cj4KK2NvbnN0ZXhwciBib29sIGlzV2hpdGUoY29uc3QgQ29sb3JUeXBlJik7CiAKIGNvbnN0ZXhw
ciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCk7CiBjb25zdGV4cHIgdWludDE2
X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAogCi1pbmxpbmUgdWludDhfdCBjb252ZXJ0
UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xh
bXAoc3RkOjpscm91bmQoZiksIDBsLCAyNTVsKTsKLX0KLQotaW5saW5lIHVpbnQ4X3QgY29udmVy
dFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6
bHJvdW5kKGYgKiAyNTUuMGYpLCAwbCwgMjU1bCk7Ci19Ci0KLWNvbnN0ZXhwciBmbG9hdCBjb252
ZXJ0VG9Db21wb25lbnRGbG9hdCh1aW50OF90IGJ5dGUpCitpbmxpbmUgdWludDhfdCBjb252ZXJ0
UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKGZsb2F0IHZhbHVlKQogewotICAgIHJldHVy
biBieXRlIC8gMjU1LjBmOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVl
KSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb21wb25lbnRUeXBlPiBjb25z
dGV4cHIgdWludDhfdCBjbGFtcFRvQ29tcG9uZW50Qnl0ZShDb21wb25lbnRUeXBlIGNvbXBvbmVu
dCkKLXsKLSAgICByZXR1cm4gc3RkOjpjbGFtcDxDb21wb25lbnRUeXBlPihjb21wb25lbnQsIDAs
IDI1NSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBm
bG9hdCBjbGFtcFRvQ29tcG9uZW50RmxvYXQoQ29tcG9uZW50VHlwZSBjb21wb25lbnQpCi17Ci0g
ICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4oY29tcG9uZW50LCAwLCAxKTsKLX0K
LQotdGVtcGxhdGU8PiBjb25zdGV4cHIgdWludDhfdCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPHVp
bnQ4X3Q+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNvbnN0ZXhwciB1aW50OF90IGNvbnZl
cnRCeXRlQWxwaGFUbzx1aW50OF90Pih1aW50OF90IHZhbHVlKQogewogICAgIHJldHVybiB2YWx1
ZTsKIH0KIAotdGVtcGxhdGU8PiBjb25zdGV4cHIgZmxvYXQgY29udmVydENvbXBvbmVudEJ5dGVU
bzxmbG9hdD4odWludDhfdCB2YWx1ZSkKK3RlbXBsYXRlPD4gY29uc3RleHByIGZsb2F0IGNvbnZl
cnRCeXRlQWxwaGFUbzxmbG9hdD4odWludDhfdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY29udmVy
dFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOworICAgIHJldHVybiB2YWx1ZSAvIDI1NS4wZjsKIH0K
IAotdGVtcGxhdGU8PiBpbmxpbmUgdWludDhfdCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzx1aW50
OF90PihmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPD4gaW5saW5lIHVpbnQ4X3QgY29udmVydEZsb2F0
QWxwaGFUbzx1aW50OF90PihmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY29udmVydFRvQ29t
cG9uZW50Qnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQodmFs
dWUgKiAyNTUuMGYpLCAwbCwgMjU1bCk7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIGZsb2F0IGNv
bnZlcnRDb21wb25lbnRGbG9hdFRvPGZsb2F0PihmbG9hdCB2YWx1ZSkKK3RlbXBsYXRlPD4gaW5s
aW5lIGZsb2F0IGNvbnZlcnRGbG9hdEFscGhhVG88ZmxvYXQ+KGZsb2F0IHZhbHVlKQogewotICAg
IHJldHVybiBjbGFtcFRvQ29tcG9uZW50RmxvYXQodmFsdWUpOworICAgIHJldHVybiBjbGFtcGVk
QWxwaGEodmFsdWUpOwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUg
Q29sb3JUeXBlPiBpbmxpbmUgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNvbnZlcnRUb0NvbXBvbmVudEJ5
dGVzKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4mIGNvbG9yKQordGVtcGxhdGU8PiBpbmxpbmUgU1JH
QkE8ZmxvYXQ+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTx1aW50OF90PiYgY29sb3IpCiB7Ci0gICAg
YXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOwotICAgIHJldHVybiB7
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sy
XSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1szXSkgfTsKLX0KKyAgICBhdXRv
IGNvbnZlcnRUb1NSR0JBRmxvYXQgPSBbXSh1aW50OF90IHZhbHVlKSAtPiBmbG9hdCB7CisgICAg
ICAgIHJldHVybiB2YWx1ZSAvIDI1NS4wZjsKKyAgICB9OwogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0
eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBj
b252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+JiBjb2xvcikK
LXsKICAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7Ci0gICAg
cmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1swXSksIGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChj
b21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1szXSkgfTsK
KyAgICByZXR1cm4geyBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMF0pLCBjb252ZXJ0
VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVu
dHNbMl0pLCBjb252ZXJ0VG9TUkdCQUZsb2F0KGNvbXBvbmVudHNbM10pIH07CiB9CiAKLXRlbXBs
YXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENv
bXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWludDhfdD4gY2xhbXBUb0NvbXBvbmVu
dEJ5dGVzKENvbXBvbmVudFR5cGUuLi4gY29tcG9uZW50cykKK3RlbXBsYXRlPD4gaW5saW5lIFNS
R0JBPHVpbnQ4X3Q+IGNvbnZlcnRUbyhjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewotICAg
IHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHMpLi4uIH07Ci19CisgICAg
YXV0byBjb252ZXJ0VG9TUkdCQUJ5dGUgPSBbXShmbG9hdCB2YWx1ZSkgLT4gdWludDhfdCB7Cisg
ICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGws
IDI1NWwpOworICAgIH07CiAKLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBD
b2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8
ZmxvYXQ+IGNsYW1wVG9Db21wb25lbnRGbG9hdHMoQ29tcG9uZW50VHlwZS4uLiBjb21wb25lbnRz
KQotewotICAgIHJldHVybiB7IGNsYW1wVG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzKS4uLiB9
OworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICBy
ZXR1cm4geyBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1swXSksIGNvbnZlcnRUb1NSR0JB
Qnl0ZShjb21wb25lbnRzWzFdKSwgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbMl0pLCBj
b252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1szXSkgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBDb2xvclR5cGUgY29sb3JCeU1vZGlmaW5n
RWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIEZ1bmN0b3ImJiBm
dW5jdG9yKQpAQCAtMTU3LDUwICsxMzIsNjkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
LCB0eXBlbmFtZSBGdQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29s
b3JUeXBlIGNvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIHVp
bnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNvcHkgPSBjb2xvcjsKLSAgICBjb3B5
LmFscGhhID0gY29udmVydENvbXBvbmVudEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3Zl
cnJpZGVBbHBoYSk7CisgICAgY29weS5hbHBoYSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBlbmFt
ZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOwogICAgIHJldHVybiBj
b3B5OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBjb2xvcldp
dGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFs
cGhhKQogewogICAgIGF1dG8gY29weSA9IGNvbG9yOwotICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0
Q29tcG9uZW50RmxvYXRUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7Cisg
ICAgY29weS5hbHBoYSA9IGNvbnZlcnRGbG9hdEFscGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpD
b21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsKICAgICByZXR1cm4gY29weTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgdWludDhfdCBvdmVy
cmlkZUFscGhhKQogewotICAgIGF1dG8gY29weSA9IGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBo
YUNvbXBvbmVudChjb2xvciwgW10gKGF1dG8gY29tcG9uZW50KSB7Ci0gICAgICAgIHJldHVybiBD
b21wb25lbnRUcmFpdHM8ZGVjbHR5cGUoY29tcG9uZW50KT46Om1heFZhbHVlIC0gY29tcG9uZW50
OwotICAgIH0pOwotICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvPGRlY2x0
eXBlKGNvcHkuYWxwaGEpPihvdmVycmlkZUFscGhhKTsKLSAgICByZXR1cm4gY29weTsKKyAgICBz
dGF0aWNfYXNzZXJ0KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CisKKyAgICBhdXRv
IGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBjb3B5ID0g
Y29tcG9uZW50czsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAg
ICAgIGNvcHlbaV0gPSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbaV0ubWF4IC0gY29tcG9uZW50
c1tpXTsKKyAgICBjb3B5WzNdID0gY29udmVydEJ5dGVBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlw
ZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CisKKyAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzPENvbG9yVHlwZT4oY29weSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29s
b3JUeXBlJiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBj
b2xvckJ5TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFtdIChhdXRvIGNvbXBv
bmVudCkgewotICAgICAgICByZXR1cm4gQ29tcG9uZW50VHJhaXRzPGRlY2x0eXBlKGNvbXBvbmVu
dCk+OjptYXhWYWx1ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsKLSAgICBjb3B5LmFscGhhID0gY29u
dmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEp
OwotICAgIHJldHVybiBjb3B5OworICAgIHN0YXRpY19hc3NlcnQoQ29sb3JUeXBlOjpNb2RlbDo6
aXNJbnZlcnRpYmxlKTsKKworICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yKTsKKyAgICBhdXRvIGNvcHkgPSBjb21wb25lbnRzOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDM7ICsraSkKKyAgICAgICAgY29weVtpXSA9IENvbG9yVHlwZTo6TW9kZWw6
OnJhbmdlc1tpXS5tYXggLSBjb21wb25lbnRzW2ldOworICAgIGNvcHlbM10gPSBjb252ZXJ0Rmxv
YXRBbHBoYVRvPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBo
YSk7CisKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY29weSk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNCbGFjayhj
b25zdCBDb2xvclR5cGUmIGNvbG9yKQorY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBMYWI8
ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0byBtaW4gPSBDb21wb25lbnRUcmFp
dHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWluVmFsdWU7Ci0gICAgY29u
c3RleHByIGF1dG8gbWF4ID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29t
cG9uZW50VHlwZT46Om1heFZhbHVlOworICAgIHJldHVybiBjb2xvci5saWdodG5lc3MgPT0gMCAm
JiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsKK30KIAordGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
c2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9y
VHlwZTo6Q29tcG9uZW50VHlwZT4+Pio+Citjb25zdGV4cHIgYm9vbCBpc0JsYWNrKGNvbnN0IENv
bG9yVHlwZSYgY29sb3IpCit7CiAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gY29sb3I7
Ci0gICAgcmV0dXJuIGMxID09IG1pbiAmJiBjMiA9PSBtaW4gJiYgYzMgPT0gbWluICYmIGFscGhh
ID09IG1heDsKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZXMgPSBDb2xvclR5cGU6Ok1vZGVsOjpy
YW5nZXM7CisgICAgcmV0dXJuIGMxID09IHJhbmdlc1swXS5taW4gJiYgYzIgPT0gcmFuZ2VzWzFd
Lm1pbiAmJiBjMyA9PSByYW5nZXNbMl0ubWluICYmIGFscGhhID09IEFscGhhVHJhaXRzPHR5cGVu
YW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IpCitjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IExhYjxmbG9hdD4mIGNvbG9yKQog
ewotICAgIGNvbnN0ZXhwciBhdXRvIG1heCA9IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGU+OjptYXhWYWx1ZTsKKyAgICByZXR1cm4gY29sb3IubGlnaHRu
ZXNzID09IDEwMCAmJiBjb2xvci5hbHBoYSA9PSBBbHBoYVRyYWl0czxmbG9hdD46Om9wYXF1ZTsK
K30KIAordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIFJHQk1vZGVsPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+Pio+Citjb25zdGV4cHIgYm9vbCBpc1do
aXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCit7CiAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxw
aGFdID0gY29sb3I7Ci0gICAgcmV0dXJuIGMxID09IG1heCAmJiBjMiA9PSBtYXggJiYgYzMgPT0g
bWF4ICYmIGFscGhhID09IG1heDsKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZXMgPSBDb2xvclR5
cGU6Ok1vZGVsOjpyYW5nZXM7CisgICAgcmV0dXJuIGMxID09IHJhbmdlc1swXS5tYXggJiYgYzIg
PT0gcmFuZ2VzWzFdLm1heCAmJiBjMyA9PSByYW5nZXNbMl0ubWF4ICYmIGFscGhhID09IEFscGhh
VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om9wYXF1ZTsKIH0KIAog
Y29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAko
cmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw3ICs4MCw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gbWFrZVNpbXAK
ICAgICAgICAgY29tcG9uZW50QXJyYXlbaV0gPSBjb21wb25lbnQ7CiAgICAgfQogCi0gICAgcmV0
dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgY29tcG9uZW50QXJyYXlbMV0sIGNv
bXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29tcG9uZW50QXJyYXlbMF0gfSk7
CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb21wb25lbnRB
cnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBvbmVudEFycmF5WzNdLCBjb21wb25lbnRB
cnJheVswXSB9KTsKIH0KIAogUmVmPEluYmFuZEdlbmVyaWNDdWU+IEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1JlZiBhdHRy
aWJ1dGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAko
cmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyAr
MTA0LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQwogICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gcmdiVG9MaW5lYXJDb2xv
ckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSByZ2JUb0xpbmVhckNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IpOwogICAgICAgICAgICAgICAgIGFycmF5W2ldID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1DCiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjU2OyBpKyspIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0g
ICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRDbGFtcGlu
Zyhjb2xvcik7CiAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90
Pihyb3VuZChjb2xvciAqIDI1NSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IGFycmF5OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Q29sb3JDRy5jcHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBA
IHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcm91bmRBbmQKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5
dGVzKFNSR0JBIHsgciwgZywgYiwgYSB9KTsKKyAgICByZXR1cm4gY29udmVydFRvPFNSR0JBPHVp
bnQ4X3Q+PihTUkdCQSB7IHIsIGcsIGIsIGEgfSk7CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9y
UmVmIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0
aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDI3MTY0NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIENvbG9yIE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IKICAgICBpZiAoIXBpeGVsWzNdKQogICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFy
ZW50QmxhY2s7CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhl
bFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsy
XSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0Nv
bXBvbmVudHNFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0gKiAyNTUgLyBwaXhl
bFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFsz
XSwgcGl4ZWxbM10pOwogfQogCiB2b2lkIE5hdGl2ZUltYWdlOjpjbGVhclN1YmltYWdlcygpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNzE2NDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkxLDE5ICs5MSwxOSBAQCBib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb246OnRyCiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEdSQVlT
Q0FMRTogewotICAgICAgICBjb2xvciA9IGFzU1JHQkEoZ3JheXNjYWxlQ29sb3JNYXRyaXgobV9h
bW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOworICAgICAgICBjb2xvciA9IG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+
PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVu
dHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzZXBpYUNvbG9y
TWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNS
R0JBPGZsb2F0Pj4oc2VwaWFDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICBjYXNlIEhVRV9ST1RBVEU6IHsKLSAgICAgICAgY29sb3IgPSBhc1NSR0JB
KGh1ZVJvdGF0ZUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtlQ2xhbXBp
bmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oaHVlUm90YXRlQ29sb3JNYXRyaXgobV9hbW91bnQp
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBTQVRVUkFURTogewotICAgICAg
ICBjb2xvciA9IGFzU1JHQkEoc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zv
cm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAg
Y29sb3IgPSBtYWtlQ2xhbXBpbmdDb21wb25lbnRzPFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNv
bG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1
bHQ6CkBAIC0xNzIsNyArMTcyLDcgQEAgYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aQogICAgIH0KICAgICBjYXNlIEJSSUdIVE5FU1M6CiAgICAgICAgIGNvbG9yID0gY29s
b3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9u
ZW50KSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29t
cG9uZW50LCAwLjBmKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wPGZsb2F0PihtX2Ft
b3VudCAqIGNvbXBvbmVudCwgMC4wZiwgMS4wZik7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtMjI0LDE1ICsyMjQsNzggQEAgUmVmUHRyPEZpbHRl
ck9wZXJhdGlvbj4gSW52ZXJ0TGlnaHRuZXNzRgogICAgIHJldHVybiBJbnZlcnRMaWdodG5lc3NG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgpOwogfQogCisvLyBGSVhNRTogVGhpcyBodWVSb3RhdGUg
Y29kZSBleGlzdHMgdG8gYWxsb3cgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uIHRvIHBl
cmZvcm0gaHVlIHJvdGF0aW9uCisvLyBvbiBjb2xvciB2YWx1ZXMgb3V0c2lkZSBvZiB0aGUgbm9u
LWV4dGVuZGVkIFNSR0IgdmFsdWUgcmFuZ2UgKDAtMSkgdG8gbWFpbnRhaW4gdGhlIGJlaGF2aW9y
IG9mIGNvbG9ycworLy8gcHJpb3IgdG8gY2xhbXBpbmcgYmVpbmcgZW5mb3JjZWQuIEl0IHNob3Vs
ZCBsaWtlbHkganVzdCB1c2UgdGhlIGV4aXN0aW5nIGh1ZVJvdGF0ZUNvbG9yTWF0cml4KGFtb3Vu
dCkKKy8vIGluIENvbG9yTWF0cml4LmgKK3N0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGh1
ZVJvdGF0ZShjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xvciwgZmxvYXQgYW1vdW50
KQoreworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbG9yOworCisgICAgYXV0byBbbWlu
LCBtYXhdID0gc3RkOjptaW5tYXgoeyByLCBnLCBiIH0pOworICAgIGZsb2F0IGNocm9tYSA9IG1h
eCAtIG1pbjsKKworICAgIGZsb2F0IGxpZ2h0bmVzcyA9IDAuNWYgKiAobWF4ICsgbWluKTsKKyAg
ICBmbG9hdCBzYXR1cmF0aW9uOworICAgIGlmICghY2hyb21hKQorICAgICAgICBzYXR1cmF0aW9u
ID0gMDsKKyAgICBlbHNlIGlmIChsaWdodG5lc3MgPD0gMC41ZikKKyAgICAgICAgc2F0dXJhdGlv
biA9IChjaHJvbWEgLyAobWF4ICsgbWluKSk7CisgICAgZWxzZQorICAgICAgICBzYXR1cmF0aW9u
ID0gKGNocm9tYSAvICgyLjBmIC0gKG1heCArIG1pbikpKTsKKworICAgIGlmICghc2F0dXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIHsgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGxpZ2h0bmVzcywgYWxw
aGEgfTsKKworICAgIGZsb2F0IGh1ZTsKKyAgICBpZiAoIWNocm9tYSkKKyAgICAgICAgaHVlID0g
MDsKKyAgICBlbHNlIGlmIChtYXggPT0gcikKKyAgICAgICAgaHVlID0gKDYwLjBmICogKChnIC0g
YikgLyBjaHJvbWEpKSArIDM2MC4wZjsKKyAgICBlbHNlIGlmIChtYXggPT0gZykKKyAgICAgICAg
aHVlID0gKDYwLjBmICogKChiIC0gcikgLyBjaHJvbWEpKSArIDEyMC4wZjsKKyAgICBlbHNlCisg
ICAgICAgIGh1ZSA9ICg2MC4wZiAqICgociAtIGcpIC8gY2hyb21hKSkgKyAyNDAuMGY7CisKKyAg
ICBpZiAoaHVlID49IDM2MC4wZikKKyAgICAgICAgaHVlIC09IDM2MC4wZjsKKworICAgIGh1ZSAv
PSAzNjAuMGY7CisKKyAgICAvLyBQZXJmb3JtIHJvdGF0aW9uLgorICAgIGh1ZSA9IHN0ZDo6Zm1v
ZChodWUgKyBhbW91bnQsIDEuMGYpOworCisgICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0g
MC41ZiA/IGxpZ2h0bmVzcyAqICgxLjBmICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1
cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYg
KiBsaWdodG5lc3MgLSB0ZW1wMjsKKyAgICAKKyAgICBodWUgKj0gNi4wZjsgLy8gY2FsY0h1ZSgp
IHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJhbmdlLgorCisgICAgLy8gSHVlIGlzIGluIHRoZSByYW5n
ZSAwLTYsIG90aGVyIGFyZ3MgaW4gMC0xLgorICAgIGF1dG8gY2FsY0h1ZSA9IFtdKGZsb2F0IHRl
bXAxLCBmbG9hdCB0ZW1wMiwgZmxvYXQgaHVlVmFsKSB7CisgICAgICAgIGlmIChodWVWYWwgPCAw
LjBmKQorICAgICAgICAgICAgaHVlVmFsICs9IDYuMGY7CisgICAgICAgIGVsc2UgaWYgKGh1ZVZh
bCA+PSA2LjBmKQorICAgICAgICAgICAgaHVlVmFsIC09IDYuMGY7CisgICAgICAgIGlmIChodWVW
YWwgPCAxLjBmKQorICAgICAgICAgICAgcmV0dXJuIHRlbXAxICsgKHRlbXAyIC0gdGVtcDEpICog
aHVlVmFsOworICAgICAgICBpZiAoaHVlVmFsIDwgMy4wZikKKyAgICAgICAgICAgIHJldHVybiB0
ZW1wMjsKKyAgICAgICAgaWYgKGh1ZVZhbCA8IDQuMGYpCisgICAgICAgICAgICByZXR1cm4gdGVt
cDEgKyAodGVtcDIgLSB0ZW1wMSkgKiAoNC4wZiAtIGh1ZVZhbCk7CisgICAgICAgIHJldHVybiB0
ZW1wMTsKKyAgICB9OworCisgICAgcmV0dXJuIHsKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVt
cDIsIGh1ZSArIDIuMGYpLAorICAgICAgICBjYWxjSHVlKHRlbXAxLCB0ZW1wMiwgaHVlKSwKKyAg
ICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVtcDIsIGh1ZSAtIDIuMGYpLAorICAgICAgICBhbHBoYQor
ICAgIH07Cit9CisKIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zv
cm1Db2xvcihTUkdCQTxmbG9hdD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gaHNsYSA9IHRv
SFNMQShjb2xvcik7Ci0gICAgCi0gICAgLy8gUm90YXRlIHRoZSBodWUgMTgwZGVnLgotICAgIGhz
bGEuaHVlID0gc3RkOjpmbW9kKGhzbGEuaHVlICsgMC41ZiwgMS4wZik7Ci0gICAgCi0gICAgLy8g
Q29udmVydCBiYWNrIHRvIFJHQi4KLSAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQSA9IHRvU1JHQkEo
aHNsYSk7CisgICAgYXV0byBodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90YXRlKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSwgMC41Zik7CiAgICAgCiAgICAgLy8gQXBwbHkgdGhlIG1h
dHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVtLzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRyaXggd2Fz
IGRlcml2ZWQuCiAgICAgY29uc3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01vZGVNYXRy
aXggewpAQCAtMjQwLDcgKzMwMyw3IEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjp0cmEKICAgICAgICAgMC4wMzBmLCAtMC43NDFmLCAtMC4wODlmLCAwLjBmLCAxLjBmLAog
ICAgICAgICAwLjAzMGYsICAwLjA1OWYsIC0wLjg5MGYsIDAuMGYsIDEuMGYKICAgICB9OwotICAg
IGNvbG9yID0gYXNTUkdCQSh0b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGFzQ29sb3JDb21wb25lbnRzKGh1ZVJvdGF0ZWRTUkdCQSkpKTsKKyAgICBjb2xvciA9IG1h
a2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8ZmxvYXQ+Pih0b0RhcmtNb2RlTWF0cml4LnRyYW5z
Zm9ybWVkQ29sb3JDb21wb25lbnRzKGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjUyLDE2ICszMTUsMTEgQEAgYm9vbCBJbnZlcnRMaWdodG5l
c3NGaWx0ZXJPcGVyYXRpb246OmludgogICAgICAgICAtMC4wNDlmLCAtMS4zNDdmLCAgMC4xNDZm
LCAwLjBmLCAxLjI1ZiwKICAgICAgICAgLTAuMDQ5ZiwgLTAuMDk3ZiwgLTEuMTA0ZiwgMC4wZiwg
MS4yNWYKICAgICB9OwotICAgIGF1dG8gY29udmVydGVkVG9MaWdodE1vZGUgPSBhc1NSR0JBKHRv
TGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOwotCi0gICAgLy8gQ29udmVydCB0byBIU0wuCi0gICAgYXV0byBoc2xhID0g
dG9IU0xBKGNvbnZlcnRlZFRvTGlnaHRNb2RlKTsKKyAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRN
b2RlQ29tcG9uZW50cyA9IHRvTGlnaHRNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSk7CiAKLSAgICAvLyBIdWUgcm90YXRlIGJ5IDE4
MGRlZy4KLSAgICBoc2xhLmh1ZSA9IHN0ZDo6Zm1vZChoc2xhLmh1ZSArIDAuNWYsIDEuMGYpOwor
ICAgIGF1dG8gaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyA9IGh1ZVJvdGF0ZShjb252ZXJ0ZWRU
b0xpZ2h0TW9kZUNvbXBvbmVudHMsIDAuNWYpOwogCi0gICAgLy8gQW5kIHJldHVybiBSR0IuCi0g
ICAgY29sb3IgPSB0b1NSR0JBKGhzbGEpOworICAgIGNvbG9yID0gbWFrZUNsYW1waW5nQ29tcG9u
ZW50czxTUkdCQTxmbG9hdD4+KGh1ZVJvdGF0ZWRTUkdCQUNvbXBvbmVudHMpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI3
MTY0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBib29sIEZp
bHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNv
bG9yKTsKKyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCBib29sIEZpbHRlck9w
ZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQUNvbG9yKTsK
KyAgICBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oc1JHQkFDb2xvcik7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDb2xvcjo6Q29sb3IoY29u
c3QgR2RrUkdCQSYgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhT
UkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3IuZ3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IuYmx1ZSksIHN0YXRpY19jYXN0
PGZsb2F0Pihjb2xvci5hbHBoYSkgfSkpCisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWlu
dDhfdD4+KFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0
PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFscGhhKSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24g
MjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMyArOTIsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFNS
R0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcAogICAgICAgICBOU1VJbnRlZ2VyIHBpeGVsWzRdOwogICAg
ICAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICAgICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBw
aXhlbFsyXSwgcGl4ZWxbM10pOworICAgICAgICByZXR1cm4gbWFrZUNsYW1waW5nQ29tcG9uZW50
czxTUkdCQTx1aW50OF90Pj4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10p
OwogICAgIH0KIAogICAgIFtyZ2JDb2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3Jl
ZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRl
cyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCks
IHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdC
QTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVD
b21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xv
ckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24g
MjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGly
ZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIs
IGNvbG9yLmEgfSkpCisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JB
IHsgY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNzE2NDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0Ym
IGNvbG9yKQogewotICAgIGF1dG8gY29sb3JLZXkgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhT
UkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBj
b2xvcktleSA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xv
ci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwogCiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAg
ICBpZiAoIW1femVyb0JydXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Nv
bG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xv
cklPUy5tbQkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9y
RnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21w
b25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFs
cGhhXTsKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRp
Y19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21w
b25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JH
QkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lv
biAyNzE2NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4g
bWVudUJhY2tncm91bmRDb2xvCiAgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2Ny
ZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0Nv
bXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFsz
XSk7CisgICAgcmV0dXJuIG1ha2VDbGFtcGluZ0NvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KHBp
eGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0sIHBpeGVsWzNdKTsKIH0KIAogQ29sb3IgUmVuZGVy
VGhlbWVNYWM6OnN5c3RlbUNvbG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJRCwgT3B0aW9uU2V0PFN0
eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRk
aXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNzE2NDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgICAgICBmbG9h
dCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20u
Ymx1ZSwgc2ltcGxlVG8uYmx1ZSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxl
QW5pbWF0ZWQuYmx1ZSk7CiAgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9n
cmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1w
bGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAg
ICAKLSAgICAgICAgYW5pbWF0ZWQgPSBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHN0ZDo6
bHJvdW5kKHJlZCksIHN0ZDo6bHJvdW5kKGdyZWVuKSwgc3RkOjpscm91bmQoYmx1ZSksIHN0ZDo6
bHJvdW5kKGFscGhhKSk7CisgICAgICAgIGFuaW1hdGVkID0gbWFrZUNsYW1waW5nQ29tcG9uZW50
czxTUkdCQTx1aW50OF90Pj4oc3RkOjpscm91bmQocmVkKSwgc3RkOjpscm91bmQoZ3JlZW4pLCBz
dGQ6Omxyb3VuZChibHVlKSwgc3RkOjpscm91bmQoYWxwaGEpKTsKICAgICB9CiAKICAgICBPcHRp
b25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFuY2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYg
ZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29uc3Qgb3ZlcnJpZGUKQEAgLTEyMCw3ICsxMjAsNyBA
QCBwcml2YXRlOgogICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBv
biByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0gICAgICAgIG1fdG8gPSBjbGFtcFRvQ29tcG9uZW50
Qnl0ZXM8U1JHQkE+KHNpbXBsZVRvLnJlZCArIHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5ncmVl
biArIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpOwor
ICAgICAgICBtX3RvID0gbWFrZUNsYW1waW5nQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oc2lt
cGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5n
cmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjQ2KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wMS0yMCAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5nIGxvZ2lj
IHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3Iu
Y3BwOgorICAgICAgICAod2Via2l0Q29sb3JUb1dlYkNvcmVDb2xvcik6CisgICAgICAgIFVwZGF0
ZSB0byB1c2UgbmV3IGNvbnZlcnRUbzw+IGZ1bmN0aW9ucy4KKwogMjAyMS0wMS0yMCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgT24gcGFnZSBjbG9zZSwgbWFr
ZSBzdXJlIHRvIG5vdGlmeSBvZiBjYXB0dXJlIHN0YXRlIGltbWVkaWF0ZWx5CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNp
b24gMjcxNjQ2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgR19ERUZJTkVfQk9YRURfVFlQ
RShXZWJLaXRDb2xvciwgd2Via2l0XwogCiBjb25zdCBXZWJDb3JlOjpDb2xvciB3ZWJraXRDb2xv
clRvV2ViQ29yZUNvbG9yKFdlYktpdENvbG9yKiBjb2xvcikKIHsKLSAgICByZXR1cm4gV2ViQ29y
ZTo6Y29udmVydFRvQ29tcG9uZW50Qnl0ZXMoV2ViQ29yZTo6U1JHQkEgeyBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+Z3JlZW4pLCBzdGF0
aWNfY2FzdDxmbG9hdD4oY29sb3ItPmJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmFs
cGhhKSB9KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Y29udmVydFRvPFdlYkNvcmU6OlNSR0JBPHVp
bnQ4X3Q+PihXZWJDb3JlOjpTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ci0+Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpIH0pOwogfQogCiB2b2lk
IHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIHdl
YkNvcmVDb2xvciwgV2ViS2l0Q29sb3IqIGNvbG9yKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjQ2KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMDEtMjAgIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJld29yayBjb2xvciBjbGFt
cGluZyBsb2dpYyB0byBiZSBtb3JlIGNvbnNpc3RlbnQgYW5kIGNsZWFyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA3MTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIFVwZGF0ZSB0ZXN0
cyB0byB1c2UgbmV3IGNvbnZlcnRUbzw+IGZ1bmN0aW9ucy4KKwogMjAyMS0wMS0yMCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQSBET01XaW5kb3cgc2hvdWxk
IG5vdCBiZSByZXVzZWQgaWYgaXRzIEpTRE9NV2luZG93IGhhcyBiZWVuIGNyZWF0ZWQKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJ
KHJldmlzaW9uIDI3MTY0NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9XaGl0ZSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRu
ZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogICAgIAotICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3Mp
OwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVz
KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZl
cnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEo
Y29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNzgsNyArNzgsNyBAQCBURVNUKENv
bG9yLCBSR0JUb0hTTF9SZWQpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNz
KCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byBy
b3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xh
Q29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApA
QCAtOTQsNyArOTQsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIAogICAgIEVYUEVD
VF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdC
QShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwg
cm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMTAsNyArMTEwLDcgQEAgVEVTVChDb2xvciwg
UkdCVG9IU0xfQmx1ZSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwg
aHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29u
dmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5k
VHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xv
cikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0x
MjYsNyArMTI2LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiAgICAgCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsK
IAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0
b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0
VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNv
bG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBURVNUKENv
bG9yLCBSR0JUb0hTTF9HcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVz
cygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNs
YUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAK
QEAgLTE1OCw3ICsxNTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkpCiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3Mp
OwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVz
KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZl
cnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEo
Y29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJl
dmlzaW9uIDI3MTY0NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRl
bmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgVEVT
VChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAgICB9CiAKICAgICBhdXRvIGNvbXBvbmVudEJ5
dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OwotICAgIENvbG9yIHJn
YjEgeyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29tcG9uZW50Qnl0ZXMpIH07CisgICAgQ29s
b3IgcmdiMSB7IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9OwogICAg
IENvbG9yIHJnYjIgeyBjb21wb25lbnRCeXRlcyB9OwogICAgIEVYUEVDVF9ORShyZ2IxLCByZ2Iy
KTsKICAgICBFWFBFQ1RfTkUocmdiMiwgcmdiMSk7CkBAIC0xMzgsNyArMTM4LDcgQEAgVEVTVChF
eHRlbmRlZENvbG9yLCBIYXNoKQogICAgIH0KIAogICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBT
UkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07Ci0gICAgQ29sb3IgcmdiMSB7IGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb21wb25lbnRCeXRlcykgfTsKKyAgICBDb2xvciByZ2Ix
IHsgY29udmVydFRvPFNSR0JBPGZsb2F0Pj4oY29tcG9uZW50Qnl0ZXMpIH07CiAgICAgQ29sb3Ig
cmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07CiAgICAgRVhQRUNUX05FKHJnYjEuaGFzaCgpLCByZ2Iy
Lmhhc2goKSk7CiB9CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1
bWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZE
b2N1bWVudC5tbQkocmV2aXNpb24gMjcxNjQ2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9UZXN0UERGRG9jdW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBX
ZWJDb3JlOjpDb2xvciBUZXN0UERGUGFnZTo6Y29sb3JBdFBvaW50CiAKICAgICBpZiAoIWEpCiAg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKLSAgICByZXR1
cm4gV2ViQ29yZTo6Y2xhbXBUb0NvbXBvbmVudEJ5dGVzPFdlYkNvcmU6OlNSR0JBPihyICogMjU1
IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAyNTUgLyBhLCBhKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6
bWFrZUNsYW1waW5nQ29tcG9uZW50c0V4Y2VwdEFscGhhPFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+
PihyICogMjU1IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAyNTUgLyBhLCBhKTsKIH0KIAogLy8gRG9j
dW1lbnRzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418003</attachid>
            <date>2021-01-20 16:15:18 -0800</date>
            <delta_ts>2021-01-21 07:23:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210120161517.patch</filename>
            <type>text/plain</type>
            <size>112321</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTY3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBvZiBhZGRpbmcgc3VwcG9ydCBm
b3IgRXh0ZW5kZWQtc1JHQiB0byBjb2xvciB0eXBlcywKKyAgICAgICAgdGhpcyBhZGRzIGNvbnN0
ZXhwciBtZXRhZGF0YSBhbmQgaGVscGVyIGZ1bmN0aW9ucyB0byBjcmVhdGUgY29sb3IKKyAgICAg
ICAgdHlwZXMgd2l0aCB0aGUgY29ycmVjdCBjbGFtcGVkIChvciB1bmNsYW1wZWQpIHZhbHVlcyBh
bmQgYWRvcHRzIHRoZW0KKyAgICAgICAgdGhyb3VnaG91dCB0aGUgY29kZSBiYXNlLgorCisgICAg
ICAgIC0gUmVtb3ZlcyAiY29tcG9uZW50IGJ5dGVzIiBhbmQgImNvbXBvbmVudCBmbG9hdHMiIGNv
bmNlcHRzIHJlcGxhY2luZworICAgICAgICAgIHdpdGggZnVuY3Rpb25zIHRoYXQgdGFrZSBjb2xv
ciB0eXBlcyBhcyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzOgorICAgICAgICAgIAorICAgICAgICAgICAg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZXMvY29udmVydFRvQ29tcG9uZW50RmxvYXRzIC0+IGNvbnZl
cnRUbzxDb2xvclR5cGU8VD4+CisgICAgICAgICAgICBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMvY2xh
bXBUb0NvbXBvbmVudEZsb2F0cyAtPiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxDb2xvclR5
cGU8VD4+CisKKyAgICAgICAgLSBBZGRzIE1vZGVsIHR5cGUgYWxpYXNlcyB0byBlYWNoIGNvbG9y
IHR5cGUgd2hpY2ggY2FuIHNwZWNpZnkgdHJhaXRzIAorICAgICAgICAgIGZvciB0aGF0IHR5cGUg
b2YgY29sb3IuIFRoZXNlIHRyYWl0cyBjdXJyZW50bHkgb25seSBpbmNsdWRlIHRoZSB2YWxpZCAK
KyAgICAgICAgICBjb21wb25lbnQgcmFuZ2VzIGFuZCB3aGV0aGVyIHRoZSBjb2xvciBjYW4gYmUg
aW52ZXJ0ZWQuIE1vcmUgd2lsbCBiZSAKKyAgICAgICAgICBhZGRlZCAobGlrZSB3aGl0ZSBwb2lu
dCBhbmQgYmFzZSBjb2xvciBzcGFjZSkgdG8gaGVscCBzaW1wbGlmeSB1dGlsaXR5IAorICAgICAg
ICAgIGFuZCBjb252ZXJzaW9uIGNvZGUuIAorCisgICAgICAgIC0gQWRkcyBhc3NlcnRpb25zIHRv
IGVhY2ggY29sb3IgdHlwZSBjb25zdHJ1Y3RvciB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkCisgICAg
ICAgICAgYXJlIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2VzIChhcyBzcGVjaWZpZWQgYnkgdGhlIE1v
ZGVsKS4KKworICAgICAgICAtIFJlbW92ZWQgYXNGb28oY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+
JikgZnVuY3Rpb25zLCB3aGljaCB3ZXJlIGEgbGl0dGxlIAorICAgICAgICAgIHRvICBzaW1pbGFy
bHkgbmFtZWQgdG8gdGhlIHRvRm9vKCkgZnVuY3Rpb25zLiBJbnN0ZWFkLCB0aGUgZ2VuZXJpYyAK
KyAgICAgICAgICBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPFQ+PiAob3IgaXQncyBjbGFt
cGluZyB2YXJpYW50cykgY2FuIGJlIHVzZWQKKyAgICAgICAgICB0byBjb252ZXJ0IGZyb20gQ29s
b3JDb21wb25lbnRzIHRvIGNvbG9yIHR5cGVzLgorCisgICAgICAgIC0gQWRkcyBBbHBoYVRyYWl0
cyB0byBtb2RlbCBhbHBoYSB2YWx1ZXMgYXMgdGhlc2UgYXJlIGNvbnNpc3RlbnQgYmV0d2Vlbgor
ICAgICAgICAgIGNvbG9yIHR5cGVzIGFuZCBvbmx5IGNoYW5nZSBiYXNlZCBvbiBjb21wb25lbnQg
dHlwZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRl
ZENTU09NUkdCQ29sb3IuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRo
cy5jcHA6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
OgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvckNvbnZlcnNpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVz
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvQ29s
b3JJT1MubW06CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAg
ICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwu
aDoKKwogMjAyMS0wMS0yMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtHUFVQcm9jZXNzXSBNYXJrIElPU3VyZmFjZSBiYWNraW5nIGZvciBSZW1vdGVHcmFwaGlj
c0NvbnRleHRHTCdzIGRpc3BsYXlCdWZmZXIgYXMgb3duZWQgYnkgdGhlIFdlYlByb2Nlc3MKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI3MTY3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBn
Y2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXgKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0NPTE9SKQogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5
Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9Db21wb25l
bnRGbG9hdHMoY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9
IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAg
ICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYoInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29s
b3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7CiAgICAgfQogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjcxNjc1KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NDcsNyArMTQ0Nyw3IEBAIC0gKE5T
U3RyaW5nICopYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmEKICAgICAgICAgcmV0dXJuIG5pbDsK
IAogICAgIGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAg
ICBhdXRvIGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvPFNSR0JB
PGZsb2F0Pj4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAx
IiwgY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjcxNjc1KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzODUsNyArMjM4NSw3IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIEAoYmFj
a2luZ09iamVjdC0+aXNTZWxlY3RlZCgpKTsKIAogICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+
aXNDb2xvcldlbGwoKSkgewotICAgICAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0cyhiYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICAgICAgYXV0
byBjb2xvciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGJhY2tpbmdPYmplY3QtPmNvbG9yVmFs
dWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJy
Z2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJs
dWVdOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NT
T01SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVk
Q1NTT01SR0JDb2xvci5oCShyZXZpc2lvbiAyNzE2NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
RGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBA
QCBwcml2YXRlOgogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3Iu
cmVkKSkKICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3Jl
ZW4pKQogICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUp
KQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgY29udmVydFRvQ29tcG9u
ZW50RmxvYXQobV9jb2xvci5hbHBoYSkpKQorICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBl
cihvd25lciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAJKHJl
dmlzaW9uIDI3MTY3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFz
dFBhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9l
c24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9w
YXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBjbGFt
cFRvQ29tcG9uZW50Qnl0ZXMgd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JBPHVpbnQ4
X3Q+LgorICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8dWlu
dDhfdD4+KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBl
ZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2Vu
dGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0
byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4gd2l0aCBkaXJlY3Qg
Y29uc3RydWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAgIH0KIAogICAgIC8vIFRyeSByZ2Io
KSBzeW50YXguCkBAIC01MDUsNyArNTA1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4gc3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAg
aWYgKGN1cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocmVkLCBncmVlbiwgYmx1
ZSk7IC8vIEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQsIGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4g
VXBkYXRlIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVy
biB1aW50OF90IGFuZCByZXBsYWNlIGNhbGwgdG8gY2xhbXBUb0NvbXBvbmVudEJ5dGVzIHdpdGgg
ZGlyZWN0IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KKyAgICAgICAgcmV0dXJuIG1h
a2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PihyZWQsIGdyZWVuLCBibHVl
KTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBV
cGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJu
IHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxT
UkdCQTx1aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+
LgogICAgIH0KIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyNzE2NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MSw3ICs2NzEsNyBAQCBzdGF0
aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgCiAgICAgaWYgKGlzUGVyY2VudGFn
ZSkKICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIDEwMC4wICogMjU1LjA7CiAKLSAgICByZXR1cm4g
Y29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZl
cnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOwogfQogCiBzdGF0aWMgQ29s
b3IgcGFyc2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtNzM5
LDcgKzczOSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAgICAg
fQotICAgICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEp
OworICAgICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4o
YWxwaGEpOwogICAgIH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKQEAgLTc5NCw3ICs3OTQs
NyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgaWYgKCFh
cmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgcmV0dXJuIGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoSFNMQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9h
dD4oY29sb3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEp
IH0pKTsKKyAgICByZXR1cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKEhTTEE8
ZmxvYXQ+IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxmbG9h
dD4gcGFyc2VPcHRpb25hbEFscGhhKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNp
b24gMjcxNjc1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsNyArNjAxLDcgQEAgTlNBcnJheSAqRGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhl
IGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBv
bmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgogICAgICAgICAgICAgICAgICAgICAgICAg
aHNsYS5saWdodG5lc3MgPSAwLjVmOwogICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5hbHBo
YSAqPSAwLjM4ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3Ig
PSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+
KHRvU1JHQkEoaHNsYSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIENTU1ZhbHVlQ3VycmVu
dGNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yLCBzZXJpYWxpemF0
aW9uRm9yQ1NTKHVuZGVybGluZUNvbG9yKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHJldmlzaW9u
IDI3MTY3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIC8vIE5v
bi1zdGFuZGFyZCBsZWdhY3kgYWxpYXNlcyAoQ2FudmFzRmlsbFN0cm9rZVN0eWxlcykuCiAgICAg
dW5kZWZpbmVkIHNldFN0cm9rZUNvbG9yKERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0
cmljdGVkIGZsb2F0IGFscGhhKTsKLSAgICB1bmRlZmluZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0
cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwgb3B0aW9uYWwgZmxvYXQgYWxwaGEgPSAxKTsKKyAgICB1
bmRlZmluZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwgb3B0
aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhhID0gMSk7CiAgICAgdW5kZWZpbmVkIHNldFN0
cm9rZUNvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCByLCB1bnJlc3RyaWN0ZWQgZmxvYXQgZywgdW5y
ZXN0cmljdGVkIGZsb2F0IGIsIHVucmVzdHJpY3RlZCBmbG9hdCBhKTsKICAgICB1bmRlZmluZWQg
c2V0RmlsbENvbG9yKERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0
IGFscGhhKTsKICAgICB1bmRlZmluZWQgc2V0RmlsbENvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCBn
cmF5TGV2ZWwsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSA9IDEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3MTY3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MDMsNiArOTAzLDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpyZXNldAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdHJva2VDb2xv
cihjb25zdCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gYWxwaGEpCiB7CiAgICAgaWYg
KGFscGhhKSB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKCphbHBoYSkpCisgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21T
dHJpbmdXaXRoT3ZlcnJpZGVBbHBoYShjb2xvciwgYWxwaGEudmFsdWUoKSwgY2FudmFzQmFzZSgp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MTcsNyArOTIwLDEwIEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3QKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhh
KQogewotICAgIGF1dG8gY29sb3IgPSBTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5
TGV2ZWwsIGFscGhhIH07CisgICAgaWYgKHN0ZDo6aXNuYW4oZ3JheUxldmVsKSB8fCBzdGQ6Omlz
bmFuKGFscGhhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBjb2xvciA9IG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdy
YXlMZXZlbCwgYWxwaGEpOwogICAgIGlmIChzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVu
dChjb2xvcikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHls
ZShjb2xvcikpOwpAQCAtOTI1LDcgKzkzMSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNldFN0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0
U3Ryb2tlQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBh
dXRvIGNvbG9yID0gU1JHQkEgeyByLCBnLCBiLCBhIH07CisgICAgaWYgKHN0ZDo6aXNuYW4ocikg
fHwgc3RkOjppc25hbihnKSB8fCBzdGQ6OmlzbmFuKGIpICB8fCBzdGQ6OmlzbmFuKGEpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmc8U1JHQkE8ZmxvYXQ+PihyLCBnLCBiLCBhKTsKICAgICBpZiAoc3RhdGUoKS5zdHJva2VTdHls
ZS5pc0VxdWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0U3Ryb2tlU3R5
bGUoQ2FudmFzU3R5bGUoY29sb3IpKTsKQEAgLTkzNCw2ICs5NDMsOSBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFN0CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4g
YWxwaGEpCiB7CiAgICAgaWYgKGFscGhhKSB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKCphbHBo
YSkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0
eWxlOjpjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIGFscGhhLnZhbHVl
KCksIGNhbnZhc0Jhc2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTQ4LDcgKzk2
MCwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpCiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZl
bCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgYXV0byBjb2xvciA9IFNSR0JBIHsgZ3JheUxldmVsLCBn
cmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAoc3RkOjppc25hbihncmF5TGV2
ZWwpIHx8IHN0ZDo6aXNuYW4oYWxwaGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNv
bG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5TGV2ZWws
IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSk7CiAgICAgaWYgKHN0YXRlKCkuZmlsbFN0eWxl
LmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRGaWxsU3R5bGUo
Q2FudmFzU3R5bGUoY29sb3IpKTsKQEAgLTk1Niw3ICs5NzEsMTAgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldEZpbGxDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQog
ewotICAgIGF1dG8gY29sb3IgPSBTUkdCQSB7IHIsIGcsIGIsIGEgfTsKKyAgICBpZiAoc3RkOjpp
c25hbihyKSB8fCBzdGQ6OmlzbmFuKGcpIHx8IHN0ZDo6aXNuYW4oYikgIHx8IHN0ZDo6aXNuYW4o
YSkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHIsIGcsIGIsIGEpOwogICAgIGlmIChzdGF0ZSgpLmZp
bGxTdHlsZS5pc0VxdWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0Rmls
bFN0eWxlKENhbnZhc1N0eWxlKGNvbG9yKSk7CkBAIC0xMjg5LDYgKzEzMDcsOSBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnN0cm9rCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0
IGJsdXIsIGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkK
IHsKKyAgICBpZiAoYWxwaGEgJiYgc3RkOjppc25hbigqYWxwaGEpKQorICAgICAgICByZXR1cm47
CisKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogICAgIGlmICgh
Y29sb3JTdHJpbmcuaXNOdWxsKCkpIHsKICAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yT3JDdXJy
ZW50Q29sb3IoY29sb3JTdHJpbmcsIGNhbnZhc0Jhc2UoKSk7CkBAIC0xMzAwLDEyICsxMzIxLDE4
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCwgZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBz
ZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25l
bnRCeXRlcyhTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH0p
KTsKKyAgICBpZiAoc3RkOjppc25hbihncmF5TGV2ZWwpIHx8IHN0ZDo6aXNuYW4oYWxwaGEpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQp
LCBibHVyLCBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nPFNSR0JBPGZsb2F0Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEp
KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZs
b2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IHIsIGZsb2F0IGcsIGZs
b2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0
KSwgYmx1ciwgY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyByLCBnLCBiLCBhIH0pKTsK
KyAgICBpZiAoc3RkOjppc25hbihyKSB8fCBzdGQ6OmlzbmFuKGcpIHx8IHN0ZDo6aXNuYW4oYikg
IHx8IHN0ZDo6aXNuYW4oYSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFNoYWRvdyhGbG9h
dFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4obWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihyLCBnLCBiLCBhKSkpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI3
MTY3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29s
b3IgY29sb3IpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTUkdCQTxmbG9h
dD4mIGNvbG9yQ29tcG9uZW50cykKLSAgICA6IG1fc3R5bGUoY29udmVydFRvQ29tcG9uZW50Qnl0
ZXMoY29sb3JDb21wb25lbnRzKSkKKyAgICA6IG1fc3R5bGUoY29udmVydFRvPFNSR0JBPHVpbnQ4
X3Q+Pihjb2xvckNvbXBvbmVudHMpKQogewogfQogCkBAIC0xNDgsNyArMTQ4LDcgQEAgYm9vbCBD
YW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjpp
c0VxdWl2YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAg
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6Omdl
dDxDb2xvcj4obV9zdHlsZSkgPT0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29tcG9uZW50cyk7
CisgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdU
Rjo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbXBv
bmVudHMpOwogfQogCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzE2NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNv
bG9yKFJlZlB0cjxKU09OOjpPYmoKIAogICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3Vi
bGUoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKICAgICBpZiAoIWEpCi0gICAgICAg
IHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOwotICAgIHJl
dHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoKmEpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nPFNSR0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiKTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21w
b25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4oKnIsICpnLCAqYiwgY29u
dmVydEZsb2F0QWxwaGFUbzx1aW50OF90PigqYSkpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VD
b25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdP
YmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
CShyZXZpc2lvbiAyNzE2NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgQ29sb3IgQ29sb3I6Omxp
Z2h0ZW5lZCgpIGNvbnN0CiAKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptaW4oMS4wZiwg
diArIDAuMzNmKSAvIHY7CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JH
QkEgeyBtdWx0aXBsaWVyICogciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0p
OworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgbXVsdGlwbGll
ciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKIH0KIAogQ29sb3Ig
Q29sb3I6OmRhcmtlbmVkKCkgY29uc3QKQEAgLTEwNSw3ICsxMDUsNyBAQCBDb2xvciBDb2xvcjo6
ZGFya2VuZWQoKSBjb25zdAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAg
ICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CiAK
LSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBtdWx0aXBsaWVyICog
ciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOworICAgIHJldHVybiBjb252
ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgbXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIg
KiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKIH0KIAogZmxvYXQgQ29sb3I6OmxpZ2h0bmVzcygp
IGNvbnN0CkBAIC0xNDEsNyArMTQxLDE1IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShm
bG9hdCBhbHBoYSkKIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0IGFs
cGhhKSBjb25zdAogewogICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShbJl0gKGNvbnN0
IGF1dG8mIHVuZGVybHlpbmdDb2xvcikgLT4gQ29sb3IgewotICAgICAgICByZXR1cm4gaW52ZXJ0
ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAgICAg
ICAgdXNpbmcgQ29sb3JUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBlKHVuZGVybHlpbmdDb2xv
cik+OworCisgICAgICAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBtZWFuaW5n
ZnVsIHVuZGVyc3RhbmRpbmcgb2YgaW52ZXJzaW9uIHRoYXQgd29ya3MKKyAgICAgICAgLy8gYmV0
dGVyIGZvciBub24taW52ZXJ0aWJsZSBjb2xvciB0eXBlcyBsaWtlIExhYiBvciBjb25zaWRlciBy
ZW1vdmluZyB0aGlzIGluIGZhdm9yCisgICAgICAgIC8vIG9mIGFsdGVybmF0aXZlcy4KKyAgICAg
ICAgaWYgY29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCisgICAgICAg
ICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29s
b3IsIGFscGhhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGludmVydGVkQ29s
b3JXaXRoT3ZlcnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CiAg
ICAgfSk7CiB9CiAKQEAgLTE1Nyw3ICsxNjUsNyBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29s
b3JDb21wb25lbnRzPGZsCiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJu
IHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9
OwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0cyhhc0lubGluZSgpKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNw
YWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+Pihhc0lu
bGluZSgpKSkgfTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCShyZXZpc2lvbiAyNzE2NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDggQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9CiAg
ICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVu
ZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9Ci0gICAgdWludDhf
dCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21w
b25lbnRCeXRlKGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KLSAg
ICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4
dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5lKCkuYWxw
aGEpOyB9CisgICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVk
KCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6
IGFzSW5saW5lKCkuYWxwaGE7IH0KKyAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJl
dHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxw
aGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGZs
b2F0IGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVz
cygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5j
ZS4KQEAgLTMzMSwxMSArMzMxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENv
bG9yOjp0b1MKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWlu
dDhfdD4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwogICAgICAgICAgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvbG9yKTsKICAgICAgICAgfSwKICAgICAgICAgW10g
KGNvbnN0IGF1dG8mIGNvbG9yKSB7CiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PFQsIHVpbnQ4X3Q+KQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21w
b25lbnRCeXRlcyh0b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShjb2xvcikpOwogICAgICAgICAgICAgaWYgY29u
c3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRvU1JHQkEoY29sb3IpOwogICAgICAgICB9CkBAIC0zOTEsMTUgKzM5MSwxNSBAQCBpbmxpbmUg
dm9pZCBDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8CiAKIGlubGluZSBib29sIENvbG9yOjpp
c0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci5jYWxs
T25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OmlzQmxhY2soY29sb3IpOworICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5
aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSB7CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjppc0JsYWNrKHVuZGVybHlpbmdDb2xvcik7CiAgICAgfSk7CiB9CiAKIGlubGlu
ZSBib29sIENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJl
dHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsK
LSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUoY29sb3IpOworICAgIHJldHVybiBjb2xv
ci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSB7
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHVuZGVybHlpbmdDb2xvcik7CiAgICAg
fSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxl
bmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNzE2NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsNyBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJhY2tkCiAgICAg
aW50IGcgPSAoYmFja2Ryb3BHICogYmFja2Ryb3BBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYg
KiBzb3VyY2VBICogc291cmNlRykgLyBkOwogICAgIGludCBiID0gKGJhY2tkcm9wQiAqIGJhY2tk
cm9wQSAqICgweEZGIC0gc291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUIpIC8gZDsK
IAotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIGEpOwor
ICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4ociwg
ZywgYiwgYSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikK
QEAgLTc4LDcgKzc4LDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9y
KQogICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywgYWxwaGEpOwogICAg
ICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEpOwogCi0gICAgICAg
IHJlc3VsdCA9IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywgYiwgYWxwaGEpOwor
ICAgICAgICByZXN1bHQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90
Pj4ociwgZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYmIGIg
Pj0gMCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbG9yIGJsZW5k
KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9t
ID0gcHJlbXVsdGlwbGllZENlaWxpbmcoZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKSk7CiAg
ICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyh0by50b1NSR0JB
TG9zc3k8dWludDhfdD4oKSk7CiAKLSAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gY2xh
bXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigKKyAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVk
ID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8dWludDhfdD4+KAogICAgICAgICBX
ZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5yZWQsIHByZW11bHRpcGxpZWRUby5yZWQs
IHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uZ3Jl
ZW4sIHByZW11bHRpcGxpZWRUby5ncmVlbiwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpi
bGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ibHVlLCBwcmVtdWx0aXBsaWVkVG8uYmx1ZSwgcHJvZ3Jl
c3MpLApAQCAtMTIwLDcgKzEyMCw3IEBAIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNv
bnN0IENvbG8KICAgICBhdXRvIGZyb21TUkdCID0gZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKICAgICBhdXRvIHRvU1JHQiA9IHRvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCi0gICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oCisgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6
OmJsZW5kKGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmNwcAkocmV2aXNpb24gMjcxNjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjggKzMy
LDc0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZmxvYXQgbGluZWFyVG9SR0JDb2xvckNv
bXBvbmVudChmbG9hdCBjKQorLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgor
Ly8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9N
YXRyaXguaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVh
clNSR0JNYXRyaXggeworICAgICAzLjI0MDQ1NDJmLCAtMS41MzcxMzg1ZiwgLTAuNDk4NTMxNGYs
CisgICAgLTAuOTY5MjY2MGYsICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKKyAgICAgMC4wNTU2
NDM0ZiwgLTAuMjA0MDI1OWYsICAxLjA1NzIyNTJmCit9OworCisvLyBodHRwczovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9TUkdCCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRl
eC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0
cml4PDMsIDM+IGxpbmVhclNSR0JUb1hZWk1hdHJpeCB7CisgICAgMC40MTI0NTY0ZiwgIDAuMzU3
NTc2MWYsICAwLjE4MDQzNzVmLAorICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIx
NzUwZiwKKyAgICAwLjAxOTMzMzlmLCAgMC4xMTkxOTIwZiwgIDAuOTUwMzA0MWYKK307CisKKy8v
IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29k
ZQorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhckRpc3BsYXlQ
M01hdHJpeCB7CisgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlm
LCAtMC40MDI3MTA3ODQ0NTA3MTY4ZiwKKyAgICAtMC44Mjk0ODg5Njk1NjE1NzQ3ZiwgIDEuNzYy
NjY0MDYwMzE4MzQ2M2YsICAwLjAyMzYyNDY4NTg0MTk0MzZmLAorICAgICAwLjAzNTg0NTgzMDI0
Mzc4NDVmLCAtMC4wNzYxNzIzODkyNjgwNDE4ZiwgIDAuOTU2ODg0NTI0MDA3Njg3MmYKK307CisK
Ky8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24t
Y29kZQorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJEaXNwbGF5UDNU
b1hZWk1hdHJpeCB7CisgICAgMC40ODY1NzA5NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMx
ZiwgMC4xOTgyMTcyODUyMzQzNjNmLAorICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAuNjkxNzM4
NTIxODM2NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKKyAgICAwLjBmLCAgICAgICAgICAgICAg
ICAwLjA0NTExMzM4MTg1ODkwMjZmLCAxLjA0Mzk0NDM2ODkwMDk3NmYKK307CisKKy8vIGh0dHA6
Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAor
c3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7CisgICAg
IDAuOTU1NTc2NmYsIC0wLjAyMzAzOTNmLCAwLjA2MzE2MzZmLAorICAgIC0wLjAyODI4OTVmLCAg
MS4wMDk5NDE2ZiwgMC4wMjEwMDc3ZiwKKyAgICAgMC4wMTIyOTgyZiwgLTAuMDIwNDgzMGYsIDEu
MzI5OTA5OGYKK307CisKKy8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0
bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAz
PiBENjVUb0Q1ME1hdHJpeCB7CisgICAgIDEuMDQ3ODExMmYsIDAuMDIyODg2NmYsIC0wLjA1MDEy
NzBmLAorICAgICAwLjAyOTU0MjRmLCAwLjk5MDQ4NDRmLCAtMC4wMTcwNDkxZiwKKyAgICAtMC4w
MDkyMzQ1ZiwgMC4wMTUwNDM2ZiwgIDAuNzUyMTMxNmYKK307CisKK2Zsb2F0IGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnRDbGFtcGluZyhmbG9hdCBjKQogewogICAgIGlmIChjIDwgMC4wMDMxMzA4
ZikKLSAgICAgICAgcmV0dXJuIDEyLjkyZiAqIGM7CisgICAgICAgIHJldHVybiBzdGQ6Om1heDxm
bG9hdD4oMTIuOTJmICogYywgMCk7CiAKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oMS4wNTVm
ICogc3RkOjpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4wNTVmLCAwLCAxKTsKIH0KIAotZmxvYXQg
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQorZmxvYXQgcmdiVG9MaW5lYXJDb2xv
ckNvbXBvbmVudENsYW1waW5nKGZsb2F0IGMpCiB7CiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCi0g
ICAgICAgIHJldHVybiBjIC8gMTIuOTJmOworICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+
KGMgLyAxMi45MmYsIDApOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChj
ICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCisvLyBHYW1tYSBjb252ZXJz
aW9ucy4KKwogTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yLnJlZCksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29s
b3IuZ3JlZW4pLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUp
LAorICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwK
KyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAog
ICAgICAgICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBAIC02MSw5ICsxMDcsOSBAQCBMaW5lYXJT
UkdCQTxmbG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShj
b25zdCBMaW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAg
IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFyVG9S
R0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRD
bGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xh
bXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTcx
LDkgKzExNyw5IEBAIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGYKIExp
bmVhckRpc3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZs
b2F0PiYgY29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNv
bG9yLmdyZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVl
KSwKKyAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiks
CisgICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwK
ICAgICAgICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtODEsODEgKzEyNyw0OSBAQCBMaW5l
YXJEaXNwbGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzCiBEaXNwbGF5UDM8ZmxvYXQ+IHRv
RGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJl
dHVybiB7Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAg
ICAgICAgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdC
Q29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAg
ICAgfTsKIH0KIAorLy8gTWF0cml4IGNvbnZlcnNpb25zLgorCiBMaW5lYXJTUkdCQTxmbG9hdD4g
dG9MaW5lYXJTUkdCQShjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5k
Ymxvb20uY29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKLSAgICBjb25zdGV4
cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKLSAgICAgICAgIDMu
MjQwNDU0MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1MzE0ZiwKLSAgICAgICAgLTAuOTY5MjY2MGYs
ICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKLSAgICAgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAy
NTlmLCAgMS4wNTcyMjUyZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyU1JHQkEoeHl6VG9M
aW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2Vw
dEFscGhhPExpbmVhclNSR0JBPGZsb2F0Pj4oeHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBYWVpB
PGZsb2F0PiB0b1hZWkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAv
LyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCCi0gICAgLy8gaHR0cDovL3d3dy5i
cnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAotICAg
IGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggewotICAg
ICAgICAwLjQxMjQ1NjRmLCAgMC4zNTc1NzYxZiwgIDAuMTgwNDM3NWYsCi0gICAgICAgIDAuMjEy
NjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwKLSAgICAgICAgMC4wMTkzMzM5ZiwgIDAu
MTE5MTkyMGYsICAwLjk1MDMwNDFmCi0gICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhclNS
R0JUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50
cyhjb2xvcikpKTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRB
bHBoYTxYWVpBPGZsb2F0Pj4obGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBMaW5lYXJEaXNwbGF5
UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+JiBjb2xvcikKIHsK
LSAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJz
aW9uLWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJEaXNw
bGF5UDNNYXRyaXggewotICAgICAgICAgMi40OTM0OTY5MTE5NDE0MjVmLCAgLTAuOTMxMzgzNjE3
OTE5MTIzOWYsIC0wLjQwMjcxMDc4NDQ1MDcxNjhmLAotICAgICAgICAtMC44Mjk0ODg5Njk1NjE1
NzQ3ZiwgIDEuNzYyNjY0MDYwMzE4MzQ2M2YsICAwLjAyMzYyNDY4NTg0MTk0MzZmLAotICAgICAg
ICAgMC4wMzU4NDU4MzAyNDM3ODQ1ZiwgLTAuMDc2MTcyMzg5MjY4MDQxOGYsICAwLjk1Njg4NDUy
NDAwNzY4NzJmCi0gICAgfTsKLSAgICByZXR1cm4gYXNMaW5lYXJEaXNwbGF5UDMoeHl6VG9MaW5l
YXJEaXNwbGF5UDNNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpKSk7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhj
ZXB0QWxwaGE8TGluZWFyRGlzcGxheVAzPGZsb2F0Pj4oeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRy
aXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7
CiB9CiAKIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBj
b2xvcikKIHsKLSAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xv
ci1jb252ZXJzaW9uLWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFy
RGlzcGxheVAzVG9YWVpNYXRyaXggewotICAgICAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2
NTY2NzY5MzE2OTA5MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCi0gICAgICAgIDAuMjI4OTc0NTY0
MDY5NzQ4OGYsIDAuNjkxNzM4NTIxODM2NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKLSAgICAg
ICAgMC4wZiwgICAgICAgICAgICAgICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5
MDA5NzZmCi0gICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0
cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkp
OworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFhZWkE8
ZmxvYXQ+PihsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9u
ZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gQ2hyb21hdGljIEFkYXB0
YXRpb24gY29udmVyc2lvbnMuCisKIHN0YXRpYyBYWVpBPGZsb2F0PiBjb252ZXJ0RnJvbUQ1MFdo
aXRlUG9pbnRUb0Q2NVdoaXRlUG9pbnQoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAg
IC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRh
cHQuaHRtbAotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7
Ci0gICAgICAgICAwLjk1NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKLSAgICAgICAg
LTAuMDI4Mjg5NWYsICAxLjAwOTk0MTZmLCAwLjAyMTAwNzdmLAotICAgICAgICAgMC4wMTIyOTgy
ZiwgLTAuMDIwNDgzMGYsIDEuMzI5OTA5OGYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEoRDUw
VG9ENjVNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpKSk7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxw
aGE8WFlaQTxmbG9hdD4+KEQ1MFRvRDY1TWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRz
KGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBzdGF0aWMgWFlaQTxmbG9hdD4gY29u
dmVydEZyb21ENjVXaGl0ZVBvaW50VG9ENTBXaGl0ZVBvaW50KGNvbnN0IFhZWkE8ZmxvYXQ+JiBj
b2xvcikKIHsKLSAgICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1s
P0Vxbl9DaHJvbUFkYXB0Lmh0bWwKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gRDY1
VG9ENTBNYXRyaXggewotICAgICAgICAgMS4wNDc4MTEyZiwgMC4wMjI4ODY2ZiwgLTAuMDUwMTI3
MGYsCi0gICAgICAgICAwLjAyOTU0MjRmLCAwLjk5MDQ4NDRmLCAtMC4wMTcwNDkxZiwKLSAgICAg
ICAgLTAuMDA5MjM0NWYsIDAuMDE1MDQzNmYsICAwLjc1MjEzMTZmCi0gICAgfTsKLSAgICByZXR1
cm4gYXNYWVpBKEQ2NVRvRDUwTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFt
cGluZ0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENjVUb0Q1ME1hdHJpeC50cmFuc2Zvcm1lZENv
bG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gTGFiIGNv
bnZlcnNpb25zLgorCiBzdGF0aWMgY29uc3RleHByIGZsb2F0IExBQmUgPSAyMTYuMGYgLyAyNDM4
OS4wZjsKIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgTEFCayA9IDI0Mzg5LjBmIC8gMjcuMGY7CiBz
dGF0aWMgY29uc3RleHByIGZsb2F0IEQ1MFdoaXRlVmFsdWVzW10gPSB7IDAuOTY0MjJmLCAxLjBm
LCAwLjgyNTIxZiB9OwpAQCAtMjIxLDYgKzIzNSw5IEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3Qg
WFlaQTxmbG9hdD4mIGNvbG8KICAgICByZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGNvbG9yV2l0
aEQ1MFdoaXRlUG9pbnQuYWxwaGEgfTsKIH0KIAorCisvLyBMQ0ggY29udmVyc2lvbnMuCisKIExD
SEE8ZmxvYXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRw
czovL3d3dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI2xhYi10by1sY2gKQEAgLTI0Nyw2ICsyNjQs
OCBAQCBMYWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvCiAgICAgfTsKIH0K
IAorLy8gSFNMIGNvbnZlcnNpb25zLgorCiBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8
ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hT
TF9jb2xvcl9zcGFjZS4KQEAgLTMzMiw2ICszNTEsOCBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShj
b25zdCBIU0xBPGZsb2F0PiYgCiAgICAgfTsKIH0KIAorLy8gQ01ZSyBjb252ZXJzaW9ucy4KKwog
U1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBh
dXRvIFtjLCBtLCB5LCBrLCBhXSA9IGNvbG9yOwpAQCAtMzU2LDYgKzM3Nyw5IEBAIENNWUtBPGZs
b2F0PiB0b0NNWUtBKGNvbnN0IFNSR0JBPGZsb2F0PiYKICAgICByZXR1cm4geyBjLCBtLCB5LCBr
LCBhIH07CiB9CiAKKworLy8gQ29tYmluYXRpb24gY29udmVyc2lvbnMgKGNvbnN0cnVjdGVkIGZy
b20gbW9yZSBiYXNpYyBjb252ZXJzaW9ucyBhYm92ZSkuCisKIFhZWkE8ZmxvYXQ+IHRvWFlaQShj
b25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJT
UkdCQShjb2xvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JDb252ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JDb252ZXJzaW9uLmgJKHJldmlzaW9uIDI3MTY3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw5ICszMCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoZXNlIGFyZSB0aGUg
c3RhbmRhcmQgc1JHQiA8LT4gTGluZWFyUkdCIC8gRGlzcGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5
UDMgY29udmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NS
R0IpLgotZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7Ci1mbG9hdCByZ2JU
b0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLQorZmxvYXQgbGluZWFyVG9SR0JDb2xvckNv
bXBvbmVudENsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRD
bGFtcGluZyhmbG9hdCk7CiAKIC8vIEFsbCBjb2xvciB0eXBlcyBtdXN0IGF0IGxlYXN0IGltcGxl
bWVudCB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zIHRvIGFuZCBmcm9tIHRoZSBYWVpBIGNvbG9y
IHNwYWNlOgogLy8gICAgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4m
KTsKQEAgLTU2LDQyICs1NSwzNiBAQCBXRUJDT1JFX0VYUE9SVCBMaW5lYXJTUkdCQTxmbG9hdD4g
dG9MaW5lCiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JB
KGNvbnN0IExpbmVhclNSR0JBPGZsb2F0PiYpOwogCi0KIC8vIERpc3BsYXlQMwogV0VCQ09SRV9F
WFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKIFdFQkNP
UkVfRVhQT1JUIERpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgWFlaQTxmbG9hdD4m
KTsKIC8vIEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0
b0xpbmVhckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLQogLy8gTGluZWFy
RGlzcGxheVAzCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGluZWFy
RGlzcGxheVAzPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0
PiB0b0xpbmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25zCiBX
RUJDT1JFX0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRp
c3BsYXlQMzxmbG9hdD4mKTsKIAotCiAvLyBMYWIKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+
IHRvWFlaQShjb25zdCBMYWI8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBMYWI8ZmxvYXQ+IHRv
TGFiKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExD
SEE8ZmxvYXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+Jik7CiAKLQogLy8gTENIQQogV0VCQ09S
RV9FWFBPUlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExDSEE8ZmxvYXQ+Jik7CiBXRUJDT1JF
X0VYUE9SVCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0
aW9ucwogV0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBMQ0hBPGZsb2F0PiYp
OwogCi0KIC8vIEhTTEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBI
U0xBPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFhZ
WkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0
b1NSR0JBKGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKLQogLy8gQ01ZS0EKIFdFQkNPUkVfRVhQT1JU
IFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBDTVlLQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JU
IENNWUtBPGZsb2F0PiB0b0NNWUtBKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNzE2
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSwyMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci10ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENvbXBvbmVudFRyYWl0czsKK3RlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgQWxwaGFUcmFpdHM7CiAKLXRlbXBsYXRlPD4gc3RydWN0IENvbXBvbmVu
dFRyYWl0czx1aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1pblZhbHVl
ID0gMDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBBbHBoYVRyYWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1aW50OF90IHRyYW5zcGFyZW50ID0gMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qg
b3BhcXVlID0gMjU1OwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPGZs
b2F0PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBtaW5WYWx1ZSA9IDAuMGY7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBmbG9hdCBtYXhWYWx1ZSA9IDEuMGY7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBBbHBoYVRyYWl0czxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgdHJhbnNw
YXJlbnQgPSAwLjBmOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgb3BhcXVlID0gMS4wZjsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvckNvbXBvbmVudFJhbmdlIHsK
KyAgICBUIG1pbjsKKyAgICBUIG1heDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3Qg
UkdCTW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExhYk1vZGVsOwordGVtcGxhdGU8
dHlwZW5hbWU+IHN0cnVjdCBMQ0hNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFNM
TW9kZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENNWUtNb2RlbDsKK3RlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgWFlaTW9kZWw7CisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVp
bnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRS
YW5nZTx1aW50OF90PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIDI1NSB9LAorICAgICAg
ICB7IDAsIDI1NSB9LAorICAgICAgICB7IDAsIDI1NSB9CisgICAgfSB9OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgUkdCTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29s
b3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAxIH0s
CisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfQorICAgIH0gfTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IExhYk1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5
PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwg
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAtc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9
CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxz
ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5n
ZXMgeyB7CisgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5
KCkgfSwKKyAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSB9LAorICAgICAgICB7IDAsIDM2MCB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhTTE1v
ZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9u
ZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMzYwIH0sCisgICAg
ICAgIHsgMCwgMTAwIH0sCisgICAgICAgIHsgMCwgMTAwIH0KKyAgICB9IH07CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDTVlLTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8
Q29sb3JDb21wb25lbnRSYW5nZTxmbG9hdD4sIDQ+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAx
IH0sCisgICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAwLCAx
IH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRy
dWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2RlbDxmbG9hdD4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFu
Z2VzIHsgeworICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAt
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBm
YWxzZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29u
c3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRz
PFQ+JiBjKQoreworICAgIHJldHVybiBDb2xvclR5cGUgeyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNd
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdW5zaWduZWQgSW5kZXgsIHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBhdXRvIGNsYW1wZWRDb21wb25lbnQoVCBjKSAtPiB0eXBlbmFt
ZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGUKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
aW50ZWdyYWxfdjxUPik7CisKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZSA9IENvbG9yVHlwZTo6
TW9kZWw6OnJhbmdlc1tJbmRleF07CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXA8VD4oYywgcmFuZ2Uu
bWluLCByYW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHVuc2ln
bmVkIEluZGV4PiBjb25zdGV4cHIgZmxvYXQgY2xhbXBlZENvbXBvbmVudChmbG9hdCBjKQorewor
ICAgIGNvbnN0ZXhwciBhdXRvIHJhbmdlID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzW0luZGV4
XTsKKworICAgIGlmIGNvbnN0ZXhwciAocmFuZ2UubWluID09IC1zdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6aW5maW5pdHkoKSAmJiByYW5nZS5tYXggPT0gc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OmluZmluaXR5KCkpCisgICAgICAgIHJldHVybiBjOworCisgICAgaWYgY29uc3RleHBy
IChyYW5nZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQor
ICAgICAgICByZXR1cm4gc3RkOjptaW4oYywgcmFuZ2UubWF4KTsKKworICAgIGlmIGNvbnN0ZXhw
ciAocmFuZ2UubWF4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQor
ICAgICAgICByZXR1cm4gc3RkOjptYXgoYywgcmFuZ2UubWluKTsKKworICAgIHJldHVybiBzdGQ6
OmNsYW1wKGMsIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Q29sb3JUeXBlLCB1bnNpZ25lZCBJbmRleCwgdHlwZW5hbWUgVD4gY29uc3RleHByIFQgY2xhbXBl
ZENvbXBvbmVudChjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJuIGNs
YW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCBJbmRleD4oY1tJbmRleF0pOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wb25lbnRUeXBlID0gVD4gY29uc3RleHByIENvbXBv
bmVudFR5cGUgY2xhbXBlZEFscGhhKFQgYWxwaGEpCit7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXA8
VD4oYWxwaGEsIEFscGhhVHJhaXRzPENvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgQWxwaGFU
cmFpdHM8Q29tcG9uZW50VHlwZT46Om9wYXF1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBjbGFtcGVk
Q29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMpCit7CisgICAg
cmV0dXJuIHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGNvbXBvbmVu
dHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oY29tcG9uZW50cyks
CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjb21wb25lbnRzKSwKKyAg
ICAgICAgY2xhbXBlZEFscGhhKGNvbXBvbmVudHNbM10pCisgICAgfTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRz
PFQ+IGNsYW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+
JiBjb21wb25lbnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8
Q29sb3JUeXBlLCAwPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xv
clR5cGUsIDE+KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlw
ZSwgMj4oY29tcG9uZW50cyksCisgICAgICAgIGNvbXBvbmVudHNbM10KKyAgICB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5
cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBj
b21wb25lbnRzKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihj
bGFtcGVkQ29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VG
cm9tQ29tcG9uZW50c0NsYW1waW5nKFQgYzEsIFQgYzIsIFQgYzMpCit7CisgICAgcmV0dXJuIG1h
a2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNs
YW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksCisgICAgICAgIGNsYW1wZWRDb21wb25l
bnQ8Q29sb3JUeXBlLCAxPihjMiksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBl
LCAyPihjMyksCisgICAgICAgIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9u
ZW50VHlwZT46Om9wYXF1ZQorICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzQ2xh
bXBpbmcoVCBjMSwgVCBjMiwgVCBjMywgVCBhbHBoYSkKK3sKKyAgICByZXR1cm4gbWFrZUZyb21D
b21wb25lbnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAgICAgY2xhbXBlZENv
bXBvbmVudDxDb2xvclR5cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xv
clR5cGUsIDE+KGMyKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGMz
KSwKKyAgICAgICAgY2xhbXBlZEFscGhhPFQsIHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50
VHlwZT4oYWxwaGEpCisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGlu
Z0V4Y2VwdEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAg
ICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNF
eGNlcHRBbHBoYTxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9y
VHlwZSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKFQgYzEsIFQgYzIsIFQg
YzMsIEFscGhhIGFscGhhKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JU
eXBlPihDb2xvckNvbXBvbmVudHMgeworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlw
ZSwgMD4oYzEpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLAor
ICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLAorICAgICAgICBhbHBo
YQorICAgIH0pOworfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUIGNvbG9yKQoreworICAgIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KSB7
CisgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShjb21wb25lbnRzW2ldID49IFQ6Ok1vZGVsOjpyYW5nZXNbaV0ubWlu
LCAiQ29tcG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93
ZWQgbWluaW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6cmFuZ2VzW2ldLm1p
bik7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbaV0gPD0gVDo6
TW9kZWw6OnJhbmdlc1tpXS5tYXgsICJDb21wb25lbnQgYXQgaW5kZXggJWQgaXMgJWYgYW5kIGlz
IGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVtICVmIiwgaSwgIGNvbXBvbmVudHNbaV0s
IFQ6Ok1vZGVsOjpyYW5nZXNbaV0ubWF4KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVu
dFR5cGU+Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFs
bG93ZWQgbWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJhaXRz
PHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29t
cG9uZW50VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4gdGhl
IGFsbG93ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0czx0
eXBlbmFtZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAgICB9Cit9CisKKyNlbHNlCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoVCkKK3sK
K30KKworI2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGlu
ZSBjb25zdGV4cHIgYm9vbCBIYXNDb2xvclNwYWNlTWVtYmVyID0gZmFsc2U7CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29sb3JTcGFjZU1lbWJlcjxULCBz
dGQ6OnZvaWRfdDxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VD4oKS5jb2xvclNwYWNlKT4+ID0gdHJ1
ZTsKIApAQCAtNzQsMTggKzI3MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQ+IHN0cnVj
dCBDb2xvcldpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdCQSA6IENvbG9yV2l0
aEFscGhhSGVscGVyPFNSR0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwot
Ci0gICAgY29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBD
b21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8
VD47CisgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpT
UkdCIH07CisgICAgCisgICAgY29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUs
IFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJlZCB9
CiAgICAgICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAg
ICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhp
cyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIFNSR0JBKCkKLSAgICAgICAgOiBTUkdCQSB7IENv
bXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUs
IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFs
dWUgfQorICAgICAgICA6IFNSR0JBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAt
MTAwLDExICszMDAsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21w
CiAgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQShjb25zdCBDb2xv
ckNvbXBvbmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1sz
XSB9OwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNSR0JBPFQ+JiBhLCBjb25zdCBTUkdCQTxUPiYgYikKIHsKICAgICByZXR1cm4gYXND
b2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0xMTgsMTggKzMx
MywyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSA6IENvbG9yV2l0aEFscGhhSGVscGVy
PExpbmVhclNSR0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNp
bmcgTW9kZWwgPSBSR0JNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JT
cGFjZSA9IENvbG9yU3BhY2U6OkxpbmVhclJHQjsKIAotICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdC
QShUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
YXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEoVCByZWQsIFQgZ3JlZW4sIFQgYmx1
ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVk
IH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAg
ICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0
aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEoKQotICAgICAgICA6IExp
bmVhclNSR0JBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRz
PFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJh
aXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGluZWFyU1JHQkEgeyAwLCAwLCAwLCAwIH0K
ICAgICB7CiAgICAgfQogCkBAIC0xNDQsMTEgKzM0MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVl
LCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJT
UkdCQTxUPiBhc0xpbmVhclNSR0JBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAg
ICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyU1JHQkE8VD4mIGEs
IGNvbnN0IExpbmVhclNSR0JBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50
cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTE2MiwxOCArMzU0LDIwIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IERpc3BsYXlQMyA6IENvbG9yV2l0aEFscGhhSGVscGVyPERpc3BsYXlQMzxUPj4g
ewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9k
ZWw8VD47CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNl
OjpEaXNwbGF5UDM7CiAKLSAgICBjb25zdGV4cHIgRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBU
IGJsdWUsIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0
ZXhwciBEaXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJh
aXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7
IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBo
YSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBj
b25zdGV4cHIgRGlzcGxheVAzKCkKLSAgICAgICAgOiBEaXNwbGF5UDMgeyBDb21wb25lbnRUcmFp
dHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRU
cmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAg
ICAgOiBEaXNwbGF5UDMgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0xODgsMTEg
KzM4Miw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICBy
ZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBEaXNwbGF5UDM8VD4gYXNEaXNwbGF5UDMoY29uc3QgQ29s
b3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNb
M10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxUPiYgYikKIHsKICAgICBy
ZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0y
MDYsMTcgKzM5NSwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVy
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDMgOiBDb2xvcldp
dGhBbHBoYUhlbHBlcjxMaW5lYXJEaXNwbGF5UDM8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRU
eXBlID0gVDsKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1vZGVsPFQ+OwogCi0gICAgY29uc3RleHBy
IExpbmVhckRpc3BsYXlQMyhUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9u
ZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKFQg
cmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQog
ICAgICAgICA6IHJlZCB7IHJlZCB9CiAgICAgICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAg
ICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAg
ICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIExpbmVhckRp
c3BsYXlQMygpCi0gICAgICAgIDogTGluZWFyRGlzcGxheVAzIHsgQ29tcG9uZW50VHJhaXRzPFQ+
OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRz
PFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDog
TGluZWFyRGlzcGxheVAzIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjMxLDEx
ICs0MjIsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAg
cmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzPFQ+IGFzTGluZWFyRGlzcGxh
eVAzKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBj
WzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBhLCBjb25zdCBMaW5lYXJE
aXNwbGF5UDM8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFz
Q29sb3JDb21wb25lbnRzKGIpOwpAQCAtMjQ5LDE4ICs0MzUsMjAgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
TGFiIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TGFiPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50
VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBMYWJNb2RlbDxUPjsKICAgICBzdGF0aWMgY29u
c3RleHByIGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkxhYjsKIAotICAgIGNvbnN0ZXhw
ciBMYWIoVCBsaWdodG5lc3MsIFQgYSwgVCBiLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+
OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGFiKFQgbGlnaHRuZXNzLCBUIGEsIFQgYiwgVCBh
bHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogbGlnaHRuZXNzIHsgbGln
aHRuZXNzIH0KICAgICAgICAgLCBhIHsgYSB9CiAgICAgICAgICwgYiB7IGIgfQogICAgICAgICAs
IGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAg
ICAgfQogCiAgICAgY29uc3RleHByIExhYigpCi0gICAgICAgIDogTGFiIHsgQ29tcG9uZW50VHJh
aXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50
VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAg
ICAgIDogTGFiIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjc1LDExICs0NjMs
NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJu
IHsgYy5saWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBMYWI8VD4gYXNMYWIoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBj
KQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYWI8VD4mIGEs
IGNvbnN0IExhYjxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0g
YXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yOTMsMTcgKzQ3NiwxOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBMQ0hBIDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TENIQTxUPj4gewogICAgIHVzaW5nIENvbXBv
bmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gTENITW9kZWw8VD47CiAKLSAgICBjb25z
dGV4cHIgTENIQShUIGxpZ2h0bmVzcywgVCBjaHJvbWEsIFQgaHVlLCBUIGFscGhhID0gQ29tcG9u
ZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTENIQShUIGxpZ2h0bmVzcywg
VCBjaHJvbWEsIFQgaHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAg
ICAgOiBsaWdodG5lc3MgeyBsaWdodG5lc3MgfQogICAgICAgICAsIGNocm9tYSB7IGNocm9tYSB9
CiAgICAgICAgICwgaHVlIHsgaHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7
CisgICAgICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBM
Q0hBKCkKLSAgICAgICAgOiBMQ0hBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29t
cG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwg
Q29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTENIQSB7IDAsIDAsIDAs
IDAgfQogICAgIHsKICAgICB9CiAKQEAgLTMxOCwxMSArNTAzLDYgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNo
cm9tYSwgYy5odWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIExDSEE8VD4gYXNMQ0hBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICBy
ZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTENIQTxUPiYgYSwgY29uc3QgTENI
QTxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNv
bXBvbmVudHMoYik7CkBAIC0zMzYsMTcgKzUxNiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIDog
Q29sb3JXaXRoQWxwaGFIZWxwZXI8SFNMQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUg
PSBUOworICAgIHVzaW5nIE1vZGVsID0gSFNMTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgSFNM
QShUIGh1ZSwgVCBzYXR1cmF0aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBoYSA9IENvbXBvbmVudFRy
YWl0czxUPjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIEhTTEEoVCBodWUsIFQgc2F0dXJhdGlv
biwgVCBsaWdodG5lc3MsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAg
ICA6IGh1ZSB7IGh1ZSB9CiAgICAgICAgICwgc2F0dXJhdGlvbiB7IHNhdHVyYXRpb24gfQogICAg
ICAgICAsIGxpZ2h0bmVzcyB7IGxpZ2h0bmVzcyB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9
CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25z
dGV4cHIgSFNMQSgpCi0gICAgICAgIDogSFNMQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFs
dWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWlu
VmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IEhTTEEgeyAw
LCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0zNjMsMTEgKzU0NSw2IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmh1ZSwgYy5z
YXR1cmF0aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgSFNMQTxUPiBhc0hTTEEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBj
KQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIU0xBPFQ+JiBh
LCBjb25zdCBIU0xBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9
PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTM4Miw4ICs1NTksOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAvLyBGSVhNRTogV2hlbiBDb2xvckNvbXBvbmVu
dHMgc3VwcG9ydHMgbW9yZSB0aGFuIGxlbmd0aCA9PSA0LCBhZGQgY29udmVyc2lvbiB0by9mcm9t
IENvbG9yQ29tcG9uZW50czxUPiBmb3IgQ01ZS0EKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDTVlLQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPENNWUtBPFQ+PiB7CiAgICAgdXNpbmcgQ29t
cG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBDTVlLTW9kZWw8VD47CiAKLSAgICBj
b25zdGV4cHIgQ01ZS0EoVCBjeWFuLCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFs
cGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgQ01ZS0Eo
VCBjeWFuLCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0gQWxwaGFUcmFp
dHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiBjeWFuIHsgY3lhbiB9CiAgICAgICAgICwgbWFnZW50
YSB7IG1hZ2VudGEgfQogICAgICAgICAsIHllbGxvdyB7IHllbGxvdyB9CkBAIC0zOTMsNyArNTcx
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIDogQ29sbwogICAgIH0KIAog
ICAgIGNvbnN0ZXhwciBDTVlLQSgpCi0gICAgICAgIDogQ01ZS0EgeyBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFp
dHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRU
cmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBDTVlLQSB7IDAsIDAsIDAsIDAsIDAgfQog
ICAgIHsKICAgICB9CiAKQEAgLTQxNywxNyArNTk1LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFhZWkEg
OiBDb2xvcldpdGhBbHBoYUhlbHBlcjxYWVpBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlw
ZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBYWVpNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBY
WVpBKFQgeCwgVCB5LCBUIHosIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVl
KQorICAgIGNvbnN0ZXhwciBYWVpBKFQgeCwgVCB5LCBUIHosIFQgYWxwaGEgPSBBbHBoYVRyYWl0
czxUPjo6b3BhcXVlKQogICAgICAgICA6IHggeyB4IH0KICAgICAgICAgLCB5IHsgeSB9CiAgICAg
ICAgICwgeiB7IHogfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAg
YXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIFhZWkEoKQotICAg
ICAgICA6IFhZWkEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFp
dHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRU
cmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBYWVpBIHsgMCwgMCwgMCwgMCB9CiAgICAg
ewogICAgIH0KIApAQCAtNDQyLDExICs2MjIsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgWFlaQTxUPiBhc1hZWkEoY29uc3Qg
Q29sb3JDb21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0s
IGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBYWVpBPFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBiKQogewogICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTQ1NywyMSAr
NjMyLDIyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKICAgICBy
ZXR1cm4gIShhID09IGIpOwogfQogCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1
bmN0b3I+IGNvbnN0ZXhwciBkZWNsdHlwZShhdXRvKSBjYWxsV2l0aENvbG9yVHlwZShjb25zdCBD
b2xvckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRnVu
Y3RvciYmIGZ1bmN0b3IpCiB7CiAgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CiAgICAgY2FzZSBD
b2xvclNwYWNlOjpTUkdCOgotICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJk
PEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc1NSR0JBKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21w
b25lbnRzPFNSR0JBPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5l
YXJSR0I6Ci0gICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4o
ZnVuY3RvciksIGFzTGluZWFyU1JHQkEoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3Rk
OjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVu
dHM8TGluZWFyU1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAgICBjYXNlIENvbG9yU3BhY2U6OkRp
c3BsYXlQMzoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9y
PihmdW5jdG9yKSwgYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3Rk
OjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVu
dHM8RGlzcGxheVAzPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpMYWI6
Ci0gICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIGFzTGFiKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPExhYjxUPj4oY29t
cG9uZW50cykpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzU1JHQkEoY29t
cG9uZW50cykpOworICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4o
ZnVuY3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTxUPj4oY29tcG9uZW50cykpOwogfQog
CiAvLyBQYWNrZWQgQ29sb3IgRm9ybWF0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjcxNjc1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxp
ZWRGbG9vcmluZyhTUkcKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChh
ID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9u
ZW50Qnl0ZXM8U1JHQkE+KGZhc3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVCeTI1NShn
ICogYSksIGZhc3REaXZpZGVCeTI1NShiICogYSksIGEpOworICAgIHJldHVybiBtYWtlRnJvbUNv
bXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRlQnky
NTUociAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEp
LCBhKTsKIH0KIAogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWlu
dDhfdD4gY29sb3IpCkBAIC04OCw3ICs4OCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxp
ZWRDZWlsaW5nKFNSR0IKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChh
ID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9u
ZW50Qnl0ZXM8U1JHQkE+KGZhc3REaXZpZGVCeTI1NShyICogYSArIDI1NCksIGZhc3REaXZpZGVC
eTI1NShnICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShiICogYSArIDI1NCksIGEpOworICAg
IHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4
X3Q+PihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEg
KyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKIH0KIAogc3RhdGljIGlu
bGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHVpbnQ4X3QgYywgdWlu
dDhfdCBhKQpAQCAtMTAxLDcgKzEwMSw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGll
ZChTUkdCQTx1aW4KICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwogICAgIGlmICghYSB8
fCBhID09IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29t
cG9uZW50Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVu
cHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVu
dEJ5dGUoYiwgYSksIGEpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4
Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+Pih1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHIs
IGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGcsIGEpLCB1bnByZW11bHRpcGxpZWRD
b21wb25lbnRCeXRlKGIsIGEpLCBhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCShyZXZpc2lvbiAyNzE2NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMiArNDUsMTQgQEAgU1JH
QkE8dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogU1JHQkE8dWludDhfdD4gcHJl
bXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4pOwogU1JHQkE8dWludDhfdD4gdW5wcmVt
dWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+KTsKIAotdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9D
b21wb25lbnRCeXRlKGZsb2F0KTsKK3VpbnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRU
b1NSR0JBQnl0ZShmbG9hdCk7CiAKLXVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9h
dCk7Ci1jb25zdGV4cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRCeXRlQWxwaGFUbyh1aW50OF90KTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEZsb2F0QWxwaGFUbyhmbG9hdCk7CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciB1aW50OF90IGNsYW1wVG9Db21wb25l
bnRCeXRlKENvbXBvbmVudFR5cGUpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4g
Y29uc3RleHByIGZsb2F0IGNsYW1wVG9Db21wb25lbnRGbG9hdChDb21wb25lbnRUeXBlKTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvKHVpbnQ4X3QpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbyhmbG9hdCk7Ci0K
LXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlw
ZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+
Jik7Ci10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25z
dGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29s
b3JUeXBlPHVpbnQ4X3Q+Jik7Ci0KLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFt
ZSBDb2xvclR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5
cGU8dWludDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKENvbXBvbmVudFR5cGUuLi4pOwotdGVt
cGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4g
Q29tcG9uZW50VHlwZT4gY29uc3RleHByIENvbG9yVHlwZTxmbG9hdD4gY2xhbXBUb0NvbXBvbmVu
dEZsb2F0cyhDb21wb25lbnRUeXBlLi4uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IFQgY29udmVydFRvKGNvbnN0IFUmKTsKK3RlbXBsYXRlPD4gU1JHQkE8ZmxvYXQ+IGNvbnZl
cnRUbyhjb25zdCBTUkdCQTx1aW50OF90PiYpOwordGVtcGxhdGU8PiBTUkdCQTx1aW50OF90PiBj
b252ZXJ0VG8oY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25B
bHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmLCBGdW5jdG9yJiYpOwogCkBAIC03MCw3OCAr
NjIsNjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgYwogdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29sb3JX
aXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhh
KTsKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JX
aXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNCbGFjayhj
b25zdCBDb2xvclR5cGUmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHBy
IGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKK2NvbnN0ZXhwciBib29sIGlzQmxhY2so
Y29uc3QgTGFiPGZsb2F0PiYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9k
ZWwsIFJHQk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+PiogPSBudWxs
cHRyPgorY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKKworY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBMYWI8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lX3Y8dHlwZW5h
bWUgQ29sb3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25l
bnRUeXBlPj4+KiA9IG51bGxwdHI+Citjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9y
VHlwZSYpOwogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3Qp
OwogY29uc3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKIAotaW5s
aW5lIHVpbnQ4X3QgY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewot
ICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYpLCAwbCwgMjU1bCk7Ci19Ci0KLWlu
bGluZSB1aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKLXsKLSAgICByZXR1
cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZChmICogMjU1LjBmKSwgMGwsIDI1NWwpOwotfQotCi1j
b25zdGV4cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCBieXRlKQoraW5s
aW5lIHVpbnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZShmbG9hdCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gYnl0ZSAvIDI1NS4wZjsKKyAgICByZXR1cm4gc3RkOjpjbGFt
cChzdGQ6Omxyb3VuZCh2YWx1ZSksIDBsLCAyNTVsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
Q29tcG9uZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xhbXBUb0NvbXBvbmVudEJ5dGUoQ29t
cG9uZW50VHlwZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50
VHlwZT4oY29tcG9uZW50LCAwLCAyNTUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb21wb25l
bnRUeXBlPiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVudFR5
cGUgY29tcG9uZW50KQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wPENvbXBvbmVudFR5cGU+KGNv
bXBvbmVudCwgMCwgMSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3RleHByIHVpbnQ4X3QgY29udmVy
dENvbXBvbmVudEJ5dGVUbzx1aW50OF90Pih1aW50OF90IHZhbHVlKQordGVtcGxhdGU8PiBjb25z
dGV4cHIgdWludDhfdCBjb252ZXJ0Qnl0ZUFscGhhVG88dWludDhfdD4odWludDhfdCB2YWx1ZSkK
IHsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPD4gY29uc3RleHByIGZsb2F0IGNv
bnZlcnRDb21wb25lbnRCeXRlVG88ZmxvYXQ+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNv
bnN0ZXhwciBmbG9hdCBjb252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+KHVpbnQ4X3QgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHZhbHVlKTsKKyAgICByZXR1cm4g
dmFsdWUgLyAyNTUuMGY7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIHVpbnQ4X3QgY29udmVydENv
bXBvbmVudEZsb2F0VG88dWludDhfdD4oZmxvYXQgdmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSB1
aW50OF90IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oZmxvYXQgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOworICAgIHJldHVybiBzdGQ6OmNs
YW1wKHN0ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0
ZTw+IGlubGluZSBmbG9hdCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4oZmxvYXQgdmFs
dWUpCit0ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252ZXJ0RmxvYXRBbHBoYVRvPGZsb2F0Pihm
bG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEZsb2F0KHZhbHVlKTsK
KyAgICByZXR1cm4gY2xhbXBlZEFscGhhKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dGVtcGxhdGU8
dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3Rl
bXBsYXRlPD4gaW5saW5lIFNSR0JBPGZsb2F0PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8dWludDhf
dD4mIGNvbG9yKQogewotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKTsKLSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMF0p
LCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25l
bnRCeXRlKGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNb
M10pIH07Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUZsb2F0ID0gW10odWludDhfdCB2YWx1
ZSkgLT4gZmxvYXQgeworICAgICAgICByZXR1cm4gdmFsdWUgLyAyNTUuMGY7CisgICAgfTsKIAot
dGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHBy
IENvbG9yVHlwZTxmbG9hdD4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbnN0IENvbG9yVHlw
ZTx1aW50OF90PiYgY29sb3IpCi17CiAgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBv
bmVudHNbMF0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzFdKSwgY29udmVy
dFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KGNvbXBvbmVudHNbM10pIH07CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JHQkFGbG9hdChjb21w
b25lbnRzWzBdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzFdKSwgY29udmVydFRv
U1JHQkFGbG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRz
WzNdKSB9OwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JU
eXBlLCB0eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4
X3Q+IGNsYW1wVG9Db21wb25lbnRCeXRlcyhDb21wb25lbnRUeXBlLi4uIGNvbXBvbmVudHMpCit0
ZW1wbGF0ZTw+IGlubGluZSBTUkdCQTx1aW50OF90PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKIHsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29tcG9uZW50Qnl0ZShjb21wb25l
bnRzKS4uLiB9OwotfQorICAgIGF1dG8gY29udmVydFRvU1JHQkFCeXRlID0gW10oZmxvYXQgdmFs
dWUpIC0+IHVpbnQ4X3QgeworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2
YWx1ZSAqIDI1NS4wZiksIDBsLCAyNTVsKTsKKyAgICB9OwogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0
eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBj
b25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFtcFRvQ29tcG9uZW50RmxvYXRzKENvbXBvbmVu
dFR5cGUuLi4gY29tcG9uZW50cykKLXsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29tcG9uZW50Rmxv
YXQoY29tcG9uZW50cykuLi4gfTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNb
MF0pLCBjb252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb1NSR0JBQnl0
ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbM10pIH07CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JU
eXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUm
IGNvbG9yLCBGdW5jdG9yJiYgZnVuY3RvcikKQEAgLTE1Nyw1MCArMTMyLDY5IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnUKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZT4gY29uc3RleHByIENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBD
b2xvclR5cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCiB7CiAgICAgYXV0byBjb3B5
ID0gY29sb3I7Ci0gICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5
cGUoY29weS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0
Qnl0ZUFscGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFs
cGhhKTsKICAgICByZXR1cm4gY29weTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBDb2xvclR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xv
ciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNvcHkgPSBjb2xvcjsKLSAgICBj
b3B5LmFscGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBoYSk+
KG92ZXJyaWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5
cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CiAgICAgcmV0
dXJuIGNvcHk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENv
bG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYg
Y29sb3IsIHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvckJ5
TW9kaWZpbmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFtdIChhdXRvIGNvbXBvbmVudCkg
ewotICAgICAgICByZXR1cm4gQ29tcG9uZW50VHJhaXRzPGRlY2x0eXBlKGNvbXBvbmVudCk+Ojpt
YXhWYWx1ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENv
bXBvbmVudEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7Ci0gICAg
cmV0dXJuIGNvcHk7CisgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVy
dGlibGUpOworCisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3Ip
OworICAgIGF1dG8gY29weSA9IGNvbXBvbmVudHM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMzsgKytpKQorICAgICAgICBjb3B5W2ldID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2Vz
W2ldLm1heCAtIGNvbXBvbmVudHNbaV07CisgICAgY29weVszXSA9IGNvbnZlcnRCeXRlQWxwaGFU
bzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOworCisg
ICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJy
aWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCiB7
Ci0gICAgYXV0byBjb3B5ID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNv
bG9yLCBbXSAoYXV0byBjb21wb25lbnQpIHsKLSAgICAgICAgcmV0dXJuIENvbXBvbmVudFRyYWl0
czxkZWNsdHlwZShjb21wb25lbnQpPjo6bWF4VmFsdWUgLSBjb21wb25lbnQ7Ci0gICAgfSk7Ci0g
ICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHkuYWxw
aGEpPihvdmVycmlkZUFscGhhKTsKLSAgICByZXR1cm4gY29weTsKKyAgICBzdGF0aWNfYXNzZXJ0
KENvbG9yVHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMg
PSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGNvcHlbaV0g
PSBDb2xvclR5cGU6Ok1vZGVsOjpyYW5nZXNbaV0ubWF4IC0gY29tcG9uZW50c1tpXTsKKyAgICBj
b3B5WzNdID0gY29udmVydEZsb2F0QWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVu
dFR5cGU+KG92ZXJyaWRlQWxwaGEpOworCisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxD
b2xvclR5cGU+KGNvcHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0
ZXhwciBib29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK2NvbnN0ZXhwciBib29s
IGlzQmxhY2soY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgY29uc3RleHByIGF1dG8g
bWluID0gQ29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46
Om1pblZhbHVlOwotICAgIGNvbnN0ZXhwciBhdXRvIG1heCA9IENvbXBvbmVudFRyYWl0czx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptYXhWYWx1ZTsKKyAgICByZXR1cm4gY29s
b3IubGlnaHRuZXNzID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+Ojpv
cGFxdWU7Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JN
b2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pj4qPgorY29uc3RleHByIGJv
b2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQorewogICAgIGF1dG8gW2MxLCBjMiwg
YzMsIGFscGhhXSA9IGNvbG9yOwotICAgIHJldHVybiBjMSA9PSBtaW4gJiYgYzIgPT0gbWluICYm
IGMzID09IG1pbiAmJiBhbHBoYSA9PSBtYXg7CisgICAgY29uc3RleHByIGF1dG8gcmFuZ2VzID0g
Q29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzOworICAgIHJldHVybiBjMSA9PSByYW5nZXNbMF0ubWlu
ICYmIGMyID09IHJhbmdlc1sxXS5taW4gJiYgYzMgPT0gcmFuZ2VzWzJdLm1pbiAmJiBhbHBoYSA9
PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNXaGl0
ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQorY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBM
YWI8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRU
cmFpdHM8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisgICAg
cmV0dXJuIGNvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFp
dHM8ZmxvYXQ+OjpvcGFxdWU7Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6
Ok1vZGVsLCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pj4qPgor
Y29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQorewogICAgIGF1
dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwotICAgIHJldHVybiBjMSA9PSBtYXggJiYg
YzIgPT0gbWF4ICYmIGMzID09IG1heCAmJiBhbHBoYSA9PSBtYXg7CisgICAgY29uc3RleHByIGF1
dG8gcmFuZ2VzID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzOworICAgIHJldHVybiBjMSA9PSBy
YW5nZXNbMF0ubWF4ICYmIGMyID09IHJhbmdlc1sxXS5tYXggJiYgYzMgPT0gcmFuZ2VzWzJdLm1h
eCAmJiBhbHBoYSA9PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5
cGU+OjpvcGFxdWU7CiB9CiAKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1
aW50MTZfdCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHAJKHJldmlzaW9uIDI3MTY3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8
dWludDhfdD4+IG1ha2VTaW1wCiAgICAgICAgIGNvbXBvbmVudEFycmF5W2ldID0gY29tcG9uZW50
OwogICAgIH0KIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNv
bXBvbmVudEFycmF5WzFdLCBjb21wb25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNv
bXBvbmVudEFycmF5WzBdIH0pOworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+
KFNSR0JBIHsgY29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRB
cnJheVszXSwgY29tcG9uZW50QXJyYXlbMF0gfSk7CiB9CiAKIFJlZjxJbmJhbmRHZW5lcmljQ3Vl
PiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJp
YnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5jcHAJKHJldmlzaW9uIDI3MTY3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OnRyYW5zZm9ybUMKICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICAg
ICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xv
ciA9IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGNv
bG9yID0gcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yKTsKICAgICAgICAg
ICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMTUsNyAr
MTE1LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQwogICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9SR0JDb2xv
ckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1JHQkNv
bG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IpOwogICAgICAgICAgICAgICAgIGFycmF5W2ldID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBhcnJheTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNzE2NzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHJvdW5k
QW5kCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHJldHVybiBj
b252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHIsIGcsIGIsIGEgfSk7CisgICAgcmV0dXJu
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyByLCBnLCBiLCBhIH0pOwogfQogCiBD
b2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShyZXZpc2lvbiAy
NzE2NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFn
ZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBDb2xvciBOYXRpdmVJbWFn
ZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yCiAgICAgaWYgKCFwaXhlbFszXSkKICAgICAgICAgcmV0
dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCi0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25l
bnRCeXRlczxTUkdCQT4ocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUg
LyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOworICAgIHJl
dHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+
PihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CiB9CiAKIHZvaWQgTmF0aXZlSW1h
Z2U6OmNsZWFyU3ViaW1hZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlz
aW9uIDI3MTY3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTkgKzkxLDE5IEBAIGJv
b2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHIKIHsKICAgICBzd2l0Y2ggKG1f
dHlwZSkgewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShn
cmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
YXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21w
b25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3Vu
dCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAg
IGNvbG9yID0gYXNTUkdCQShzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENv
bG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3Ig
PSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29sb3JNYXRy
aXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRz
KGNvbG9yKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBIVUVfUk9U
QVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ft
b3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3Ip
KSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8Zmxv
YXQ+PihodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBv
bmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1
cmF0aW9uQ29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFz
Q29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50
KS50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNzIsNyArMTcy
LDcgQEAgYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aQogICAgIH0KICAg
ICBjYXNlIEJSSUdIVE5FU1M6CiAgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5v
bkFscGhhQ29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBmKTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wPGZsb2F0PihtX2Ftb3VudCAqIGNvbXBvbmVudCwg
MC4wZiwgMS4wZik7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZh
dWx0OgpAQCAtMjI0LDE1ICsyMjQsNzggQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gSW52ZXJ0
TGlnaHRuZXNzRgogICAgIHJldHVybiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZSgpOwogfQogCisvLyBGSVhNRTogVGhpcyBodWVSb3RhdGUgY29kZSBleGlzdHMgdG8gYWxs
b3cgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uIHRvIHBlcmZvcm0gaHVlIHJvdGF0aW9u
CisvLyBvbiBjb2xvciB2YWx1ZXMgb3V0c2lkZSBvZiB0aGUgbm9uLWV4dGVuZGVkIFNSR0IgdmFs
dWUgcmFuZ2UgKDAtMSkgdG8gbWFpbnRhaW4gdGhlIGJlaGF2aW9yIG9mIGNvbG9ycworLy8gcHJp
b3IgdG8gY2xhbXBpbmcgYmVpbmcgZW5mb3JjZWQuIEl0IHNob3VsZCBsaWtlbHkganVzdCB1c2Ug
dGhlIGV4aXN0aW5nIGh1ZVJvdGF0ZUNvbG9yTWF0cml4KGFtb3VudCkKKy8vIGluIENvbG9yTWF0
cml4LmgKK3N0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGh1ZVJvdGF0ZShjb25zdCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xvciwgZmxvYXQgYW1vdW50KQoreworICAgIGF1dG8gW3Is
IGcsIGIsIGFscGhhXSA9IGNvbG9yOworCisgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5t
YXgoeyByLCBnLCBiIH0pOworICAgIGZsb2F0IGNocm9tYSA9IG1heCAtIG1pbjsKKworICAgIGZs
b2F0IGxpZ2h0bmVzcyA9IDAuNWYgKiAobWF4ICsgbWluKTsKKyAgICBmbG9hdCBzYXR1cmF0aW9u
OworICAgIGlmICghY2hyb21hKQorICAgICAgICBzYXR1cmF0aW9uID0gMDsKKyAgICBlbHNlIGlm
IChsaWdodG5lc3MgPD0gMC41ZikKKyAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4
ICsgbWluKSk7CisgICAgZWxzZQorICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvICgyLjBm
IC0gKG1heCArIG1pbikpKTsKKworICAgIGlmICghc2F0dXJhdGlvbikKKyAgICAgICAgcmV0dXJu
IHsgbGlnaHRuZXNzLCBsaWdodG5lc3MsIGxpZ2h0bmVzcywgYWxwaGEgfTsKKworICAgIGZsb2F0
IGh1ZTsKKyAgICBpZiAoIWNocm9tYSkKKyAgICAgICAgaHVlID0gMDsKKyAgICBlbHNlIGlmICht
YXggPT0gcikKKyAgICAgICAgaHVlID0gKDYwLjBmICogKChnIC0gYikgLyBjaHJvbWEpKSArIDM2
MC4wZjsKKyAgICBlbHNlIGlmIChtYXggPT0gZykKKyAgICAgICAgaHVlID0gKDYwLjBmICogKChi
IC0gcikgLyBjaHJvbWEpKSArIDEyMC4wZjsKKyAgICBlbHNlCisgICAgICAgIGh1ZSA9ICg2MC4w
ZiAqICgociAtIGcpIC8gY2hyb21hKSkgKyAyNDAuMGY7CisKKyAgICBpZiAoaHVlID49IDM2MC4w
ZikKKyAgICAgICAgaHVlIC09IDM2MC4wZjsKKworICAgIGh1ZSAvPSAzNjAuMGY7CisKKyAgICAv
LyBQZXJmb3JtIHJvdGF0aW9uLgorICAgIGh1ZSA9IHN0ZDo6Zm1vZChodWUgKyBhbW91bnQsIDEu
MGYpOworCisgICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0gMC41ZiA/IGxpZ2h0bmVzcyAq
ICgxLjBmICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNz
ICogc2F0dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBsaWdodG5lc3MgLSB0ZW1w
MjsKKyAgICAKKyAgICBodWUgKj0gNi4wZjsgLy8gY2FsY0h1ZSgpIHdhbnRzIGh1ZSBpbiB0aGUg
MC02IHJhbmdlLgorCisgICAgLy8gSHVlIGlzIGluIHRoZSByYW5nZSAwLTYsIG90aGVyIGFyZ3Mg
aW4gMC0xLgorICAgIGF1dG8gY2FsY0h1ZSA9IFtdKGZsb2F0IHRlbXAxLCBmbG9hdCB0ZW1wMiwg
ZmxvYXQgaHVlVmFsKSB7CisgICAgICAgIGlmIChodWVWYWwgPCAwLjBmKQorICAgICAgICAgICAg
aHVlVmFsICs9IDYuMGY7CisgICAgICAgIGVsc2UgaWYgKGh1ZVZhbCA+PSA2LjBmKQorICAgICAg
ICAgICAgaHVlVmFsIC09IDYuMGY7CisgICAgICAgIGlmIChodWVWYWwgPCAxLjBmKQorICAgICAg
ICAgICAgcmV0dXJuIHRlbXAxICsgKHRlbXAyIC0gdGVtcDEpICogaHVlVmFsOworICAgICAgICBp
ZiAoaHVlVmFsIDwgMy4wZikKKyAgICAgICAgICAgIHJldHVybiB0ZW1wMjsKKyAgICAgICAgaWYg
KGh1ZVZhbCA8IDQuMGYpCisgICAgICAgICAgICByZXR1cm4gdGVtcDEgKyAodGVtcDIgLSB0ZW1w
MSkgKiAoNC4wZiAtIGh1ZVZhbCk7CisgICAgICAgIHJldHVybiB0ZW1wMTsKKyAgICB9OworCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVtcDIsIGh1ZSArIDIuMGYpLAor
ICAgICAgICBjYWxjSHVlKHRlbXAxLCB0ZW1wMiwgaHVlKSwKKyAgICAgICAgY2FsY0h1ZSh0ZW1w
MSwgdGVtcDIsIGh1ZSAtIDIuMGYpLAorICAgICAgICBhbHBoYQorICAgIH07Cit9CisKIGJvb2wg
SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9h
dD4mIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb2xvcik7Ci0gICAg
Ci0gICAgLy8gUm90YXRlIHRoZSBodWUgMTgwZGVnLgotICAgIGhzbGEuaHVlID0gc3RkOjpmbW9k
KGhzbGEuaHVlICsgMC41ZiwgMS4wZik7Ci0gICAgCi0gICAgLy8gQ29udmVydCBiYWNrIHRvIFJH
Qi4KLSAgICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQSA9IHRvU1JHQkEoaHNsYSk7CisgICAgYXV0byBo
dWVSb3RhdGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90YXRlKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSwgMC41Zik7CiAgICAgCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9w
cm9ibGVtLzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRyaXggd2FzIGRlcml2ZWQuCiAgICAgY29u
c3RleHByIENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01vZGVNYXRyaXggewpAQCAtMjQwLDcgKzMw
Myw3IEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmEKICAgICAgICAg
MC4wMzBmLCAtMC43NDFmLCAtMC4wODlmLCAwLjBmLCAxLjBmLAogICAgICAgICAwLjAzMGYsICAw
LjA1OWYsIC0wLjg5MGYsIDAuMGYsIDEuMGYKICAgICB9OwotICAgIGNvbG9yID0gYXNTUkdCQSh0
b0RhcmtNb2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25l
bnRzKGh1ZVJvdGF0ZWRTUkdCQSkpKTsKKyAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0Ns
YW1waW5nPFNSR0JBPGZsb2F0Pj4odG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTI1MiwxNiArMzE1LDExIEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjppbnYKICAgICAgICAgLTAuMDQ5ZiwgLTEuMzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4yNWYs
CiAgICAgICAgIC0wLjA0OWYsIC0wLjA5N2YsIC0xLjEwNGYsIDAuMGYsIDEuMjVmCiAgICAgfTsK
LSAgICBhdXRvIGNvbnZlcnRlZFRvTGlnaHRNb2RlID0gYXNTUkdCQSh0b0xpZ2h0TW9kZU1hdHJp
eC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsK
LQotICAgIC8vIENvbnZlcnQgdG8gSFNMLgotICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb252ZXJ0
ZWRUb0xpZ2h0TW9kZSk7CisgICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMg
PSB0b0xpZ2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpOwogCi0gICAgLy8gSHVlIHJvdGF0ZSBieSAxODBkZWcuCi0gICAgaHNs
YS5odWUgPSBzdGQ6OmZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKKyAgICBhdXRvIGh1ZVJv
dGF0ZWRTUkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoY29udmVydGVkVG9MaWdodE1vZGVDb21w
b25lbnRzLCAwLjVmKTsKIAotICAgIC8vIEFuZCByZXR1cm4gUkdCLgotICAgIGNvbG9yID0gdG9T
UkdCQShoc2xhKTsKKyAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JB
PGZsb2F0Pj4oaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcxNjc1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0
aW9uczo6dHJhbnNmb3JtQ29sb3IoQ28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBjb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JBQ29sb3IpOworICAg
IGNvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihzUkdCQUNvbG9yKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6
aW52ZXJzZVRyYW5zZm9ybUMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBjb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JBQ29sb3IpOworICAgIGNvbG9y
ID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihzUkdCQUNvbG9yKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9y
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyNzE2NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JB
JiBjb2xvcikKLSAgICA6IENvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVl
biksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yLmFscGhhKSB9KSkKKyAgICA6IENvbG9yKGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JH
QkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3IucmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yLmdyZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmJsdWUpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3IuYWxwaGEpIH0pKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCShyZXZpc2lvbiAyNzE2NzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTkyLDEzICs5MiwxMyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+IG1ha2VTaW1wCiAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxbNF07CiAgICAgICAgIFtvZmZz
Y3JlZW5SZXAgZ2V0UGl4ZWw6cGl4ZWwgYXRYOjAgeTowXTsKIAotICAgICAgICByZXR1cm4gY2xh
bXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBw
aXhlbFszXSk7CisgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdC
QTx1aW50OF90Pj4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAg
IH0KIAogICAgIFtyZ2JDb2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21w
b25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdC
QSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Z3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRp
Y19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50
OF90Pj4oU1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25l
bnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21O
U0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjcxNjc1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9y
LmEgfSkpCisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgY29s
b3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNzE2NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRDo6c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9y
KQogewotICAgIGF1dG8gY29sb3JLZXkgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7
IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBjb2xvcktl
eSA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBj
b2xvci5iLCBjb2xvci5hIH0pOwogCiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBpZiAo
IW1femVyb0JydXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5t
bQkocmV2aXNpb24gMjcxNjc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9y
SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJ
Q29sb3IoVUlDb2xvciAqY29sb3IpCiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQg
Z3JlZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsK
IAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0
PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0Pihh
bHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBz
dGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVu
Q29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNzE2
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVudUJh
Y2tncm91bmRDb2xvCiAgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2NyZWVuUmVw
IGdldFBpeGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVu
dEJ5dGVzPFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7Cisg
ICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PihwaXhl
bFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CiB9CiAKIENvbG9yIFJlbmRlclRo
ZW1lTWFjOjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSUQsIE9wdGlvblNldDxTdHls
ZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0
aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjcxNjc1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQg
Ymx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJs
dWUsIHNpbXBsZVRvLmJsdWUsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWUsIHNpbXBsZUFu
aW1hdGVkLmJsdWUpOwogICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jl
c3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmFscGhhLCBzaW1wbGVUby5hbHBoYSwgc2ltcGxl
VG9BdEVuZE9mRHVyYXRpb24uYWxwaGEsIHNpbXBsZUFuaW1hdGVkLmFscGhhKTsKICAgICAgICAg
Ci0gICAgICAgIGFuaW1hdGVkID0gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihzdGQ6Omxy
b3VuZChyZWQpLCBzdGQ6Omxyb3VuZChncmVlbiksIHN0ZDo6bHJvdW5kKGJsdWUpLCBzdGQ6Omxy
b3VuZChhbHBoYSkpOworICAgICAgICBhbmltYXRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1w
aW5nPFNSR0JBPHVpbnQ4X3Q+PihzdGQ6Omxyb3VuZChyZWQpLCBzdGQ6Omxyb3VuZChncmVlbiks
IHN0ZDo6bHJvdW5kKGJsdWUpLCBzdGQ6Omxyb3VuZChhbHBoYSkpOwogICAgIH0KIAogICAgIE9w
dGlvbmFsPGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5n
JiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQpAQCAtMTIwLDcgKzEyMCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOwogCiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhh
IG9uIHJlc3VsdCB0byAxMDAlIG9wYXF1ZS4KLSAgICAgICAgbV90byA9IGNsYW1wVG9Db21wb25l
bnRCeXRlczxTUkdCQT4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdy
ZWVuICsgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7
CisgICAgICAgIG1fdG8gPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90
Pj4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxl
RnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5n
Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjc1KQorKysgU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wMS0yMCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5n
IGxvZ2ljIHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
bG9yLmNwcDoKKyAgICAgICAgKHdlYmtpdENvbG9yVG9XZWJDb3JlQ29sb3IpOgorICAgICAgICBV
cGRhdGUgdG8gdXNlIG5ldyBjb252ZXJ0VG88PiBmdW5jdGlvbnMuCisKIDIwMjEtMDEtMjAgIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVUHJvY2Vzc10gTWFy
ayBJT1N1cmZhY2UgYmFja2luZyBmb3IgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wncyBkaXNwbGF5
QnVmZmVyIGFzIG93bmVkIGJ5IHRoZSBXZWJQcm9jZXNzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjcxNjc1KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgR19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXRDb2xv
ciwgd2Via2l0XwogCiBjb25zdCBXZWJDb3JlOjpDb2xvciB3ZWJraXRDb2xvclRvV2ViQ29yZUNv
bG9yKFdlYktpdENvbG9yKiBjb2xvcikKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y29udmVydFRv
Q29tcG9uZW50Qnl0ZXMoV2ViQ29yZTo6U1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3It
PnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+Z3JlZW4pLCBzdGF0aWNfY2FzdDxmbG9h
dD4oY29sb3ItPmJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmFscGhhKSB9KTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6Y29udmVydFRvPFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+PihXZWJD
b3JlOjpTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGNvbG9yLT5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+Ymx1ZSksIHN0
YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpIH0pOwogfQogCiB2b2lkIHdlYmtpdENvbG9y
RmlsbEZyb21XZWJDb3JlQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIHdlYkNvcmVDb2xvciwg
V2ViS2l0Q29sb3IqIGNvbG9yKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjc1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKK3cyMDIxLTAxLTIwICBTYW0gV2VpbmlnICA8
d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcgbG9naWMg
dG8gYmUgbW9yZSBjb25zaXN0ZW50IGFuZCBjbGVhcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gRnJhc2VyLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9y
VGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgVXBkYXRlIHRlc3RzIHRvIHVzZSBuZXcg
Y29udmVydFRvPD4gZnVuY3Rpb25zLgorCiAyMDIxLTAxLTIwICBBYWthc2ggSmFpbiAgPGFha2Fz
aF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBFV1Mgc2hvdWxkIGRpc3BsYXkgY29tbWl0IGlk
ZW50aWZpZXIgaW4gYnVpbGRzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNzE2NzUpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiAgICAgCiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKICAg
ICAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
dG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVy
dFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShj
b2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC02Miw3ICs2Miw3IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX0JsYWNrKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVz
cygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNs
YUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAK
QEAgLTc4LDcgKzc4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogCiAgICAgRVhQRUNU
X0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JB
KGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JH
QkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCBy
b3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTk0LDcgKzk0LDcgQEAgVEVTVChDb2xvciwgUkdC
VG9IU0xfR3JlZW4pCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhz
bGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRy
aXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3Ip
KTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTEw
LDcgKzExMCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0
byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNs
YUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1
aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5k
VHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0RhcmtHcmF5KQogICAgIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3Mo
KSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0g
Y29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJv
dW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFD
b2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBA
IC0xNDIsNyArMTQyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkKIAogICAgIEVYUEVD
VF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdC
QShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNS
R0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwg
cm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xNTgsNyArMTU4LDcgQEAgVEVTVChDb2xvciwg
UkdCVG9IU0xfTGlnaHRHcmF5KQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVz
cygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNs
YUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVz
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9F
eHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNzE2NzUpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDcgKzEwOSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiAgICAg
fQogCiAgICAgYXV0byBjb21wb25lbnRCeXRlcyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAxMjgs
IDYzLCAxMjcgfTsKLSAgICBDb2xvciByZ2IxIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNv
bXBvbmVudEJ5dGVzKSB9OworICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+
Pihjb21wb25lbnRCeXRlcykgfTsKICAgICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsK
ICAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7CiAgICAgRVhQRUNUX05FKHJnYjIsIHJnYjEpOwpA
QCAtMTM4LDcgKzEzOCw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKICAgICB9CiAKICAg
ICBhdXRvIGNvbXBvbmVudEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEy
NyB9OwotICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29tcG9uZW50
Qnl0ZXMpIH07CisgICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGNvbXBv
bmVudEJ5dGVzKSB9OwogICAgIENvbG9yIHJnYjIgeyBjb21wb25lbnRCeXRlcyB9OwogICAgIEVY
UEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkpOwogfQpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHJldmlzaW9uIDI3MTY3NSkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgV2ViQ29yZTo6Q29sb3IgVGVzdFBERlBhZ2U6OmNvbG9y
QXRQb2ludAogCiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29sb3I6OnRy
YW5zcGFyZW50QmxhY2s7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmNsYW1wVG9Db21wb25lbnRCeXRl
czxXZWJDb3JlOjpTUkdCQT4ociAqIDI1NSAvIGEsIGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwg
YSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Om1ha2VDbGFtcGluZ0NvbXBvbmVudHNFeGNlcHRBbHBo
YTxXZWJDb3JlOjpTUkdCQTx1aW50OF90Pj4ociAqIDI1NSAvIGEsIGcgKiAyNTUgLyBhLCBiICog
MjU1IC8gYSwgYSk7CiB9CiAKIC8vIERvY3VtZW50cwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjc1
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMjEtMDEtMjAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IFJld29yayBjb2xvciBjbGFtcGluZyBsb2dpYyB0byBiZSBtb3JlIGNvbnNpc3RlbnQgYW5kIGNs
ZWFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA3
MTYKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBmYXN0
L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldEZpbGxDb2xvci1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRGaWxsQ29sb3IuaHRtbDoKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFNoYWRvdy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRTaGFkb3cuaHRt
bDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFN0cm9rZUNvbG9y
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNl
dFN0cm9rZUNvbG9yLmh0bWw6CisgICAgICAgIEV4dGVuZCB0ZXN0cyB0byBjb3ZlciB0ZXN0aW5n
IHZhcmlvdXMgdmFsdWVzIGluY2x1ZGluZyBOYU4sIGluY2x1ZGluZyB0ZXN0aW5nIHdoYXQKKyAg
ICAgICAgY29sb3IgYWN0dWFsbHkgZ2V0cyBzZXQgYXMgdGhlIGN1cnJlbnQgc3R5bGUuIAorCiAy
MDIxLTAxLTIwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgWyBCaWcgU3VyIF0gcGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2Jp
ZGktZmFsbGJhY2stZm9udC13ZWlnaHQuaHRtbCBpcyBmYWlsaW5nCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldEZpbGxDb2xvci1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1z
ZXRGaWxsQ29sb3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzE2NzUpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldEZpbGxDb2xvci1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTQsMTMgKzQsNTAgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQQogCiAKIFBBU1MgY3R4LnNldEZpbGxDb2xvcigpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgorUEFTUyBjdHguZmlsbFN0eWxl
IGlzICcjMDAwMDAwJworCisKK3VuZGVmaW5lZCBzZXRGaWxsQ29sb3IoRE9NU3RyaW5nIGNvbG9y
LCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYWxwaGEpCisKIFBBU1MgY3R4LnNldEZpbGxD
b2xvcigncmVkJykgaXMgdW5kZWZpbmVkCi1QQVNTIGN0eC5zZXRGaWxsQ29sb3IoMCkgaXMgdW5k
ZWZpbmVkCi1QQVNTIGN0eC5zZXRGaWxsQ29sb3IoMCwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIGN0
eC5zZXRGaWxsQ29sb3IoMCwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBl
cnJvci4KLVBBU1MgY3R4LnNldEZpbGxDb2xvcigwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKLVBB
U1MgY3R4LnNldEZpbGxDb2xvcigwLCAwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKLVBBU1MgY3R4
LnNldEZpbGxDb2xvcigwLCAwLCAwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZp
bGxTdHlsZSBpcyAnI2ZmMDAwMCcKK1BBU1MgY3R4LnNldEZpbGxDb2xvcigncmVkJywgLjUpIGlz
IHVuZGVmaW5lZAorUEFTUyBjdHguZmlsbFN0eWxlIGlzICdyZ2JhKDI1NSwgMCwgMCwgMC41KScK
K1BBU1MgY3R4LnNldEZpbGxDb2xvcigncmVkJywgTmFOKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4
LmZpbGxTdHlsZSBpcyAncmdiYSgyNTUsIDAsIDAsIDAuNSknCisKKwordW5kZWZpbmVkIHNldEZp
bGxDb2xvcih1bnJlc3RyaWN0ZWQgZmxvYXQgZ3JheUxldmVsLCBvcHRpb25hbCB1bnJlc3RyaWN0
ZWQgZmxvYXQgYWxwaGEgPSAxKQorCitQQVNTIGN0eC5zZXRGaWxsQ29sb3IoLjI1KSBpcyB1bmRl
ZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAnIzQwNDA0MCcKK1BBU1MgY3R4LnNldEZpbGxD
b2xvciguMjUsIC41KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAncmdiYSg2
NCwgNjQsIDY0LCAwLjUpJworUEFTUyBjdHguc2V0RmlsbENvbG9yKE5hTiwgLjUpIGlzIHVuZGVm
aW5lZAorUEFTUyBjdHguZmlsbFN0eWxlIGlzICdyZ2JhKDY0LCA2NCwgNjQsIDAuNSknCitQQVNT
IGN0eC5zZXRGaWxsQ29sb3IoLjI1LCBOYU4pIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguZmlsbFN0
eWxlIGlzICdyZ2JhKDY0LCA2NCwgNjQsIDAuNSknCisKKwordW5kZWZpbmVkIHNldEZpbGxDb2xv
cih1bnJlc3RyaWN0ZWQgZmxvYXQgciwgdW5yZXN0cmljdGVkIGZsb2F0IGcsIHVucmVzdHJpY3Rl
ZCBmbG9hdCBiLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYSkKKworUEFTUyBjdHguc2V0RmlsbENvbG9y
KC4xLCAuMiwgLjMpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNT
IGN0eC5zZXRGaWxsQ29sb3IoLjEsIC4yLCAuMywgLjQpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHgu
ZmlsbFN0eWxlIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCknCitQQVNTIGN0eC5zZXRGaWxsQ29s
b3IoTmFOLCAuMiwgLjMsIC40KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAn
cmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0RmlsbENvbG9yKC4xLCBOYU4sIC4z
LCAuNCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEoMjYsIDUxLCA3
NywgMC40KScKK1BBU1MgY3R4LnNldEZpbGxDb2xvciguMSwgLjIsIE5hTiwgLjQpIGlzIHVuZGVm
aW5lZAorUEFTUyBjdHguZmlsbFN0eWxlIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCknCitQQVNT
IGN0eC5zZXRGaWxsQ29sb3IoLjEsIC4yLCAuMywgTmFOKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4
LmZpbGxTdHlsZSBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0RmlsbENv
bG9yKC41LCAuNCwgLjMsIC4yLCAuMSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUg
aXMgJ3JnYmEoMTI4LCAxMDIsIDc3LCAwLjIpJworUEFTUyBjdHguc2V0RmlsbENvbG9yKDEsIC40
LCAuMywgLjIsIC4xLCAwKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAncmdi
YSgyNTUsIDEwMiwgNzcsIDAuMiknCitQQVNTIGN0eC5zZXRGaWxsQ29sb3IoMS41LCAxMCwgLTAu
MSwgLTEwMCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEoMjU1LCAy
NTUsIDAsIDApJwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBM
RVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldEZp
bGxDb2xvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZh
cy1vdmVybG9hZHMtc2V0RmlsbENvbG9yLmh0bWwJKHJldmlzaW9uIDI3MTY3NSkKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0RmlsbENvbG9yLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTcsMTkgKzcsNjkgQEAKIDxzY3JpcHQ+CiBkZXNjcmlwdGlvbigiVGVz
dCB0aGUgYmVoYXZpb3Igb2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnNldEZpbGxDb2xvcigp
IHdoZW4gY2FsbGVkIHdpdGggZGlmZmVyZW50IG51bWJlcnMgb2YgYXJndW1lbnRzLiIpOwogCi12
YXIgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQn
KTsKK2xldCBjdHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0
KCcyZCcpOwogCi12YXIgVHlwZUVycm9yID0gIlR5cGVFcnJvcjogVHlwZSBlcnJvciI7Ci12YXIg
VHlwZUVycm9yTm90RW5vdWdoQXJndW1lbnRzID0gIlR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1
bWVudHMiOworbGV0IFR5cGVFcnJvciA9ICJUeXBlRXJyb3I6IFR5cGUgZXJyb3IiOworbGV0IFR5
cGVFcnJvck5vdEVub3VnaEFyZ3VtZW50cyA9ICJUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1l
bnRzIjsKIAogc2hvdWxkVGhyb3coImN0eC5zZXRGaWxsQ29sb3IoKSIsICJUeXBlRXJyb3JOb3RF
bm91Z2hBcmd1bWVudHMiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIicjMDAwMDAwJyIp
OworCisKK2RlYnVnKCJcblxudW5kZWZpbmVkIHNldEZpbGxDb2xvcihET01TdHJpbmcgY29sb3Is
IG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSlcbiIpCiBzaG91bGRCZSgiY3R4LnNl
dEZpbGxDb2xvcigncmVkJykiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgiY3R4LnNldEZpbGxD
b2xvcigwKSIsICJ1bmRlZmluZWQiKTsKLXNob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKDAsIDAp
IiwgInVuZGVmaW5lZCIpOwotc2hvdWxkVGhyb3coImN0eC5zZXRGaWxsQ29sb3IoMCwgMCwgMCki
LCAiVHlwZUVycm9yIik7Ci1zaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvcigwLCAwLCAwLCAwKSIs
ICJ1bmRlZmluZWQiKTsKLXNob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKDAsIDAsIDAsIDAsIDAp
IiwgInVuZGVmaW5lZCIpOwotc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoMCwgMCwgMCwgMCwg
MCwgMCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICInI2ZmMDAw
MCciKTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoJ3JlZCcsIC41KSIsICJ1bmRlZmlu
ZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIidyZ2JhKDI1NSwgMCwgMCwgMC41KSci
KTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoJ3JlZCcsIE5hTikiLCAidW5kZWZpbmVk
Iik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIncmdiYSgyNTUsIDAsIDAsIDAuNSknIik7
CisKKworZGVidWcoIlxuXG51bmRlZmluZWQgc2V0RmlsbENvbG9yKHVucmVzdHJpY3RlZCBmbG9h
dCBncmF5TGV2ZWwsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSA9IDEpXG4iKQor
CitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvciguMjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxk
QmUoImN0eC5maWxsU3R5bGUiLCAiJyM0MDQwNDAnIik7CisKK3Nob3VsZEJlKCJjdHguc2V0Rmls
bENvbG9yKC4yNSwgLjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUi
LCAiJ3JnYmEoNjQsIDY0LCA2NCwgMC41KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29s
b3IoTmFOLCAuNSkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIn
cmdiYSg2NCwgNjQsIDY0LCAwLjUpJyIpOworCitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvcigu
MjUsIE5hTikiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIncmdi
YSg2NCwgNjQsIDY0LCAwLjUpJyIpOworCisKK2RlYnVnKCJcblxudW5kZWZpbmVkIHNldEZpbGxD
b2xvcih1bnJlc3RyaWN0ZWQgZmxvYXQgciwgdW5yZXN0cmljdGVkIGZsb2F0IGcsIHVucmVzdHJp
Y3RlZCBmbG9hdCBiLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYSlcbiIpCisKK3Nob3VsZFRocm93KCJj
dHguc2V0RmlsbENvbG9yKC4xLCAuMiwgLjMpIiwgIlR5cGVFcnJvciIpOworCitzaG91bGRCZSgi
Y3R4LnNldEZpbGxDb2xvciguMSwgLjIsIC4zLCAuNCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRC
ZSgiY3R4LmZpbGxTdHlsZSIsICIncmdiYSgyNiwgNTEsIDc3LCAwLjQpJyIpOworCitzaG91bGRC
ZSgiY3R4LnNldEZpbGxDb2xvcihOYU4sIC4yLCAuMywgLjQpIiwgInVuZGVmaW5lZCIpOworc2hv
dWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3JnYmEoMjYsIDUxLCA3NywgMC40KSciKTsKKworc2hv
dWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoLjEsIE5hTiwgLjMsIC40KSIsICJ1bmRlZmluZWQiKTsK
K3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIidyZ2JhKDI2LCA1MSwgNzcsIDAuNCknIik7CisK
K3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKC4xLCAuMiwgTmFOLCAuNCkiLCAidW5kZWZpbmVk
Iik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIncmdiYSgyNiwgNTEsIDc3LCAwLjQpJyIp
OworCitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvciguMSwgLjIsIC4zLCBOYU4pIiwgInVuZGVm
aW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3JnYmEoMjYsIDUxLCA3NywgMC40
KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoLjUsIC40LCAuMywgLjIsIC4xKSIs
ICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIidyZ2JhKDEyOCwgMTAy
LCA3NywgMC4yKSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoMSwgLjQsIC4zLCAu
MiwgLjEsIDApIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3Jn
YmEoMjU1LCAxMDIsIDc3LCAwLjIpJyIpOworCitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvcigx
LjUsIDEwLCAtMC4xLCAtMTAwKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0
eWxlIiwgIidyZ2JhKDI1NSwgMjU1LCAwLCAwKSciKTsKKwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFNoYWRvdy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFz
LW92ZXJsb2Fkcy1zZXRTaGFkb3ctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNzE2NzUpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFNoYWRvdy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYsMTcgKzYsNTIgQEAgT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQQogUEFTUyBjdHguc2V0U2hhZG93KCkgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNTIGN0eC5zZXRTaGFkb3co
MCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCiBQQVNT
IGN0eC5zZXRTaGFkb3coMCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMuCi1QQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCkgaXMgdW5kZWZpbmVkCi1Q
QVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIGN0eC5zZXRT
aGFkb3coMCwgMCwgMCwgMCwgMCkgaXMgdW5kZWZpbmVkCiBQQVNTIGN0eC5zZXRTaGFkb3coMCwg
MCwgMCwgMCwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KLVBB
U1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAncmVkJykgaXMgdW5kZWZpbmVkCiBQQVNTIGN0
eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgJ3JlZCcsIDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IFR5cGUgZXJyb3IuCi1QQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgJ3JlZCcsIDAs
IDApIGlzIHVuZGVmaW5lZAogUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDAsIDApIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCi1QQVNTIGN0eC5zZXRTaGFkb3co
MCwgMCwgMCwgMCwgMCwgMCwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIGN0eC5zZXRTaGFkb3coMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIGN0eC5zZXRTaGFkb3coMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkgaXMgdW5kZWZpbmVkCisKKwordW5kZWZpbmVkIHNldFNo
YWRvdyh1bnJlc3RyaWN0ZWQgZmxvYXQgd2lkdGgsIHVucmVzdHJpY3RlZCBmbG9hdCBoZWlnaHQs
IHVucmVzdHJpY3RlZCBmbG9hdCBibHVyLCBvcHRpb25hbCBET01TdHJpbmcgY29sb3IsIG9wdGlv
bmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSkKKworUEFTUyBjdHguc2V0U2hhZG93KDAsIDAs
IDAsICdyZWQnKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICcjZmYwMDAw
JworUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsICdyZWQnLCAuNSkgaXMgdW5kZWZpbmVkCitQ
QVNTIGN0eC5zaGFkb3dDb2xvciBpcyAncmdiYSgyNTUsIDAsIDAsIDAuNSknCitQQVNTIGN0eC5z
ZXRTaGFkb3coMCwgMCwgMCwgJ3JlZCcsIE5hTikgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zaGFk
b3dDb2xvciBpcyAncmdiYSgyNTUsIDAsIDAsIDAuNSknCisKKwordW5kZWZpbmVkIHNldFNoYWRv
dyh1bnJlc3RyaWN0ZWQgZmxvYXQgd2lkdGgsIHVucmVzdHJpY3RlZCBmbG9hdCBoZWlnaHQsIHVu
cmVzdHJpY3RlZCBmbG9hdCBibHVyLCB1bnJlc3RyaWN0ZWQgZmxvYXQgZ3JheUxldmVsLCBvcHRp
b25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYWxwaGEgPSAxKQorCitQQVNTIGN0eC5zZXRTaGFkb3co
MCwgMCwgMCwgLjI1KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICcjNDA0
MDQwJworUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4yNSwgLjUpIGlzIHVuZGVmaW5lZAor
UEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoNjQsIDY0LCA2NCwgMC41KScKK1BBU1MgY3R4
LnNldFNoYWRvdygwLCAwLCAwLCBOYU4sIC41KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRv
d0NvbG9yIGlzICdyZ2JhKDY0LCA2NCwgNjQsIDAuNSknCitQQVNTIGN0eC5zZXRTaGFkb3coMCwg
MCwgMCwgLjI1LCBOYU4pIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3Jn
YmEoNjQsIDY0LCA2NCwgMC41KScKKworCit1bmRlZmluZWQgc2V0U2hhZG93KHVucmVzdHJpY3Rl
ZCBmbG9hdCB3aWR0aCwgdW5yZXN0cmljdGVkIGZsb2F0IGhlaWdodCwgdW5yZXN0cmljdGVkIGZs
b2F0IGJsdXIsIHVucmVzdHJpY3RlZCBmbG9hdCByLCB1bnJlc3RyaWN0ZWQgZmxvYXQgZywgdW5y
ZXN0cmljdGVkIGZsb2F0IGIsIHVucmVzdHJpY3RlZCBmbG9hdCBhKQorCitQQVNTIGN0eC5zZXRT
aGFkb3coMCwgMCwgMCwgLjEsIC4yLCAuMykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlw
ZSBlcnJvci4KK1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMSwgLjIsIC4zLCAuNCkgaXMg
dW5kZWZpbmVkCitQQVNTIGN0eC5zaGFkb3dDb2xvciBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQp
JworUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIE5hTiwgLjIsIC4zLCAuNCkgaXMgdW5kZWZp
bmVkCitQQVNTIGN0eC5zaGFkb3dDb2xvciBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFT
UyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4xLCBOYU4sIC4zLCAuNCkgaXMgdW5kZWZpbmVkCitQ
QVNTIGN0eC5zaGFkb3dDb2xvciBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHgu
c2V0U2hhZG93KDAsIDAsIDAsIC4xLCAuMiwgTmFOLCAuNCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0
eC5zaGFkb3dDb2xvciBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0U2hh
ZG93KDAsIDAsIDAsIC4xLCAuMiwgLjMsIE5hTikgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zaGFk
b3dDb2xvciBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0U2hhZG93KDAs
IDAsIDAsIC41LCAuNCwgLjMsIC4yLCAuMSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zaGFkb3dD
b2xvciBpcyAncmdiYSgxMjgsIDEwMiwgNzcsIDAuMiknCitQQVNTIGN0eC5zZXRTaGFkb3coMCwg
MCwgMCwgMSwgLjQsIC4zLCAuMiwgLjEsIDApIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hhZG93
Q29sb3IgaXMgJ3JnYmEoMjU1LCAxMDIsIDc3LCAwLjIpJworUEFTUyBjdHguc2V0U2hhZG93KDAs
IDAsIDAsIDEuNSwgMTAsIC0wLjEsIC0xMDApIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hhZG93
Q29sb3IgaXMgJ3JnYmEoMjU1LCAyNTUsIDAsIDApJwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9j
YW52YXMtb3ZlcmxvYWRzLXNldFNoYWRvdy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0U2hhZG93Lmh0bWwJKHJldmlzaW9uIDI3
MTY3NSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0U2hh
ZG93Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1LDE3ICsxNSw2MyBAQCB2YXIgVHlwZUVycm9y
Tm90RW5vdWdoQXJndW1lbnRzID0gIlR5cGVFCiBzaG91bGRUaHJvdygiY3R4LnNldFNoYWRvdygp
IiwgIlR5cGVFcnJvck5vdEVub3VnaEFyZ3VtZW50cyIpOwogc2hvdWxkVGhyb3coImN0eC5zZXRT
aGFkb3coMCkiLCAiVHlwZUVycm9yTm90RW5vdWdoQXJndW1lbnRzIik7CiBzaG91bGRUaHJvdygi
Y3R4LnNldFNoYWRvdygwLCAwKSIsICJUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMiKTsKLXNo
b3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDApIiwgInVuZGVmaW5lZCIpOwotc2hvdWxkQmUo
ImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgiY3R4
LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsKIHNob3VsZFRocm93KCJj
dHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDAsIDApIiwgIlR5cGVFcnJvciIpOwotc2hvdWxkQmUo
ImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgJ3JlZCcpIiwgInVuZGVmaW5lZCIpOwogc2hvdWxk
VGhyb3coImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgJ3JlZCcsIDApIiwgIlR5cGVFcnJvciIp
Owotc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgJ3JlZCcsIDAsIDApIiwgInVu
ZGVmaW5lZCIpOwogc2hvdWxkVGhyb3coImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgMCwgMCki
LCAiVHlwZUVycm9yIik7Ci1zaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwLCAw
LCAwKSIsICJ1bmRlZmluZWQiKTsKLXNob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIpOwotc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7CisKK2RlYnVnKCJcblxudW5k
ZWZpbmVkIHNldFNoYWRvdyh1bnJlc3RyaWN0ZWQgZmxvYXQgd2lkdGgsIHVucmVzdHJpY3RlZCBm
bG9hdCBoZWlnaHQsIHVucmVzdHJpY3RlZCBmbG9hdCBibHVyLCBvcHRpb25hbCBET01TdHJpbmcg
Y29sb3IsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSlcbiIpCitzaG91bGRCZSgi
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAncmVkJykiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgi
Y3R4LnNoYWRvd0NvbG9yIiwgIicjZmYwMDAwJyIpOworCitzaG91bGRCZSgiY3R4LnNldFNoYWRv
dygwLCAwLCAwLCAncmVkJywgLjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zaGFk
b3dDb2xvciIsICIncmdiYSgyNTUsIDAsIDAsIDAuNSknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0
U2hhZG93KDAsIDAsIDAsICdyZWQnLCBOYU4pIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0
eC5zaGFkb3dDb2xvciIsICIncmdiYSgyNTUsIDAsIDAsIDAuNSknIik7CisKK2RlYnVnKCJcblxu
dW5kZWZpbmVkIHNldFNoYWRvdyh1bnJlc3RyaWN0ZWQgZmxvYXQgd2lkdGgsIHVucmVzdHJpY3Rl
ZCBmbG9hdCBoZWlnaHQsIHVucmVzdHJpY3RlZCBmbG9hdCBibHVyLCB1bnJlc3RyaWN0ZWQgZmxv
YXQgZ3JheUxldmVsLCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYWxwaGEgPSAxKVxuIikK
Kworc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjI1KSIsICJ1bmRlZmluZWQiKTsK
K3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJyM0MDQwNDAnIik7CisKK3Nob3VsZEJlKCJj
dHguc2V0U2hhZG93KDAsIDAsIDAsIC4yNSwgLjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUo
ImN0eC5zaGFkb3dDb2xvciIsICIncmdiYSg2NCwgNjQsIDY0LCAwLjUpJyIpOworCitzaG91bGRC
ZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCBOYU4sIC41KSIsICJ1bmRlZmluZWQiKTsKK3Nob3Vs
ZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoNjQsIDY0LCA2NCwgMC41KSciKTsKKworc2hv
dWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjI1LCBOYU4pIiwgInVuZGVmaW5lZCIpOwor
c2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICIncmdiYSg2NCwgNjQsIDY0LCAwLjUpJyIpOwor
CisKK2RlYnVnKCJcblxudW5kZWZpbmVkIHNldFNoYWRvdyh1bnJlc3RyaWN0ZWQgZmxvYXQgd2lk
dGgsIHVucmVzdHJpY3RlZCBmbG9hdCBoZWlnaHQsIHVucmVzdHJpY3RlZCBmbG9hdCBibHVyLCB1
bnJlc3RyaWN0ZWQgZmxvYXQgciwgdW5yZXN0cmljdGVkIGZsb2F0IGcsIHVucmVzdHJpY3RlZCBm
bG9hdCBiLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYSlcbiIpCisKK3Nob3VsZFRocm93KCJjdHguc2V0
U2hhZG93KDAsIDAsIDAsIC4xLCAuMiwgLjMpIiwgIlR5cGVFcnJvciIpOworCitzaG91bGRCZSgi
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMSwgLjIsIC4zLCAuNCkiLCAidW5kZWZpbmVkIik7Citz
aG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDI2LCA1MSwgNzcsIDAuNCknIik7CisK
K3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIE5hTiwgLjIsIC4zLCAuNCkiLCAidW5k
ZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDI2LCA1MSwgNzcs
IDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4xLCBOYU4sIC4z
LCAuNCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2Jh
KDI2LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAs
IC4xLCAuMiwgTmFOLCAuNCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0Nv
bG9yIiwgIidyZ2JhKDI2LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U2hh
ZG93KDAsIDAsIDAsIC4xLCAuMiwgLjMsIE5hTikiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgi
Y3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDI2LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJl
KCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIC41LCAuNCwgLjMsIC4yLCAuMSkiLCAidW5kZWZpbmVk
Iik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDEyOCwgMTAyLCA3NywgMC4y
KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMSwgLjQsIC4zLCAuMiwg
LjEsIDApIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICIncmdi
YSgyNTUsIDEwMiwgNzcsIDAuMiknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAs
IDAsIDEuNSwgMTAsIC0wLjEsIC0xMDApIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5z
aGFkb3dDb2xvciIsICIncmdiYSgyNTUsIDI1NSwgMCwgMCknIik7CisKIDwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogPC9i
b2R5PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRT
dHJva2VDb2xvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRTdHJva2VDb2xvci1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDI3MTY3NSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMt
c2V0U3Ryb2tlQ29sb3ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDEzICs0LDUw
IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBQQVNTIGN0
eC5zZXRTdHJva2VDb2xvcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2gg
YXJndW1lbnRzLgorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMgJyMwMDAwMDAnCisKKwordW5kZWZp
bmVkIHNldFN0cm9rZUNvbG9yKERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVk
IGZsb2F0IGFscGhhKQorCiBQQVNTIGN0eC5zZXRTdHJva2VDb2xvcigncmVkJykgaXMgdW5kZWZp
bmVkCi1QQVNTIGN0eC5zZXRTdHJva2VDb2xvcigwKSBpcyB1bmRlZmluZWQKLVBBU1MgY3R4LnNl
dFN0cm9rZUNvbG9yKDAsIDApIGlzIHVuZGVmaW5lZAotUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3Io
MCwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KLVBBU1MgY3R4
LnNldFN0cm9rZUNvbG9yKDAsIDAsIDAsIDApIGlzIHVuZGVmaW5lZAotUEFTUyBjdHguc2V0U3Ry
b2tlQ29sb3IoMCwgMCwgMCwgMCwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIGN0eC5zZXRTdHJva2VD
b2xvcigwLCAwLCAwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxl
IGlzICcjZmYwMDAwJworUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoJ3JlZCcsIC41KSBpcyB1bmRl
ZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDI1NSwgMCwgMCwgMC41KScKK1BB
U1MgY3R4LnNldFN0cm9rZUNvbG9yKCdyZWQnLCBOYU4pIGlzIHVuZGVmaW5lZAorUEFTUyBjdHgu
c3Ryb2tlU3R5bGUgaXMgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJworCisKK3VuZGVmaW5lZCBzZXRT
dHJva2VDb2xvcih1bnJlc3RyaWN0ZWQgZmxvYXQgZ3JheUxldmVsLCBvcHRpb25hbCB1bnJlc3Ry
aWN0ZWQgZmxvYXQgYWxwaGEgPSAxKQorCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvciguMjUpIGlz
IHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMgJyM0MDQwNDAnCitQQVNTIGN0eC5z
ZXRTdHJva2VDb2xvciguMjUsIC41KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxl
IGlzICdyZ2JhKDY0LCA2NCwgNjQsIDAuNSknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvcihOYU4s
IC41KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDY0LCA2NCwg
NjQsIDAuNSknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvciguMjUsIE5hTikgaXMgdW5kZWZpbmVk
CitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSg2NCwgNjQsIDY0LCAwLjUpJworCisKK3Vu
ZGVmaW5lZCBzZXRTdHJva2VDb2xvcih1bnJlc3RyaWN0ZWQgZmxvYXQgciwgdW5yZXN0cmljdGVk
IGZsb2F0IGcsIHVucmVzdHJpY3RlZCBmbG9hdCBiLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYSkKKwor
UEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoLjEsIC4yLCAuMykgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogVHlwZSBlcnJvci4KK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9yKC4xLCAuMiwgLjMsIC40
KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDI2LCA1MSwgNzcs
IDAuNCknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvcihOYU4sIC4yLCAuMywgLjQpIGlzIHVuZGVm
aW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMgJ3JnYmEoMjYsIDUxLCA3NywgMC40KScKK1BB
U1MgY3R4LnNldFN0cm9rZUNvbG9yKC4xLCBOYU4sIC4zLCAuNCkgaXMgdW5kZWZpbmVkCitQQVNT
IGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0
U3Ryb2tlQ29sb3IoLjEsIC4yLCBOYU4sIC40KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9r
ZVN0eWxlIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xv
ciguMSwgLjIsIC4zLCBOYU4pIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMg
J3JnYmEoMjYsIDUxLCA3NywgMC40KScKK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9yKC41LCAuNCwg
LjMsIC4yLCAuMSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSgx
MjgsIDEwMiwgNzcsIDAuMiknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvcigxLCAuNCwgLjMsIC4y
LCAuMSwgMCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSgyNTUs
IDEwMiwgNzcsIDAuMiknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvcigxLjUsIDEwLCAtMC4xLCAt
MTAwKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDI1NSwgMjU1
LCAwLCAwKScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRTdHJv
a2VDb2xvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZh
cy1vdmVybG9hZHMtc2V0U3Ryb2tlQ29sb3IuaHRtbAkocmV2aXNpb24gMjcxNjc1KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRTdHJva2VDb2xvci5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC03LDE5ICs3LDY5IEBACiA8c2NyaXB0PgogZGVzY3JpcHRpb24o
IlRlc3QgdGhlIGJlaGF2aW9yIG9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5zZXRTdHJva2VD
b2xvcigpIHdoZW4gY2FsbGVkIHdpdGggZGlmZmVyZW50IG51bWJlcnMgb2YgYXJndW1lbnRzLiIp
OwogCi12YXIgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4
dCgnMmQnKTsKK2xldCBjdHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRD
b250ZXh0KCcyZCcpOwogCi12YXIgVHlwZUVycm9yID0gIlR5cGVFcnJvcjogVHlwZSBlcnJvciI7
Ci12YXIgVHlwZUVycm9yTm90RW5vdWdoQXJndW1lbnRzID0gIlR5cGVFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMiOworbGV0IFR5cGVFcnJvciA9ICJUeXBlRXJyb3I6IFR5cGUgZXJyb3IiOwor
bGV0IFR5cGVFcnJvck5vdEVub3VnaEFyZ3VtZW50cyA9ICJUeXBlRXJyb3I6IE5vdCBlbm91Z2gg
YXJndW1lbnRzIjsKIAogc2hvdWxkVGhyb3coImN0eC5zZXRTdHJva2VDb2xvcigpIiwgIlR5cGVF
cnJvck5vdEVub3VnaEFyZ3VtZW50cyIpOworc2hvdWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICIn
IzAwMDAwMCciKTsKKworCitkZWJ1ZygiXG5cbnVuZGVmaW5lZCBzZXRTdHJva2VDb2xvcihET01T
dHJpbmcgY29sb3IsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSlcbiIpCiBzaG91
bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKCdyZWQnKSIsICJ1bmRlZmluZWQiKTsKLXNob3VsZEJl
KCJjdHguc2V0U3Ryb2tlQ29sb3IoMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgiY3R4LnNl
dFN0cm9rZUNvbG9yKDAsIDApIiwgInVuZGVmaW5lZCIpOwotc2hvdWxkVGhyb3coImN0eC5zZXRT
dHJva2VDb2xvcigwLCAwLCAwKSIsICJUeXBlRXJyb3IiKTsKLXNob3VsZEJlKCJjdHguc2V0U3Ry
b2tlQ29sb3IoMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgiY3R4LnNldFN0
cm9rZUNvbG9yKDAsIDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIpOwotc2hvdWxkQmUoImN0eC5z
ZXRTdHJva2VDb2xvcigwLCAwLCAwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJl
KCJjdHguc3Ryb2tlU3R5bGUiLCAiJyNmZjAwMDAnIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U3Ry
b2tlQ29sb3IoJ3JlZCcsIC41KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tl
U3R5bGUiLCAiJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0
cm9rZUNvbG9yKCdyZWQnLCBOYU4pIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJv
a2VTdHlsZSIsICIncmdiYSgyNTUsIDAsIDAsIDAuNSknIik7CisKKworZGVidWcoIlxuXG51bmRl
ZmluZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwgb3B0aW9u
YWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhhID0gMSlcbiIpCisKK3Nob3VsZEJlKCJjdHguc2V0
U3Ryb2tlQ29sb3IoLjI1KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tlU3R5
bGUiLCAiJyM0MDQwNDAnIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoLjI1LCAu
NSkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDY0
LCA2NCwgNjQsIDAuNSknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoTmFOLCAu
NSkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDY0
LCA2NCwgNjQsIDAuNSknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoLjI1LCBO
YU4pIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICIncmdiYSg2
NCwgNjQsIDY0LCAwLjUpJyIpOworCisKK2RlYnVnKCJcblxudW5kZWZpbmVkIHNldFN0cm9rZUNv
bG9yKHVucmVzdHJpY3RlZCBmbG9hdCByLCB1bnJlc3RyaWN0ZWQgZmxvYXQgZywgdW5yZXN0cmlj
dGVkIGZsb2F0IGIsIHVucmVzdHJpY3RlZCBmbG9hdCBhKVxuIikKKworc2hvdWxkVGhyb3coImN0
eC5zZXRTdHJva2VDb2xvciguMSwgLjIsIC4zKSIsICJUeXBlRXJyb3IiKTsKKworc2hvdWxkQmUo
ImN0eC5zZXRTdHJva2VDb2xvciguMSwgLjIsIC4zLCAuNCkiLCAidW5kZWZpbmVkIik7CitzaG91
bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDI2LCA1MSwgNzcsIDAuNCknIik7CisKK3No
b3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoTmFOLCAuMiwgLjMsIC40KSIsICJ1bmRlZmluZWQi
KTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tlU3R5bGUiLCAiJ3JnYmEoMjYsIDUxLCA3NywgMC40KSci
KTsKKworc2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xvciguMSwgTmFOLCAuMywgLjQpIiwgInVu
ZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICIncmdiYSgyNiwgNTEsIDc3
LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKC4xLCAuMiwgTmFOLCAu
NCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDI2
LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoLjEsIC4y
LCAuMywgTmFOKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tlU3R5bGUiLCAi
J3JnYmEoMjYsIDUxLCA3NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xv
ciguNSwgLjQsIC4zLCAuMiwgLjEpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJv
a2VTdHlsZSIsICIncmdiYSgxMjgsIDEwMiwgNzcsIDAuMiknIik7CisKK3Nob3VsZEJlKCJjdHgu
c2V0U3Ryb2tlQ29sb3IoMSwgLjQsIC4zLCAuMiwgLjEsIDApIiwgInVuZGVmaW5lZCIpOworc2hv
dWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICIncmdiYSgyNTUsIDEwMiwgNzcsIDAuMiknIik7CisK
K3Nob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoMS41LCAxMCwgLTAuMSwgLTEwMCkiLCAidW5k
ZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDI1NSwgMjU1LCAw
LCAwKSciKTsKKwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418039</attachid>
            <date>2021-01-21 07:23:39 -0800</date>
            <delta_ts>2021-01-21 08:55:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210121072338.patch</filename>
            <type>text/plain</type>
            <size>112167</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBvZiBhZGRpbmcgc3VwcG9ydCBm
b3IgRXh0ZW5kZWQtc1JHQiB0byBjb2xvciB0eXBlcywKKyAgICAgICAgdGhpcyBhZGRzIGNvbnN0
ZXhwciBtZXRhZGF0YSBhbmQgaGVscGVyIGZ1bmN0aW9ucyB0byBjcmVhdGUgY29sb3IKKyAgICAg
ICAgdHlwZXMgd2l0aCB0aGUgY29ycmVjdCBjbGFtcGVkIChvciB1bmNsYW1wZWQpIHZhbHVlcyBh
bmQgYWRvcHRzIHRoZW0KKyAgICAgICAgdGhyb3VnaG91dCB0aGUgY29kZSBiYXNlLgorCisgICAg
ICAgIC0gUmVtb3ZlcyAiY29tcG9uZW50IGJ5dGVzIiBhbmQgImNvbXBvbmVudCBmbG9hdHMiIGNv
bmNlcHRzIHJlcGxhY2luZworICAgICAgICAgIHdpdGggZnVuY3Rpb25zIHRoYXQgdGFrZSBjb2xv
ciB0eXBlcyBhcyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzOgorICAgICAgICAgIAorICAgICAgICAgICAg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZXMvY29udmVydFRvQ29tcG9uZW50RmxvYXRzIC0+IGNvbnZl
cnRUbzxDb2xvclR5cGU8VD4+CisgICAgICAgICAgICBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMvY2xh
bXBUb0NvbXBvbmVudEZsb2F0cyAtPiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxDb2xvclR5
cGU8VD4+CisKKyAgICAgICAgLSBBZGRzIE1vZGVsIHR5cGUgYWxpYXNlcyB0byBlYWNoIGNvbG9y
IHR5cGUgd2hpY2ggY2FuIHNwZWNpZnkgdHJhaXRzIAorICAgICAgICAgIGZvciB0aGF0IHR5cGUg
b2YgY29sb3IuIFRoZXNlIHRyYWl0cyBjdXJyZW50bHkgb25seSBpbmNsdWRlIHRoZSB2YWxpZCAK
KyAgICAgICAgICBjb21wb25lbnQgcmFuZ2VzIGFuZCB3aGV0aGVyIHRoZSBjb2xvciBjYW4gYmUg
aW52ZXJ0ZWQuIE1vcmUgd2lsbCBiZSAKKyAgICAgICAgICBhZGRlZCAobGlrZSB3aGl0ZSBwb2lu
dCBhbmQgYmFzZSBjb2xvciBzcGFjZSkgdG8gaGVscCBzaW1wbGlmeSB1dGlsaXR5IAorICAgICAg
ICAgIGFuZCBjb252ZXJzaW9uIGNvZGUuIAorCisgICAgICAgIC0gQWRkcyBhc3NlcnRpb25zIHRv
IGVhY2ggY29sb3IgdHlwZSBjb25zdHJ1Y3RvciB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkCisgICAg
ICAgICAgYXJlIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2VzIChhcyBzcGVjaWZpZWQgYnkgdGhlIE1v
ZGVsKS4KKworICAgICAgICAtIFJlbW92ZWQgYXNGb28oY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+
JikgZnVuY3Rpb25zLCB3aGljaCB3ZXJlIGEgbGl0dGxlIAorICAgICAgICAgIHRvICBzaW1pbGFy
bHkgbmFtZWQgdG8gdGhlIHRvRm9vKCkgZnVuY3Rpb25zLiBJbnN0ZWFkLCB0aGUgZ2VuZXJpYyAK
KyAgICAgICAgICBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPFQ+PiAob3IgaXQncyBjbGFt
cGluZyB2YXJpYW50cykgY2FuIGJlIHVzZWQKKyAgICAgICAgICB0byBjb252ZXJ0IGZyb20gQ29s
b3JDb21wb25lbnRzIHRvIGNvbG9yIHR5cGVzLgorCisgICAgICAgIC0gQWRkcyBBbHBoYVRyYWl0
cyB0byBtb2RlbCBhbHBoYSB2YWx1ZXMgYXMgdGhlc2UgYXJlIGNvbnNpc3RlbnQgYmV0d2Vlbgor
ICAgICAgICAgIGNvbG9yIHR5cGVzIGFuZCBvbmx5IGNoYW5nZSBiYXNlZCBvbiBjb21wb25lbnQg
dHlwZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRl
ZENTU09NUkdCQ29sb3IuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRo
cy5jcHA6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
OgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvckNvbnZlcnNpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVz
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvQ29s
b3JJT1MubW06CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAg
ICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwu
aDoKKwogMjAyMS0wMS0yMSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IEVuc3VyZSBjcmVhdGVTdHJlYW1zIGdldHMgdmFsaWQgSlNHbG9iYWxPYmplY3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBnY2hhciog
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXgKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9S
KQogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dHMoY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZl
cnRUbzxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAgICAgIHJl
dHVybiBnX3N0cmR1cF9wcmludGYoInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29sb3IucmVk
LCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjcxNjkwKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NDcsNyArMTQ0Nyw3IEBAIC0gKE5TU3RyaW5n
ICopYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmEKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAgICBhdXRv
IGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5j
b2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvPFNSR0JBPGZsb2F0
Pj4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAgICAgIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29s
b3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjcxNjkwKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzODUsNyArMjM4NSw3IEBAIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIEAoYmFja2luZ09i
amVjdC0+aXNTZWxlY3RlZCgpKTsKIAogICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNDb2xv
cldlbGwoKSkgewotICAgICAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEZs
b2F0cyhiYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICAgICAgYXV0byBjb2xv
ciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7
CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJyZ2IgJTcu
NWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWVdOwog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVj
YXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwcml2
YXRlOgogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkK
ICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQog
ICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQotICAg
ICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgY29udmVydFRvQ29tcG9uZW50Rmxv
YXQobV9jb2xvci5hbHBoYSkpKQorICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAJKHJldmlzaW9u
IDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBu
ZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFs
cGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBjbGFtcFRvQ29t
cG9uZW50Qnl0ZXMgd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+Lgor
ICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8dWludDhfdD4+
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9l
c24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9w
YXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3Ry
dWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50
YXguCkBAIC01MDUsNyArNTA1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKGN1
cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocmVkLCBncmVlbiwgYmx1ZSk7IC8v
IEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQsIGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRl
IHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50
OF90IGFuZCByZXBsYWNlIGNhbGwgdG8gY2xhbXBUb0NvbXBvbmVudEJ5dGVzIHdpdGggZGlyZWN0
IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KKyAgICAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PihyZWQsIGdyZWVuLCBibHVlKTsgLy8g
RklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUg
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4
X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1
aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAg
IH0KIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MSw3ICs2NzEsNyBAQCBzdGF0aWMgdWlu
dDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgCiAgICAgaWYgKGlzUGVyY2VudGFnZSkKICAg
ICAgICAgdmFsdWUgPSB2YWx1ZSAvIDEwMC4wICogMjU1LjA7CiAKLSAgICByZXR1cm4gY29udmVy
dFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnRQcmVz
Y2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFy
c2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtNzM5LDcgKzcz
OSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAgICAgfQotICAg
ICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpOworICAg
ICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oYWxwaGEp
OwogICAgIH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKQEAgLTc5NCw3ICs3OTQsNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgaWYgKCFhcmdzLmF0
RW5kKCkpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoSFNMQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsK
KyAgICByZXR1cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKEhTTEE8ZmxvYXQ+
IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxmbG9hdD4gcGFy
c2VPcHRpb25hbEFscGhhKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMjcx
NjkwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02MDEsNyArNjAxLDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6
ZGV0ZWN0Q29udGVudEluUgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9y
IHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9u
ZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgogICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5s
aWdodG5lc3MgPSAwLjVmOwogICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5hbHBoYSAqPSAw
LjM4ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBjb252
ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGEpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoaHNsYSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIENTU1ZhbHVlQ3VycmVudGNvbG9y
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yLCBzZXJpYWxpemF0aW9uRm9y
Q1NTKHVuZGVybGluZUNvbG9yKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHJldmlzaW9uIDI3MTY5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIC8vIE5vbi1zdGFu
ZGFyZCBsZWdhY3kgYWxpYXNlcyAoQ2FudmFzRmlsbFN0cm9rZVN0eWxlcykuCiAgICAgdW5kZWZp
bmVkIHNldFN0cm9rZUNvbG9yKERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVk
IGZsb2F0IGFscGhhKTsKLSAgICB1bmRlZmluZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVk
IGZsb2F0IGdyYXlMZXZlbCwgb3B0aW9uYWwgZmxvYXQgYWxwaGEgPSAxKTsKKyAgICB1bmRlZmlu
ZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwgb3B0aW9uYWwg
dW5yZXN0cmljdGVkIGZsb2F0IGFscGhhID0gMSk7CiAgICAgdW5kZWZpbmVkIHNldFN0cm9rZUNv
bG9yKHVucmVzdHJpY3RlZCBmbG9hdCByLCB1bnJlc3RyaWN0ZWQgZmxvYXQgZywgdW5yZXN0cmlj
dGVkIGZsb2F0IGIsIHVucmVzdHJpY3RlZCBmbG9hdCBhKTsKICAgICB1bmRlZmluZWQgc2V0Rmls
bENvbG9yKERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhh
KTsKICAgICB1bmRlZmluZWQgc2V0RmlsbENvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCBncmF5TGV2
ZWwsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSA9IDEpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MDMsNiArOTAzLDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpyZXNl
dAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdHJva2VDb2xvcihjb25z
dCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gYWxwaGEpCiB7CiAgICAgaWYgKGFscGhh
KSB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKCphbHBoYSkpCisgICAgICAgICAgICByZXR1cm47
CisKICAgICAgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdX
aXRoT3ZlcnJpZGVBbHBoYShjb2xvciwgYWxwaGEudmFsdWUoKSwgY2FudmFzQmFzZSgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MTcsNyArOTIwLDEwIEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3QKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewot
ICAgIGF1dG8gY29sb3IgPSBTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWws
IGFscGhhIH07CisgICAgaWYgKHN0ZDo6aXNuYW4oZ3JheUxldmVsKSB8fCBzdGQ6OmlzbmFuKGFs
cGhhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBjb2xvciA9IG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZl
bCwgYWxwaGEpOwogICAgIGlmIChzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudChjb2xv
cikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xv
cikpOwpAQCAtOTI1LDcgKzkzMSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldFN0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tl
Q29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBhdXRvIGNv
bG9yID0gU1JHQkEgeyByLCBnLCBiLCBhIH07CisgICAgaWYgKHN0ZDo6aXNuYW4ocikgfHwgc3Rk
Ojppc25hbihnKSB8fCBzdGQ6OmlzbmFuKGIpICB8fCBzdGQ6OmlzbmFuKGEpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JH
QkE8ZmxvYXQ+PihyLCBnLCBiLCBhKTsKICAgICBpZiAoc3RhdGUoKS5zdHJva2VTdHlsZS5pc0Vx
dWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0U3Ryb2tlU3R5bGUoQ2Fu
dmFzU3R5bGUoY29sb3IpKTsKQEAgLTkzNCw2ICs5NDMsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnNldFN0CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gYWxwaGEp
CiB7CiAgICAgaWYgKGFscGhhKSB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKCphbHBoYSkpCisg
ICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpj
cmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIGFscGhhLnZhbHVlKCksIGNh
bnZhc0Jhc2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTQ4LDcgKzk2MCwxMCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpCiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZlbCwgZmxv
YXQgYWxwaGEpCiB7Ci0gICAgYXV0byBjb2xvciA9IFNSR0JBIHsgZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAoc3RkOjppc25hbihncmF5TGV2ZWwpIHx8
IHN0ZDo6aXNuYW4oYWxwaGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0g
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5TGV2ZWwsIGdyYXlM
ZXZlbCwgZ3JheUxldmVsLCBhbHBoYSk7CiAgICAgaWYgKHN0YXRlKCkuZmlsbFN0eWxlLmlzRXF1
aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRGaWxsU3R5bGUoQ2FudmFz
U3R5bGUoY29sb3IpKTsKQEAgLTk1Niw3ICs5NzEsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRGaQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAg
IGF1dG8gY29sb3IgPSBTUkdCQSB7IHIsIGcsIGIsIGEgfTsKKyAgICBpZiAoc3RkOjppc25hbihy
KSB8fCBzdGQ6OmlzbmFuKGcpIHx8IHN0ZDo6aXNuYW4oYikgIHx8IHN0ZDo6aXNuYW4oYSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFt
cGluZzxTUkdCQTxmbG9hdD4+KHIsIGcsIGIsIGEpOwogICAgIGlmIChzdGF0ZSgpLmZpbGxTdHls
ZS5pc0VxdWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0RmlsbFN0eWxl
KENhbnZhc1N0eWxlKGNvbG9yKSk7CkBAIC0xMjg5LDYgKzEzMDcsOSBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnN0cm9rCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIs
IGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkKIHsKKyAg
ICBpZiAoYWxwaGEgJiYgc3RkOjppc25hbigqYWxwaGEpKQorICAgICAgICByZXR1cm47CisKICAg
ICBDb2xvciBjb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogICAgIGlmICghY29sb3JT
dHJpbmcuaXNOdWxsKCkpIHsKICAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yT3JDdXJyZW50Q29s
b3IoY29sb3JTdHJpbmcsIGNhbnZhc0Jhc2UoKSk7CkBAIC0xMzAwLDEyICsxMzIxLDE4IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwg
ZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzZXRTaGFk
b3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25lbnRCeXRl
cyhTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH0pKTsKKyAg
ICBpZiAoc3RkOjppc25hbihncmF5TGV2ZWwpIHx8IHN0ZDo6aXNuYW4oYWxwaGEpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVy
LCBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPGZsb2F0Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKSk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdp
ZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIs
IGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1
ciwgY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyByLCBnLCBiLCBhIH0pKTsKKyAgICBp
ZiAoc3RkOjppc25hbihyKSB8fCBzdGQ6OmlzbmFuKGcpIHx8IHN0ZDo6aXNuYW4oYikgIHx8IHN0
ZDo6aXNuYW4oYSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4obWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihyLCBnLCBiLCBhKSkpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI3MTY5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsNyArOTUsNyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3IgY29s
b3IpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTUkdCQTxmbG9hdD4mIGNv
bG9yQ29tcG9uZW50cykKLSAgICA6IG1fc3R5bGUoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29s
b3JDb21wb25lbnRzKSkKKyAgICA6IG1fc3R5bGUoY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pihj
b2xvckNvbXBvbmVudHMpKQogewogfQogCkBAIC0xNDgsNyArMTQ4LDcgQEAgYm9vbCBDYW52YXNT
dHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2
YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAgIHJldHVy
biBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xv
cj4obV9zdHlsZSkgPT0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29tcG9uZW50cyk7CisgICAg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6Z2V0
PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMp
OwogfQogCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKFJl
ZlB0cjxKU09OOjpPYmoKIAogICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUoUHJv
dG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKICAgICBpZiAoIWEpCi0gICAgICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOwotICAgIHJldHVybiBj
bGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGUoKmEpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiKTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmdFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4oKnIsICpnLCAqYiwgY29udmVydEZs
b2F0QWxwaGFUbzx1aW50OF90PigqYSkpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdD
b2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdPYmplY3Qp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZp
c2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgQ29sb3IgQ29sb3I6OmxpZ2h0ZW5l
ZCgpIGNvbnN0CiAKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptaW4oMS4wZiwgdiArIDAu
MzNmKSAvIHY7CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBt
dWx0aXBsaWVyICogciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOworICAg
IHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgbXVsdGlwbGllciAqIHIs
IG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKIH0KIAogQ29sb3IgQ29sb3I6
OmRhcmtlbmVkKCkgY29uc3QKQEAgLTEwNSw3ICsxMDUsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2Vu
ZWQoKSBjb25zdAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CiAKLSAgICBy
ZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBtdWx0aXBsaWVyICogciwgbXVs
dGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOworICAgIHJldHVybiBjb252ZXJ0VG88
U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgbXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBt
dWx0aXBsaWVyICogYiwgYSB9KTsKIH0KIAogZmxvYXQgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0
CkBAIC0xNDEsNyArMTQxLDE1IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBh
bHBoYSkKIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBj
b25zdAogewogICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShbJl0gKGNvbnN0IGF1dG8m
IHVuZGVybHlpbmdDb2xvcikgLT4gQ29sb3IgewotICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xv
cldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAgICAgICAgdXNp
bmcgQ29sb3JUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBlKHVuZGVybHlpbmdDb2xvcik+Owor
CisgICAgICAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBtZWFuaW5nZnVsIHVu
ZGVyc3RhbmRpbmcgb2YgaW52ZXJzaW9uIHRoYXQgd29ya3MKKyAgICAgICAgLy8gYmV0dGVyIGZv
ciBub24taW52ZXJ0aWJsZSBjb2xvciB0eXBlcyBsaWtlIExhYiBvciBjb25zaWRlciByZW1vdmlu
ZyB0aGlzIGluIGZhdm9yCisgICAgICAgIC8vIG9mIGFsdGVybmF0aXZlcy4KKyAgICAgICAgaWYg
Y29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCisgICAgICAgICAgICBy
ZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFs
cGhhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CiAgICAgfSk7
CiB9CiAKQEAgLTE1Nyw3ICsxNjUsNyBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21w
b25lbnRzPGZsCiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHsgYXNF
eHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OwotICAg
IHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRUb0Nv
bXBvbmVudEZsb2F0cyhhc0lubGluZSgpKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpT
UkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgp
KSkgfTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDggQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5k
ZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9CiAgICAgYm9v
bCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9Ci0gICAgdWludDhfdCBhbHBo
YUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRC
eXRlKGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KLSAgICBmbG9h
dCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA6IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5lKCkuYWxwaGEpOyB9
CisgICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBj
b252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5s
aW5lKCkuYWxwaGE7IH0KKyAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxm
bG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1
bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNv
bnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KQEAg
LTMzMSwxMSArMzMxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0
b1MKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwogICAgICAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUbzxTUkdCQTxmbG9hdD4+KGNvbG9yKTsKICAgICAgICAgfSwKICAgICAgICAgW10gKGNvbnN0
IGF1dG8mIGNvbG9yKSB7CiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PFQsIHVpbnQ4X3Q+KQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUbzxT
UkdCQTx1aW50OF90Pj4odG9TUkdCQShjb2xvcikpOwogICAgICAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRvU1JH
QkEoY29sb3IpOwogICAgICAgICB9CkBAIC0zOTEsMTUgKzM5MSwxNSBAQCBpbmxpbmUgdm9pZCBD
b2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8CiAKIGlubGluZSBib29sIENvbG9yOjppc0JsYWNr
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRl
cmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OmlzQmxhY2soY29sb3IpOworICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlw
ZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSB7CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjppc0JsYWNrKHVuZGVybHlpbmdDb2xvcik7CiAgICAgfSk7CiB9CiAKIGlubGluZSBib29s
IENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBj
b2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUoY29sb3IpOworICAgIHJldHVybiBjb2xvci5jYWxs
T25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSB7CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHVuZGVybHlpbmdDb2xvcik7CiAgICAgfSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
QmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJhY2tkCiAgICAgaW50IGcg
PSAoYmFja2Ryb3BHICogYmFja2Ryb3BBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3Vy
Y2VBICogc291cmNlRykgLyBkOwogICAgIGludCBiID0gKGJhY2tkcm9wQiAqIGJhY2tkcm9wQSAq
ICgweEZGIC0gc291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUIpIC8gZDsKIAotICAg
IHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIGEpOworICAgIHJl
dHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4ociwgZywgYiwg
YSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTc4
LDcgKzc4LDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogICAg
ICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywgYWxwaGEpOwogICAgICAgICBp
bnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEpOwogCi0gICAgICAgIHJlc3Vs
dCA9IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywgYiwgYWxwaGEpOworICAgICAg
ICByZXN1bHQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4ociwg
ZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYmIGIgPj0gMCkK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbG9yIGJsZW5kKGNvbnN0
IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gcHJl
bXVsdGlwbGllZENlaWxpbmcoZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKSk7CiAgICAgYXV0
byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyh0by50b1NSR0JBTG9zc3k8
dWludDhfdD4oKSk7CiAKLSAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gY2xhbXBUb0Nv
bXBvbmVudEJ5dGVzPFNSR0JBPigKKyAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8dWludDhfdD4+KAogICAgICAgICBXZWJDb3Jl
OjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5yZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIHByb2dy
ZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uZ3JlZW4sIHBy
ZW11bHRpcGxpZWRUby5ncmVlbiwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpibGVuZChw
cmVtdWx0aXBsaWVkRnJvbS5ibHVlLCBwcmVtdWx0aXBsaWVkVG8uYmx1ZSwgcHJvZ3Jlc3MpLApA
QCAtMTIwLDcgKzEyMCw3IEBAIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENv
bG8KICAgICBhdXRvIGZyb21TUkdCID0gZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICBhdXRvIHRvU1JHQiA9IHRvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJu
IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oCisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJv
bVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9u
LmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjggKzMyLDc0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dChmbG9hdCBjKQorLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgorLy8gaHR0
cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXgu
aHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhclNSR0JN
YXRyaXggeworICAgICAzLjI0MDQ1NDJmLCAtMS41MzcxMzg1ZiwgLTAuNDk4NTMxNGYsCisgICAg
LTAuOTY5MjY2MGYsICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKKyAgICAgMC4wNTU2NDM0Ziwg
LTAuMjA0MDI1OWYsICAxLjA1NzIyNTJmCit9OworCisvLyBodHRwczovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9TUkdCCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1s
P0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMs
IDM+IGxpbmVhclNSR0JUb1hZWk1hdHJpeCB7CisgICAgMC40MTI0NTY0ZiwgIDAuMzU3NTc2MWYs
ICAwLjE4MDQzNzVmLAorICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwK
KyAgICAwLjAxOTMzMzlmLCAgMC4xMTkxOTIwZiwgIDAuOTUwMzA0MWYKK307CisKKy8vIGh0dHBz
Oi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQorc3Rh
dGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJp
eCB7CisgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlmLCAtMC40
MDI3MTA3ODQ0NTA3MTY4ZiwKKyAgICAtMC44Mjk0ODg5Njk1NjE1NzQ3ZiwgIDEuNzYyNjY0MDYw
MzE4MzQ2M2YsICAwLjAyMzYyNDY4NTg0MTk0MzZmLAorICAgICAwLjAzNTg0NTgzMDI0Mzc4NDVm
LCAtMC4wNzYxNzIzODkyNjgwNDE4ZiwgIDAuOTU2ODg0NTI0MDA3Njg3MmYKK307CisKKy8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQor
c3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJEaXNwbGF5UDNUb1hZWk1h
dHJpeCB7CisgICAgMC40ODY1NzA5NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4x
OTgyMTcyODUyMzQzNjNmLAorICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAuNjkxNzM4NTIxODM2
NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKKyAgICAwLjBmLCAgICAgICAgICAgICAgICAwLjA0
NTExMzM4MTg1ODkwMjZmLCAxLjA0Mzk0NDM2ODkwMDk3NmYKK307CisKKy8vIGh0dHA6Ly93d3cu
YnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAorc3RhdGlj
IGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7CisgICAgIDAuOTU1
NTc2NmYsIC0wLjAyMzAzOTNmLCAwLjA2MzE2MzZmLAorICAgIC0wLjAyODI4OTVmLCAgMS4wMDk5
NDE2ZiwgMC4wMjEwMDc3ZiwKKyAgICAgMC4wMTIyOTgyZiwgLTAuMDIwNDgzMGYsIDEuMzI5OTA5
OGYKK307CisKKy8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFu
X0Nocm9tQWRhcHQuaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENjVU
b0Q1ME1hdHJpeCB7CisgICAgIDEuMDQ3ODExMmYsIDAuMDIyODg2NmYsIC0wLjA1MDEyNzBmLAor
ICAgICAwLjAyOTU0MjRmLCAwLjk5MDQ4NDRmLCAtMC4wMTcwNDkxZiwKKyAgICAtMC4wMDkyMzQ1
ZiwgMC4wMTUwNDM2ZiwgIDAuNzUyMTMxNmYKK307CisKK2Zsb2F0IGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnRDbGFtcGluZyhmbG9hdCBjKQogewogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKLSAg
ICAgICAgcmV0dXJuIDEyLjkyZiAqIGM7CisgICAgICAgIHJldHVybiBzdGQ6Om1heDxmbG9hdD4o
MTIuOTJmICogYywgMCk7CiAKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oMS4wNTVmICogc3Rk
Ojpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4wNTVmLCAwLCAxKTsKIH0KIAotZmxvYXQgcmdiVG9M
aW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQorZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBv
bmVudENsYW1waW5nKGZsb2F0IGMpCiB7CiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCi0gICAgICAg
IHJldHVybiBjIC8gMTIuOTJmOworICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KGMgLyAx
Mi45MmYsIDApOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsgMC4w
NTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCisvLyBHYW1tYSBjb252ZXJzaW9ucy4K
KwogTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50
KGNvbG9yLnJlZCksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuZ3Jl
ZW4pLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAg
ICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwKKyAgICAg
ICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwKKyAgICAg
ICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAogICAgICAg
ICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBAIC02MSw5ICsxMDcsOSBAQCBMaW5lYXJTUkdCQTxm
bG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBM
aW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFyVG9SR0JDb2xv
ckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25l
bnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRDbGFtcGlu
Zyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmco
Y29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmco
Y29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTcxLDkgKzEx
Nyw5IEBAIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGYKIExpbmVhckRp
c3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYg
Y29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmdy
ZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVlKSwKKyAg
ICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCksCisgICAg
ICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiksCisgICAg
ICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwKICAgICAg
ICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtODEsODEgKzEyNyw0OSBAQCBMaW5lYXJEaXNw
bGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzCiBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxh
eVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7
Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRv
UkdCQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29t
cG9uZW50Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29t
cG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsK
IH0KIAorLy8gTWF0cml4IGNvbnZlcnNpb25zLgorCiBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5l
YXJTUkdCQShjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvU1JHQgotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20u
Y29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKLSAgICBjb25zdGV4cHIgQ29s
b3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKLSAgICAgICAgIDMuMjQwNDU0
MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1MzE0ZiwKLSAgICAgICAgLTAuOTY5MjY2MGYsICAxLjg3
NjAxMDhmLCAgMC4wNDE1NTYwZiwKLSAgICAgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAyNTlmLCAg
MS4wNTcyMjUyZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyU1JHQkEoeHl6VG9MaW5lYXJT
UkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhh
PExpbmVhclNSR0JBPGZsb2F0Pj4oeHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29s
b3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBYWVpBPGZsb2F0
PiB0b1hZWkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAvLyBodHRw
czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCCi0gICAgLy8gaHR0cDovL3d3dy5icnVjZWxp
bmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAotICAgIGNvbnN0
ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggewotICAgICAgICAw
LjQxMjQ1NjRmLCAgMC4zNTc1NzYxZiwgIDAuMTgwNDM3NWYsCi0gICAgICAgIDAuMjEyNjcyOWYs
ICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwKLSAgICAgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTky
MGYsICAwLjk1MDMwNDFmCi0gICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhclNSR0JUb1hZ
Wk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpKTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxY
WVpBPGZsb2F0Pj4obGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBMaW5lYXJEaXNwbGF5UDM8Zmxv
YXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNv
ZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJEaXNwbGF5UDNN
YXRyaXggewotICAgICAgICAgMi40OTM0OTY5MTE5NDE0MjVmLCAgLTAuOTMxMzgzNjE3OTE5MTIz
OWYsIC0wLjQwMjcxMDc4NDQ1MDcxNjhmLAotICAgICAgICAtMC44Mjk0ODg5Njk1NjE1NzQ3Ziwg
IDEuNzYyNjY0MDYwMzE4MzQ2M2YsICAwLjAyMzYyNDY4NTg0MTk0MzZmLAotICAgICAgICAgMC4w
MzU4NDU4MzAyNDM3ODQ1ZiwgLTAuMDc2MTcyMzg5MjY4MDQxOGYsICAwLjk1Njg4NDUyNDAwNzY4
NzJmCi0gICAgfTsKLSAgICByZXR1cm4gYXNMaW5lYXJEaXNwbGF5UDMoeHl6VG9MaW5lYXJEaXNw
bGF5UDNNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpKSk7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxw
aGE8TGluZWFyRGlzcGxheVAzPGZsb2F0Pj4oeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAK
IFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikK
IHsKLSAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252
ZXJzaW9uLWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxh
eVAzVG9YWVpNYXRyaXggewotICAgICAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5
MzE2OTA5MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCi0gICAgICAgIDAuMjI4OTc0NTY0MDY5NzQ4
OGYsIDAuNjkxNzM4NTIxODM2NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKLSAgICAgICAgMC4w
ZiwgICAgICAgICAgICAgICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZm
Ci0gICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAg
IHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+
PihsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gQ2hyb21hdGljIEFkYXB0YXRpb24g
Y29udmVyc2lvbnMuCisKIHN0YXRpYyBYWVpBPGZsb2F0PiBjb252ZXJ0RnJvbUQ1MFdoaXRlUG9p
bnRUb0Q2NVdoaXRlUG9pbnQoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0
dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRt
bAotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7Ci0gICAg
ICAgICAwLjk1NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKLSAgICAgICAgLTAuMDI4
Mjg5NWYsICAxLjAwOTk0MTZmLCAwLjAyMTAwNzdmLAotICAgICAgICAgMC4wMTIyOTgyZiwgLTAu
MDIwNDgzMGYsIDEuMzI5OTA5OGYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEoRDUwVG9ENjVN
YXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3Ip
KSk7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8WFla
QTxmbG9hdD4+KEQ1MFRvRDY1TWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBzdGF0aWMgWFlaQTxmbG9hdD4gY29udmVydEZy
b21ENjVXaGl0ZVBvaW50VG9ENTBXaGl0ZVBvaW50KGNvbnN0IFhZWkE8ZmxvYXQ+JiBjb2xvcikK
IHsKLSAgICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9D
aHJvbUFkYXB0Lmh0bWwKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gRDY1VG9ENTBN
YXRyaXggewotICAgICAgICAgMS4wNDc4MTEyZiwgMC4wMjI4ODY2ZiwgLTAuMDUwMTI3MGYsCi0g
ICAgICAgICAwLjAyOTU0MjRmLCAwLjk5MDQ4NDRmLCAtMC4wMTcwNDkxZiwKLSAgICAgICAgLTAu
MDA5MjM0NWYsIDAuMDE1MDQzNmYsICAwLjc1MjEzMTZmCi0gICAgfTsKLSAgICByZXR1cm4gYXNY
WVpBKEQ2NVRvRDUwTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4
Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENjVUb0Q1ME1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gTGFiIGNvbnZlcnNp
b25zLgorCiBzdGF0aWMgY29uc3RleHByIGZsb2F0IExBQmUgPSAyMTYuMGYgLyAyNDM4OS4wZjsK
IHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgTEFCayA9IDI0Mzg5LjBmIC8gMjcuMGY7CiBzdGF0aWMg
Y29uc3RleHByIGZsb2F0IEQ1MFdoaXRlVmFsdWVzW10gPSB7IDAuOTY0MjJmLCAxLjBmLCAwLjgy
NTIxZiB9OwpAQCAtMjIxLDYgKzIzNSw5IEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgWFlaQTxm
bG9hdD4mIGNvbG8KICAgICByZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGNvbG9yV2l0aEQ1MFdo
aXRlUG9pbnQuYWxwaGEgfTsKIH0KIAorCisvLyBMQ0ggY29udmVyc2lvbnMuCisKIExDSEE8Zmxv
YXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI2xhYi10by1sY2gKQEAgLTI0Nyw2ICsyNjQsOCBAQCBM
YWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvCiAgICAgfTsKIH0KIAorLy8g
SFNMIGNvbnZlcnNpb25zLgorCiBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKIHsKICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xv
cl9zcGFjZS4KQEAgLTMzMiw2ICszNTEsOCBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBI
U0xBPGZsb2F0PiYgCiAgICAgfTsKIH0KIAorLy8gQ01ZSyBjb252ZXJzaW9ucy4KKwogU1JHQkE8
ZmxvYXQ+IHRvU1JHQkEoY29uc3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBhdXRvIFtj
LCBtLCB5LCBrLCBhXSA9IGNvbG9yOwpAQCAtMzU2LDYgKzM3Nyw5IEBAIENNWUtBPGZsb2F0PiB0
b0NNWUtBKGNvbnN0IFNSR0JBPGZsb2F0PiYKICAgICByZXR1cm4geyBjLCBtLCB5LCBrLCBhIH07
CiB9CiAKKworLy8gQ29tYmluYXRpb24gY29udmVyc2lvbnMgKGNvbnN0cnVjdGVkIGZyb20gbW9y
ZSBiYXNpYyBjb252ZXJzaW9ucyBhYm92ZSkuCisKIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBT
UkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJTUkdCQShj
b2xvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JDb252ZXJzaW9uLmgJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5
ICszMCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoZXNlIGFyZSB0aGUgc3RhbmRh
cmQgc1JHQiA8LT4gTGluZWFyUkdCIC8gRGlzcGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29u
dmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgot
ZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7Ci1mbG9hdCByZ2JUb0xpbmVh
ckNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLQorZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dENsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGlu
ZyhmbG9hdCk7CiAKIC8vIEFsbCBjb2xvciB0eXBlcyBtdXN0IGF0IGxlYXN0IGltcGxlbWVudCB0
aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zIHRvIGFuZCBmcm9tIHRoZSBYWVpBIGNvbG9yIHNwYWNl
OgogLy8gICAgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4mKTsKQEAg
LTU2LDQyICs1NSwzNiBAQCBXRUJDT1JFX0VYUE9SVCBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5l
CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYpOwogCi0KIC8vIERpc3BsYXlQMwogV0VCQ09SRV9FWFBPUlQg
WFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQ
T1JUIERpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8v
IEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVh
ckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLQogLy8gTGluZWFyRGlzcGxh
eVAzCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGluZWFyRGlzcGxh
eVAzPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xp
bmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25zCiBXRUJDT1JF
X0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQ
MzxmbG9hdD4mKTsKIAotCiAvLyBMYWIKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFla
QShjb25zdCBMYWI8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBMYWI8ZmxvYXQ+IHRvTGFiKGNv
bnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExDSEE8Zmxv
YXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+Jik7CiAKLQogLy8gTENIQQogV0VCQ09SRV9FWFBP
UlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExDSEE8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9S
VCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwog
V0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBMQ0hBPGZsb2F0PiYpOwogCi0K
IC8vIEhTTEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBIU0xBPGZs
b2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFhZWkE8Zmxv
YXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JB
KGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKLQogLy8gQ01ZS0EKIFdFQkNPUkVfRVhQT1JUIFhZWkE8
ZmxvYXQ+IHRvWFlaQShjb25zdCBDTVlLQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIENNWUtB
PGZsb2F0PiB0b0NNWUtBKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNzE2OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDE4ICszMSwyMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IENvbXBvbmVudFRyYWl0czsKK3RlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgQWxwaGFUcmFpdHM7CiAKLXRlbXBsYXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0
czx1aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1pblZhbHVlID0gMDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBBbHBoYVRyYWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
OF90IHRyYW5zcGFyZW50ID0gMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qgb3BhcXVl
ID0gMjU1OwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPGZsb2F0PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBtaW5WYWx1ZSA9IDAuMGY7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBmbG9hdCBtYXhWYWx1ZSA9IDEuMGY7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBbHBo
YVRyYWl0czxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgdHJhbnNwYXJlbnQg
PSAwLjBmOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgb3BhcXVlID0gMS4wZjsKIH07CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvckNvbXBvbmVudFJhbmdlIHsKKyAgICBU
IG1pbjsKKyAgICBUIG1heDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9k
ZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExhYk1vZGVsOwordGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBMQ0hNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFNMTW9kZWw7
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENNWUtNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgWFlaTW9kZWw7CisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3Q+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTx1
aW50OF90PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIDI1NSB9LAorICAgICAgICB7IDAs
IDI1NSB9LAorICAgICAgICB7IDAsIDI1NSB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdC
TW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21w
b25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAxIH0sCisgICAg
ICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IExhYk1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9y
Q29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAtc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9CisgICAg
fSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7
CisgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwK
KyAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAor
ICAgICAgICB7IDAsIDM2MCB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0ludmVydGlibGUgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhTTE1vZGVsPGZs
b2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFu
Z2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMzYwIH0sCisgICAgICAgIHsg
MCwgMTAwIH0sCisgICAgICAgIHsgMCwgMTAwIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
TVlLTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JD
b21wb25lbnRSYW5nZTxmbG9hdD4sIDQ+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAxIH0sCisg
ICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAwLCAxIH0KKyAg
ICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsg
eworICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9Cisg
ICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHBy
IENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBj
KQoreworICAgIHJldHVybiBDb2xvclR5cGUgeyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdW5zaWduZWQgSW5kZXgsIHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBhdXRvIGNsYW1wZWRDb21wb25lbnQoVCBjKSAtPiB0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGUKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdy
YWxfdjxUPik7CisKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZSA9IENvbG9yVHlwZTo6TW9kZWw6
OnJhbmdlc1tJbmRleF07CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXA8VD4oYywgcmFuZ2UubWluLCBy
YW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHVuc2lnbmVkIElu
ZGV4PiBjb25zdGV4cHIgZmxvYXQgY2xhbXBlZENvbXBvbmVudChmbG9hdCBjKQoreworICAgIGNv
bnN0ZXhwciBhdXRvIHJhbmdlID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzW0luZGV4XTsKKwor
ICAgIGlmIGNvbnN0ZXhwciAocmFuZ2UubWluID09IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKSAmJiByYW5nZS5tYXggPT0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCkpCisgICAgICAgIHJldHVybiBjOworCisgICAgaWYgY29uc3RleHByIChyYW5n
ZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAg
ICByZXR1cm4gc3RkOjptaW4oYywgcmFuZ2UubWF4KTsKKworICAgIGlmIGNvbnN0ZXhwciAocmFu
Z2UubWF4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAg
ICByZXR1cm4gc3RkOjptYXgoYywgcmFuZ2UubWluKTsKKworICAgIHJldHVybiBzdGQ6OmNsYW1w
KGMsIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlLCB1bnNpZ25lZCBJbmRleCwgdHlwZW5hbWUgVD4gY29uc3RleHByIFQgY2xhbXBlZENvbXBv
bmVudChjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJuIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCBJbmRleD4oY1tJbmRleF0pOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBDb21wb25lbnRUeXBlID0gVD4gY29uc3RleHByIENvbXBvbmVudFR5
cGUgY2xhbXBlZEFscGhhKFQgYWxwaGEpCit7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXA8VD4oYWxw
aGEsIEFscGhhVHJhaXRzPENvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgQWxwaGFUcmFpdHM8
Q29tcG9uZW50VHlwZT46Om9wYXF1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBjbGFtcGVkQ29tcG9u
ZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMpCit7CisgICAgcmV0dXJu
IHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGNvbXBvbmVudHMpLAor
ICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oY29tcG9uZW50cyksCisgICAg
ICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjb21wb25lbnRzKSwKKyAgICAgICAg
Y2xhbXBlZEFscGhhKGNvbXBvbmVudHNbM10pCisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGNs
YW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21w
b25lbnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JU
eXBlLCAwPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUs
IDE+KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4o
Y29tcG9uZW50cyksCisgICAgICAgIGNvbXBvbmVudHNbM10KKyAgICB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25l
bnRzKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjbGFtcGVk
Q29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nKFQgYzEsIFQgYzIsIFQgYzMpCit7CisgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAxPihjMiksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihj
MyksCisgICAgICAgIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlw
ZT46Om9wYXF1ZQorICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmco
VCBjMSwgVCBjMiwgVCBjMywgVCBhbHBoYSkKK3sKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25l
bnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVu
dDxDb2xvclR5cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUs
IDE+KGMyKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGMzKSwKKyAg
ICAgICAgY2xhbXBlZEFscGhhPFQsIHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4o
YWxwaGEpCisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2Vw
dEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNFeGNlcHRB
bHBoYTxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9yVHlwZSBt
YWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKFQgYzEsIFQgYzIsIFQgYzMsIEFs
cGhhIGFscGhhKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihD
b2xvckNvbXBvbmVudHMgeworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4o
YzEpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLAorICAgICAg
ICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLAorICAgICAgICBhbHBoYQorICAg
IH0pOworfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUIGNvbG9yKQoreworICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KSB7CisgICAg
ICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShjb21wb25lbnRzW2ldID49IFQ6Ok1vZGVsOjpyYW5nZXNbaV0ubWluLCAiQ29t
cG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWlu
aW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6cmFuZ2VzW2ldLm1pbik7Cisg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbaV0gPD0gVDo6TW9kZWw6
OnJhbmdlc1tpXS5tYXgsICJDb21wb25lbnQgYXQgaW5kZXggJWQgaXMgJWYgYW5kIGlzIGdyZWF0
ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVtICVmIiwgaSwgIGNvbXBvbmVudHNbaV0sIFQ6Ok1v
ZGVsOjpyYW5nZXNbaV0ubWF4KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+
Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQg
bWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJhaXRzPHR5cGVu
YW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50
VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4gdGhlIGFsbG93
ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0czx0eXBlbmFt
ZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAgICB9Cit9CisKKyNlbHNlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoVCkKK3sKK30KKwor
I2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25z
dGV4cHIgYm9vbCBIYXNDb2xvclNwYWNlTWVtYmVyID0gZmFsc2U7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29sb3JTcGFjZU1lbWJlcjxULCBzdGQ6OnZv
aWRfdDxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VD4oKS5jb2xvclNwYWNlKT4+ID0gdHJ1ZTsKIApA
QCAtNzQsMTggKzI3MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xv
cldpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdCQSA6IENvbG9yV2l0aEFscGhh
SGVscGVyPFNSR0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwotCi0gICAg
Y29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBDb21wb25l
bnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpTUkdCIH07
CisgICAgCisgICAgY29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxw
aGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJlZCB9CiAgICAg
ICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAs
IGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAg
ICAgfQogCiAgICAgY29uc3RleHByIFNSR0JBKCkKLSAgICAgICAgOiBTUkdCQSB7IENvbXBvbmVu
dFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBv
bmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQor
ICAgICAgICA6IFNSR0JBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMTAwLDEx
ICszMDAsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAg
cmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQShjb25zdCBDb2xvckNvbXBv
bmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9Owot
fQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNSR0JBPFQ+JiBhLCBjb25zdCBTUkdCQTxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0xMTgsMTggKzMxMywyMCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPExpbmVh
clNSR0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9k
ZWwgPSBSR0JNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OkxpbmVhclJHQjsKIAotICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdCQShUIHJl
ZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1
ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBh
bHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAg
ICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAg
ICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsK
ICAgICB9CiAKICAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEoKQotICAgICAgICA6IExpbmVhclNS
R0JBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
aW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+
OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGluZWFyU1JHQkEgeyAwLCAwLCAwLCAwIH0KICAgICB7
CiAgICAgfQogCkBAIC0xNDQsMTEgKzM0MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFs
cGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJTUkdCQTxU
PiBhc0xpbmVhclNSR0JBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1
cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyU1JHQkE8VD4mIGEsIGNvbnN0
IExpbmVhclNSR0JBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9
PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTE2MiwxOCArMzU0LDIwIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IERpc3BsYXlQMyA6IENvbG9yV2l0aEFscGhhSGVscGVyPERpc3BsYXlQMzxUPj4gewogICAg
IHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpEaXNw
bGF5UDM7CiAKLSAgICBjb25zdGV4cHIgRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUs
IFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBE
aXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+
OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVu
IH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAg
ICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4
cHIgRGlzcGxheVAzKCkKLSAgICAgICAgOiBEaXNwbGF5UDMgeyBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBE
aXNwbGF5UDMgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0xODgsMTEgKzM4Miw2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4g
eyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBEaXNwbGF5UDM8VD4gYXNEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxUPiYgYikKIHsKICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yMDYsMTcg
KzM5NSwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDMgOiBDb2xvcldpdGhBbHBo
YUhlbHBlcjxMaW5lYXJEaXNwbGF5UDM8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0g
VDsKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1vZGVsPFQ+OwogCi0gICAgY29uc3RleHByIExpbmVh
ckRpc3BsYXlQMyhUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJh
aXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKFQgcmVkLCBU
IGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAg
ICA6IHJlZCB7IHJlZCB9CiAgICAgICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1
ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIExpbmVhckRpc3BsYXlQ
MygpCi0gICAgICAgIDogTGluZWFyRGlzcGxheVAzIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5W
YWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
aW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGluZWFy
RGlzcGxheVAzIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjMxLDExICs0MjIs
NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJu
IHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzPFQ+IGFzTGluZWFyRGlzcGxheVAzKGNv
bnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBj
WzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPT0oY29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBhLCBjb25zdCBMaW5lYXJEaXNwbGF5
UDM8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JD
b21wb25lbnRzKGIpOwpAQCAtMjQ5LDE4ICs0MzUsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGFiIDog
Q29sb3JXaXRoQWxwaGFIZWxwZXI8TGFiPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9
IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBMYWJNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHBy
IGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkxhYjsKIAotICAgIGNvbnN0ZXhwciBMYWIo
VCBsaWdodG5lc3MsIFQgYSwgVCBiLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhW
YWx1ZSkKKyAgICBjb25zdGV4cHIgTGFiKFQgbGlnaHRuZXNzLCBUIGEsIFQgYiwgVCBhbHBoYSA9
IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogbGlnaHRuZXNzIHsgbGlnaHRuZXNz
IH0KICAgICAgICAgLCBhIHsgYSB9CiAgICAgICAgICwgYiB7IGIgfQogICAgICAgICAsIGFscGhh
IHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQog
CiAgICAgY29uc3RleHByIExhYigpCi0gICAgICAgIDogTGFiIHsgQ29tcG9uZW50VHJhaXRzPFQ+
OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRz
PFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDog
TGFiIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjc1LDExICs0NjMsNiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5s
aWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBMYWI8VD4gYXNMYWIoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewot
ICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYWI8VD4mIGEsIGNvbnN0
IExhYjxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xv
ckNvbXBvbmVudHMoYik7CkBAIC0yOTMsMTcgKzQ3NiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hB
IDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TENIQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5
cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gTENITW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIg
TENIQShUIGxpZ2h0bmVzcywgVCBjaHJvbWEsIFQgaHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJh
aXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTENIQShUIGxpZ2h0bmVzcywgVCBjaHJv
bWEsIFQgaHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiBs
aWdodG5lc3MgeyBsaWdodG5lc3MgfQogICAgICAgICAsIGNocm9tYSB7IGNocm9tYSB9CiAgICAg
ICAgICwgaHVlIHsgaHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAg
ICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBMQ0hBKCkK
LSAgICAgICAgOiBMQ0hBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50
VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9u
ZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTENIQSB7IDAsIDAsIDAsIDAgfQog
ICAgIHsKICAgICB9CiAKQEAgLTMxOCwxMSArNTAzLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwg
Yy5odWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExD
SEE8VD4gYXNMQ0hBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4g
eyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTENIQTxUPiYgYSwgY29uc3QgTENIQTxUPiYg
YikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVu
dHMoYik7CkBAIC0zMzYsMTcgKzUxNiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIDogQ29sb3JX
aXRoQWxwaGFIZWxwZXI8SFNMQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOwor
ICAgIHVzaW5nIE1vZGVsID0gSFNMTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgSFNMQShUIGh1
ZSwgVCBzYXR1cmF0aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxU
Pjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIEhTTEEoVCBodWUsIFQgc2F0dXJhdGlvbiwgVCBs
aWdodG5lc3MsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGh1
ZSB7IGh1ZSB9CiAgICAgICAgICwgc2F0dXJhdGlvbiB7IHNhdHVyYXRpb24gfQogICAgICAgICAs
IGxpZ2h0bmVzcyB7IGxpZ2h0bmVzcyB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAg
eworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIg
SFNMQSgpCi0gICAgICAgIDogSFNMQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENv
bXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUs
IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IEhTTEEgeyAwLCAwLCAw
LCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0zNjMsMTEgKzU0NSw2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmh1ZSwgYy5zYXR1cmF0
aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgSFNMQTxUPiBhc0hTTEEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewot
ICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIU0xBPFQ+JiBhLCBjb25z
dCBIU0xBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0Nv
bG9yQ29tcG9uZW50cyhiKTsKQEAgLTM4Miw4ICs1NTksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyCiAvLyBGSVhNRTogV2hlbiBDb2xvckNvbXBvbmVudHMgc3Vw
cG9ydHMgbW9yZSB0aGFuIGxlbmd0aCA9PSA0LCBhZGQgY29udmVyc2lvbiB0by9mcm9tIENvbG9y
Q29tcG9uZW50czxUPiBmb3IgQ01ZS0EKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDTVlL
QSA6IENvbG9yV2l0aEFscGhhSGVscGVyPENNWUtBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50
VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBDTVlLTW9kZWw8VD47CiAKLSAgICBjb25zdGV4
cHIgQ01ZS0EoVCBjeWFuLCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0g
Q29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgQ01ZS0EoVCBjeWFu
LCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46
Om9wYXF1ZSkKICAgICAgICAgOiBjeWFuIHsgY3lhbiB9CiAgICAgICAgICwgbWFnZW50YSB7IG1h
Z2VudGEgfQogICAgICAgICAsIHllbGxvdyB7IHllbGxvdyB9CkBAIC0zOTMsNyArNTcxLDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIDogQ29sbwogICAgIH0KIAogICAgIGNv
bnN0ZXhwciBDTVlLQSgpCi0gICAgICAgIDogQ01ZS0EgeyBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBDTVlLQSB7IDAsIDAsIDAsIDAsIDAgfQogICAgIHsK
ICAgICB9CiAKQEAgLTQxNywxNyArNTk1LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFhZWkEgOiBDb2xv
cldpdGhBbHBoYUhlbHBlcjxYWVpBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7
CisgICAgdXNpbmcgTW9kZWwgPSBYWVpNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBYWVpBKFQg
eCwgVCB5LCBUIHosIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAg
IGNvbnN0ZXhwciBYWVpBKFQgeCwgVCB5LCBUIHosIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6
b3BhcXVlKQogICAgICAgICA6IHggeyB4IH0KICAgICAgICAgLCB5IHsgeSB9CiAgICAgICAgICwg
eiB7IHogfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0
SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIFhZWkEoKQotICAgICAgICA6
IFhZWkEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBYWVpBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAg
IH0KIApAQCAtNDQyLDExICs2MjIsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Q29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgWFlaQTxUPiBhc1hZWkEoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBYWVpBPFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTQ1NywyMSArNjMyLDIy
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKICAgICByZXR1cm4g
IShhID09IGIpOwogfQogCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+
IGNvbnN0ZXhwciBkZWNsdHlwZShhdXRvKSBjYWxsV2l0aENvbG9yVHlwZShjb25zdCBDb2xvckNv
bXBvbmVudHM8VD4mIGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRnVuY3RvciYm
IGZ1bmN0b3IpCiB7CiAgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNw
YWNlOjpTUkdCOgotICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0
b3I+KGZ1bmN0b3IpLCBhc1NSR0JBKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRz
PFNSR0JBPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6
Ci0gICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIGFzTGluZWFyU1JHQkEoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8TGlu
ZWFyU1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSwgYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8RGlz
cGxheVAzPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpMYWI6Ci0gICAg
ICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFz
TGFiKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPExhYjxUPj4oY29tcG9uZW50
cykpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6
Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzU1JHQkEoY29tcG9uZW50
cykpOworICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTxUPj4oY29tcG9uZW50cykpOwogfQogCiAvLyBQ
YWNrZWQgQ29sb3IgRm9ybWF0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9v
cmluZyhTUkcKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1
NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0
ZXM8U1JHQkE+KGZhc3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVCeTI1NShnICogYSks
IGZhc3REaXZpZGVCeTI1NShiICogYSksIGEpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRlQnkyNTUociAq
IGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBhKTsK
IH0KIAogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4g
Y29sb3IpCkBAIC04OCw3ICs4OCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWls
aW5nKFNSR0IKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1
NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0
ZXM8U1JHQkE+KGZhc3REaXZpZGVCeTI1NShyICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShn
ICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShiICogYSArIDI1NCksIGEpOworICAgIHJldHVy
biBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+Pihm
YXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQp
LCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKIH0KIAogc3RhdGljIGlubGluZSB1
aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHVpbnQ4X3QgYywgdWludDhfdCBh
KQpAQCAtMTAxLDcgKzEwMSw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGllZChTUkdC
QTx1aW4KICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwogICAgIGlmICghYSB8fCBhID09
IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50
Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVs
dGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUo
YiwgYSksIGEpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFs
cGhhPFNSR0JBPHVpbnQ4X3Q+Pih1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHIsIGEpLCB1
bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25l
bnRCeXRlKGIsIGEpLCBhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShy
ZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMiArNDUsMTQgQEAgU1JHQkE8dWlu
dDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlw
bGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4pOwogU1JHQkE8dWludDhfdD4gdW5wcmVtdWx0aXBs
aWVkKFNSR0JBPHVpbnQ4X3Q+KTsKIAotdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25l
bnRCeXRlKGZsb2F0KTsKK3VpbnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JB
Qnl0ZShmbG9hdCk7CiAKLXVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCk7Ci1j
b25zdGV4cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRCeXRlQWxwaGFUbyh1aW50OF90KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgY29udmVydEZsb2F0QWxwaGFUbyhmbG9hdCk7CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciB1aW50OF90IGNsYW1wVG9Db21wb25lbnRCeXRl
KENvbXBvbmVudFR5cGUpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29uc3Rl
eHByIGZsb2F0IGNsYW1wVG9Db21wb25lbnRGbG9hdChDb21wb25lbnRUeXBlKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvKHVpbnQ4X3QpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbyhmbG9hdCk7Ci0KLXRlbXBs
YXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZTx1aW50
OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+Jik7Ci10
ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIg
Q29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBl
PHVpbnQ4X3Q+Jik7Ci0KLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWlu
dDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKENvbXBvbmVudFR5cGUuLi4pOwotdGVtcGxhdGU8
dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4gQ29tcG9u
ZW50VHlwZT4gY29uc3RleHByIENvbG9yVHlwZTxmbG9hdD4gY2xhbXBUb0NvbXBvbmVudEZsb2F0
cyhDb21wb25lbnRUeXBlLi4uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IFQg
Y29udmVydFRvKGNvbnN0IFUmKTsKK3RlbXBsYXRlPD4gU1JHQkE8ZmxvYXQ+IGNvbnZlcnRUbyhj
b25zdCBTUkdCQTx1aW50OF90PiYpOwordGVtcGxhdGU8PiBTUkdCQTx1aW50OF90PiBjb252ZXJ0
VG8oY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNv
bXBvbmVudChjb25zdCBDb2xvclR5cGUmLCBGdW5jdG9yJiYpOwogCkBAIC03MCw3OCArNjIsNjEg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgYwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBD
b2xvclR5cGUmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKK2NvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3Qg
TGFiPGZsb2F0PiYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIFJH
Qk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+PiogPSBudWxscHRyPgor
Y29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKKworY29uc3RleHByIGJv
b2wgaXNXaGl0ZShjb25zdCBMYWI8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj4+KiA9IG51bGxwdHI+Citjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYp
OwogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QpOwogY29u
c3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKIAotaW5saW5lIHVp
bnQ4X3QgY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewotICAgIHJl
dHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYpLCAwbCwgMjU1bCk7Ci19Ci0KLWlubGluZSB1
aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKLXsKLSAgICByZXR1cm4gc3Rk
OjpjbGFtcChzdGQ6Omxyb3VuZChmICogMjU1LjBmKSwgMGwsIDI1NWwpOwotfQotCi1jb25zdGV4
cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCBieXRlKQoraW5saW5lIHVp
bnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZShmbG9hdCB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gYnl0ZSAvIDI1NS4wZjsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6
Omxyb3VuZCh2YWx1ZSksIDBsLCAyNTVsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9u
ZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xhbXBUb0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50
VHlwZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4o
Y29tcG9uZW50LCAwLCAyNTUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb21wb25lbnRUeXBl
PiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVudFR5cGUgY29t
cG9uZW50KQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wPENvbXBvbmVudFR5cGU+KGNvbXBvbmVu
dCwgMCwgMSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3RleHByIHVpbnQ4X3QgY29udmVydENvbXBv
bmVudEJ5dGVUbzx1aW50OF90Pih1aW50OF90IHZhbHVlKQordGVtcGxhdGU8PiBjb25zdGV4cHIg
dWludDhfdCBjb252ZXJ0Qnl0ZUFscGhhVG88dWludDhfdD4odWludDhfdCB2YWx1ZSkKIHsKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPD4gY29uc3RleHByIGZsb2F0IGNvbnZlcnRD
b21wb25lbnRCeXRlVG88ZmxvYXQ+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNvbnN0ZXhw
ciBmbG9hdCBjb252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+KHVpbnQ4X3QgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWUg
LyAyNTUuMGY7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIHVpbnQ4X3QgY29udmVydENvbXBvbmVu
dEZsb2F0VG88dWludDhfdD4oZmxvYXQgdmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSB1aW50OF90
IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oZmxvYXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0
ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0ZTw+IGlu
bGluZSBmbG9hdCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4oZmxvYXQgdmFsdWUpCit0
ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252ZXJ0RmxvYXRBbHBoYVRvPGZsb2F0PihmbG9hdCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEZsb2F0KHZhbHVlKTsKKyAgICBy
ZXR1cm4gY2xhbXBlZEFscGhhKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5h
bWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3RlbXBsYXRl
PD4gaW5saW5lIFNSR0JBPGZsb2F0PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8dWludDhfdD4mIGNv
bG9yKQogewotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsK
LSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMF0pLCBjb252
ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbM10pIH07
Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUZsb2F0ID0gW10odWludDhfdCB2YWx1ZSkgLT4g
ZmxvYXQgeworICAgICAgICByZXR1cm4gdmFsdWUgLyAyNTUuMGY7CisgICAgfTsKIAotdGVtcGxh
dGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
VHlwZTxmbG9hdD4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbnN0IENvbG9yVHlwZTx1aW50
OF90PiYgY29sb3IpCi17CiAgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNb
MF0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzFdKSwgY29udmVydFRvQ29t
cG9uZW50RmxvYXQoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBv
bmVudHNbM10pIH07CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRz
WzBdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzFdKSwgY29udmVydFRvU1JHQkFG
bG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzNdKSB9
OwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNs
YW1wVG9Db21wb25lbnRCeXRlcyhDb21wb25lbnRUeXBlLi4uIGNvbXBvbmVudHMpCit0ZW1wbGF0
ZTw+IGlubGluZSBTUkdCQTx1aW50OF90PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzKS4u
LiB9OwotfQorICAgIGF1dG8gY29udmVydFRvU1JHQkFCeXRlID0gW10oZmxvYXQgdmFsdWUpIC0+
IHVpbnQ4X3QgeworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSAq
IDI1NS4wZiksIDBsLCAyNTVsKTsKKyAgICB9OwogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFt
ZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4
cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFtcFRvQ29tcG9uZW50RmxvYXRzKENvbXBvbmVudFR5cGUu
Li4gY29tcG9uZW50cykKLXsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29tcG9uZW50RmxvYXQoY29t
cG9uZW50cykuLi4gfTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbMF0pLCBj
b252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb1NSR0JBQnl0ZShjb21w
b25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbM10pIH07CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNv
bG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9y
LCBGdW5jdG9yJiYgZnVuY3RvcikKQEAgLTE1Nyw1MCArMTMyLDY5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnUKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
Y29uc3RleHByIENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5
cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCiB7CiAgICAgYXV0byBjb3B5ID0gY29s
b3I7Ci0gICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5cGUoY29w
eS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Qnl0ZUFs
cGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsK
ICAgICByZXR1cm4gY29weTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xv
clR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxv
YXQgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNvcHkgPSBjb2xvcjsKLSAgICBjb3B5LmFs
cGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJy
aWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CiAgICAgcmV0dXJuIGNv
cHk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlw
ZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3Is
IHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvckJ5TW9kaWZp
bmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFtdIChhdXRvIGNvbXBvbmVudCkgewotICAg
ICAgICByZXR1cm4gQ29tcG9uZW50VHJhaXRzPGRlY2x0eXBlKGNvbXBvbmVudCk+OjptYXhWYWx1
ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVu
dEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7Ci0gICAgcmV0dXJu
IGNvcHk7CisgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUp
OworCisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAg
IGF1dG8gY29weSA9IGNvbXBvbmVudHM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MzsgKytpKQorICAgICAgICBjb3B5W2ldID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzW2ldLm1h
eCAtIGNvbXBvbmVudHNbaV07CisgICAgY29weVszXSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOworCisgICAgcmV0
dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFs
cGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCiB7Ci0gICAg
YXV0byBjb3B5ID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBb
XSAoYXV0byBjb21wb25lbnQpIHsKLSAgICAgICAgcmV0dXJuIENvbXBvbmVudFRyYWl0czxkZWNs
dHlwZShjb21wb25lbnQpPjo6bWF4VmFsdWUgLSBjb21wb25lbnQ7Ci0gICAgfSk7Ci0gICAgY29w
eS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihv
dmVycmlkZUFscGhhKTsKLSAgICByZXR1cm4gY29weTsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbG9y
VHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGNvcHlbaV0gPSBDb2xv
clR5cGU6Ok1vZGVsOjpyYW5nZXNbaV0ubWF4IC0gY29tcG9uZW50c1tpXTsKKyAgICBjb3B5WzNd
ID0gY29udmVydEZsb2F0QWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
KG92ZXJyaWRlQWxwaGEpOworCisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5
cGU+KGNvcHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBi
b29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK2NvbnN0ZXhwciBib29sIGlzQmxh
Y2soY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgY29uc3RleHByIGF1dG8gbWluID0g
Q29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1pblZh
bHVlOwotICAgIGNvbnN0ZXhwciBhdXRvIG1heCA9IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBD
b2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptYXhWYWx1ZTsKKyAgICByZXR1cm4gY29sb3IubGln
aHRuZXNzID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7
Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0
eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pj4qPgorY29uc3RleHByIGJvb2wgaXNC
bGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQorewogICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGNvbG9yOwotICAgIHJldHVybiBjMSA9PSBtaW4gJiYgYzIgPT0gbWluICYmIGMzID09
IG1pbiAmJiBhbHBoYSA9PSBtYXg7CisgICAgY29uc3RleHByIGF1dG8gcmFuZ2VzID0gQ29sb3JU
eXBlOjpNb2RlbDo6cmFuZ2VzOworICAgIHJldHVybiBjMSA9PSByYW5nZXNbMF0ubWluICYmIGMy
ID09IHJhbmdlc1sxXS5taW4gJiYgYzMgPT0gcmFuZ2VzWzJdLm1pbiAmJiBhbHBoYSA9PSBBbHBo
YVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWU7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25z
dCBDb2xvclR5cGUmIGNvbG9yKQorY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBMYWI8Zmxv
YXQ+JiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRUcmFpdHM8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisgICAgcmV0dXJu
IGNvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8Zmxv
YXQ+OjpvcGFxdWU7Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVs
LCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pj4qPgorY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQorewogICAgIGF1dG8gW2Mx
LCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwotICAgIHJldHVybiBjMSA9PSBtYXggJiYgYzIgPT0g
bWF4ICYmIGMzID09IG1heCAmJiBhbHBoYSA9PSBtYXg7CisgICAgY29uc3RleHByIGF1dG8gcmFu
Z2VzID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzOworICAgIHJldHVybiBjMSA9PSByYW5nZXNb
MF0ubWF4ICYmIGMyID09IHJhbmdlc1sxXS5tYXggJiYgYzMgPT0gcmFuZ2VzWzJdLm1heCAmJiBh
bHBoYSA9PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Ojpv
cGFxdWU7CiB9CiAKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZf
dCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRi5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+IG1ha2VTaW1wCiAgICAgICAgIGNvbXBvbmVudEFycmF5W2ldID0gY29tcG9uZW50OwogICAg
IH0KIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbXBvbmVu
dEFycmF5WzFdLCBjb21wb25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVu
dEFycmF5WzBdIH0pOworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JB
IHsgY29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVsz
XSwgY29tcG9uZW50QXJyYXlbMF0gfSk7CiB9CiAKIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRT
dHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5z
Zm9ybUMKICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHJn
YlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9yID0g
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yKTsKICAgICAgICAgICAgICAg
ICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMTUsNyArMTE1LDcg
QEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQwogICAgICAgICAgICAg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBp
IC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9SR0JDb2xvckNvbXBv
bmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1JHQkNvbG9yQ29t
cG9uZW50Q2xhbXBpbmcoY29sb3IpOwogICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBhcnJheTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNyArODEsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHJvdW5kQW5kCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHJldHVybiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHIsIGcsIGIsIGEgfSk7CisgICAgcmV0dXJuIGNvbnZl
cnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyByLCBnLCBiLCBhIH0pOwogfQogCiBDb2xvcjo6
Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShyZXZpc2lvbiAyNzE2OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBDb2xvciBOYXRpdmVJbWFnZTo6c2lu
Z2xlUGl4ZWxTb2xpZENvbG9yCiAgICAgaWYgKCFwaXhlbFszXSkKICAgICAgICAgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCi0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhl
bFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOworICAgIHJldHVybiBt
YWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PihwaXhl
bFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsy
XSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CiB9CiAKIHZvaWQgTmF0aXZlSW1hZ2U6OmNs
ZWFyU3ViaW1hZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDI3
MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTkgKzkxLDE5IEBAIGJvb2wgQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHIKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShncmF5c2Nh
bGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAgIGNvbG9y
ID0gYXNTUkdCQShzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29sb3JNYXRyaXgobV9h
bW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBIVUVfUk9UQVRFOiB7
Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCku
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7Cisg
ICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+Piho
dWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
YXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1cmF0aW9u
Q29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0Ns
YW1waW5nPFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNzIsNyArMTcyLDcgQEAg
Ym9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aQogICAgIH0KICAgICBjYXNl
IEJSSUdIVE5FU1M6CiAgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhh
Q29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7Ci0gICAgICAgICAgICByZXR1
cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBmKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmNsYW1wPGZsb2F0PihtX2Ftb3VudCAqIGNvbXBvbmVudCwgMC4wZiwg
MS4wZik7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpA
QCAtMjI0LDE1ICsyMjQsNzggQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gSW52ZXJ0TGlnaHRu
ZXNzRgogICAgIHJldHVybiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgp
OwogfQogCisvLyBGSVhNRTogVGhpcyBodWVSb3RhdGUgY29kZSBleGlzdHMgdG8gYWxsb3cgSW52
ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uIHRvIHBlcmZvcm0gaHVlIHJvdGF0aW9uCisvLyBv
biBjb2xvciB2YWx1ZXMgb3V0c2lkZSBvZiB0aGUgbm9uLWV4dGVuZGVkIFNSR0IgdmFsdWUgcmFu
Z2UgKDAtMSkgdG8gbWFpbnRhaW4gdGhlIGJlaGF2aW9yIG9mIGNvbG9ycworLy8gcHJpb3IgdG8g
Y2xhbXBpbmcgYmVpbmcgZW5mb3JjZWQuIEl0IHNob3VsZCBsaWtlbHkganVzdCB1c2UgdGhlIGV4
aXN0aW5nIGh1ZVJvdGF0ZUNvbG9yTWF0cml4KGFtb3VudCkKKy8vIGluIENvbG9yTWF0cml4LmgK
K3N0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGh1ZVJvdGF0ZShjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+JiBjb2xvciwgZmxvYXQgYW1vdW50KQoreworICAgIGF1dG8gW3IsIGcsIGIs
IGFscGhhXSA9IGNvbG9yOworCisgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyBy
LCBnLCBiIH0pOworICAgIGZsb2F0IGNocm9tYSA9IG1heCAtIG1pbjsKKworICAgIGZsb2F0IGxp
Z2h0bmVzcyA9IDAuNWYgKiAobWF4ICsgbWluKTsKKyAgICBmbG9hdCBzYXR1cmF0aW9uOworICAg
IGlmICghY2hyb21hKQorICAgICAgICBzYXR1cmF0aW9uID0gMDsKKyAgICBlbHNlIGlmIChsaWdo
dG5lc3MgPD0gMC41ZikKKyAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4ICsgbWlu
KSk7CisgICAgZWxzZQorICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvICgyLjBmIC0gKG1h
eCArIG1pbikpKTsKKworICAgIGlmICghc2F0dXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHsgbGln
aHRuZXNzLCBsaWdodG5lc3MsIGxpZ2h0bmVzcywgYWxwaGEgfTsKKworICAgIGZsb2F0IGh1ZTsK
KyAgICBpZiAoIWNocm9tYSkKKyAgICAgICAgaHVlID0gMDsKKyAgICBlbHNlIGlmIChtYXggPT0g
cikKKyAgICAgICAgaHVlID0gKDYwLjBmICogKChnIC0gYikgLyBjaHJvbWEpKSArIDM2MC4wZjsK
KyAgICBlbHNlIGlmIChtYXggPT0gZykKKyAgICAgICAgaHVlID0gKDYwLjBmICogKChiIC0gcikg
LyBjaHJvbWEpKSArIDEyMC4wZjsKKyAgICBlbHNlCisgICAgICAgIGh1ZSA9ICg2MC4wZiAqICgo
ciAtIGcpIC8gY2hyb21hKSkgKyAyNDAuMGY7CisKKyAgICBpZiAoaHVlID49IDM2MC4wZikKKyAg
ICAgICAgaHVlIC09IDM2MC4wZjsKKworICAgIGh1ZSAvPSAzNjAuMGY7CisKKyAgICAvLyBQZXJm
b3JtIHJvdGF0aW9uLgorICAgIGh1ZSA9IHN0ZDo6Zm1vZChodWUgKyBhbW91bnQsIDEuMGYpOwor
CisgICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0gMC41ZiA/IGxpZ2h0bmVzcyAqICgxLjBm
ICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0
dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBsaWdodG5lc3MgLSB0ZW1wMjsKKyAg
ICAKKyAgICBodWUgKj0gNi4wZjsgLy8gY2FsY0h1ZSgpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJh
bmdlLgorCisgICAgLy8gSHVlIGlzIGluIHRoZSByYW5nZSAwLTYsIG90aGVyIGFyZ3MgaW4gMC0x
LgorICAgIGF1dG8gY2FsY0h1ZSA9IFtdKGZsb2F0IHRlbXAxLCBmbG9hdCB0ZW1wMiwgZmxvYXQg
aHVlVmFsKSB7CisgICAgICAgIGlmIChodWVWYWwgPCAwLjBmKQorICAgICAgICAgICAgaHVlVmFs
ICs9IDYuMGY7CisgICAgICAgIGVsc2UgaWYgKGh1ZVZhbCA+PSA2LjBmKQorICAgICAgICAgICAg
aHVlVmFsIC09IDYuMGY7CisgICAgICAgIGlmIChodWVWYWwgPCAxLjBmKQorICAgICAgICAgICAg
cmV0dXJuIHRlbXAxICsgKHRlbXAyIC0gdGVtcDEpICogaHVlVmFsOworICAgICAgICBpZiAoaHVl
VmFsIDwgMy4wZikKKyAgICAgICAgICAgIHJldHVybiB0ZW1wMjsKKyAgICAgICAgaWYgKGh1ZVZh
bCA8IDQuMGYpCisgICAgICAgICAgICByZXR1cm4gdGVtcDEgKyAodGVtcDIgLSB0ZW1wMSkgKiAo
NC4wZiAtIGh1ZVZhbCk7CisgICAgICAgIHJldHVybiB0ZW1wMTsKKyAgICB9OworCisgICAgcmV0
dXJuIHsKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVtcDIsIGh1ZSArIDIuMGYpLAorICAgICAg
ICBjYWxjSHVlKHRlbXAxLCB0ZW1wMiwgaHVlKSwKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVt
cDIsIGh1ZSAtIDIuMGYpLAorICAgICAgICBhbHBoYQorICAgIH07Cit9CisKIGJvb2wgSW52ZXJ0
TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNv
bG9yKSBjb25zdAogewotICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb2xvcik7Ci0gICAgCi0gICAg
Ly8gUm90YXRlIHRoZSBodWUgMTgwZGVnLgotICAgIGhzbGEuaHVlID0gc3RkOjpmbW9kKGhzbGEu
aHVlICsgMC41ZiwgMS4wZik7Ci0gICAgCi0gICAgLy8gQ29udmVydCBiYWNrIHRvIFJHQi4KLSAg
ICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQSA9IHRvU1JHQkEoaHNsYSk7CisgICAgYXV0byBodWVSb3Rh
dGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90YXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwg
MC41Zik7CiAgICAgCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVt
LzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRyaXggd2FzIGRlcml2ZWQuCiAgICAgY29uc3RleHBy
IENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01vZGVNYXRyaXggewpAQCAtMjQwLDcgKzMwMyw3IEBA
IGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmEKICAgICAgICAgMC4wMzBm
LCAtMC43NDFmLCAtMC4wODlmLCAwLjBmLCAxLjBmLAogICAgICAgICAwLjAzMGYsICAwLjA1OWYs
IC0wLjg5MGYsIDAuMGYsIDEuMGYKICAgICB9OwotICAgIGNvbG9yID0gYXNTUkdCQSh0b0RhcmtN
b2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGh1
ZVJvdGF0ZWRTUkdCQSkpKTsKKyAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
PFNSR0JBPGZsb2F0Pj4odG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTI1MiwxNiArMzE1LDExIEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpp
bnYKICAgICAgICAgLTAuMDQ5ZiwgLTEuMzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4yNWYsCiAgICAg
ICAgIC0wLjA0OWYsIC0wLjA5N2YsIC0xLjEwNGYsIDAuMGYsIDEuMjVmCiAgICAgfTsKLSAgICBh
dXRvIGNvbnZlcnRlZFRvTGlnaHRNb2RlID0gYXNTUkdCQSh0b0xpZ2h0TW9kZU1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKLQotICAg
IC8vIENvbnZlcnQgdG8gSFNMLgotICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb252ZXJ0ZWRUb0xp
Z2h0TW9kZSk7CisgICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMgPSB0b0xp
Z2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50
cyhjb2xvcikpOwogCi0gICAgLy8gSHVlIHJvdGF0ZSBieSAxODBkZWcuCi0gICAgaHNsYS5odWUg
PSBzdGQ6OmZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKKyAgICBhdXRvIGh1ZVJvdGF0ZWRT
UkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoY29udmVydGVkVG9MaWdodE1vZGVDb21wb25lbnRz
LCAwLjVmKTsKIAotICAgIC8vIEFuZCByZXR1cm4gUkdCLgotICAgIGNvbG9yID0gdG9TUkdCQSho
c2xhKTsKKyAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0
Pj4oaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6
dHJhbnNmb3JtQ29sb3IoQ28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBjb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JBQ29sb3IpOworICAgIGNvbG9y
ID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihzUkdCQUNvbG9yKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6aW52ZXJz
ZVRyYW5zZm9ybUMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb2xv
ciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JBQ29sb3IpOworICAgIGNvbG9yID0gY29u
dmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihzUkdCQUNvbG9yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjb2xv
cikKLSAgICA6IENvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0
YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFs
cGhhKSB9KSkKKyAgICA6IENvbG9yKGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3IucmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmdy
ZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3IuYWxwaGEpIH0pKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29sb3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDEzICs5MiwxMyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IG1h
a2VTaW1wCiAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxbNF07CiAgICAgICAgIFtvZmZzY3JlZW5S
ZXAgZ2V0UGl4ZWw6cGl4ZWwgYXRYOjAgeTowXTsKIAotICAgICAgICByZXR1cm4gY2xhbXBUb0Nv
bXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFsz
XSk7CisgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50
OF90Pj4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAgIH0KIAog
ICAgIFtyZ2JDb2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQg
Ymx1ZTomYmx1ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0
YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5D
b21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0
PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4o
U1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9y
KE5TQ29sb3IgKmNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENv
bG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21w
b25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkp
CisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgY29sb3Iuciwg
Y29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6
c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQogewot
ICAgIGF1dG8gY29sb3JLZXkgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9y
LnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBjb2xvcktleSA9IGNv
bnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5i
LCBjb2xvci5hIH0pOwogCiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBpZiAoIW1femVy
b0JydXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2
aXNpb24gMjcxNjkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3Io
VUlDb2xvciAqY29sb3IpCiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46
JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAg
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0
PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkg
fSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNf
Y2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9u
ZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEpIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNzE2OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVudUJhY2tncm91
bmRDb2xvCiAgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2NyZWVuUmVwIGdldFBp
eGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVz
PFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgcmV0
dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PihwaXhlbFswXSwg
cGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lTWFj
OjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9y
OjpPcHRpb25zPiBvcHRpb25zKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFs
dWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjcxNjkwKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgYmx1ZSA9
IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJsdWUsIHNp
bXBsZVRvLmJsdWUsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWUsIHNpbXBsZUFuaW1hdGVk
LmJsdWUpOwogICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJl
cGVhdENvdW50LCBzaW1wbGVGcm9tLmFscGhhLCBzaW1wbGVUby5hbHBoYSwgc2ltcGxlVG9BdEVu
ZE9mRHVyYXRpb24uYWxwaGEsIHNpbXBsZUFuaW1hdGVkLmFscGhhKTsKICAgICAgICAgCi0gICAg
ICAgIGFuaW1hdGVkID0gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihzdGQ6Omxyb3VuZChy
ZWQpLCBzdGQ6Omxyb3VuZChncmVlbiksIHN0ZDo6bHJvdW5kKGJsdWUpLCBzdGQ6Omxyb3VuZChh
bHBoYSkpOworICAgICAgICBhbmltYXRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPHVpbnQ4X3Q+PihzdGQ6Omxyb3VuZChyZWQpLCBzdGQ6Omxyb3VuZChncmVlbiksIHN0ZDo6
bHJvdW5kKGJsdWUpLCBzdGQ6Omxyb3VuZChhbHBoYSkpOwogICAgIH0KIAogICAgIE9wdGlvbmFs
PGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBmcm9t
LCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQpAQCAtMTIwLDcgKzEyMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOwogCiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhhIG9uIHJl
c3VsdCB0byAxMDAlIG9wYXF1ZS4KLSAgICAgICAgbV90byA9IGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsg
c2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CisgICAg
ICAgIG1fdG8gPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4oc2lt
cGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5n
cmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjkwKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wMS0yMCAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5nIGxvZ2lj
IHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNw
cDoKKyAgICAgICAgKHdlYmtpdENvbG9yVG9XZWJDb3JlQ29sb3IpOgorICAgICAgICBVcGRhdGUg
dG8gdXNlIG5ldyBjb252ZXJ0VG88PiBmdW5jdGlvbnMuCisKIDIwMjEtMDEtMjEgIERhdmUgQmxh
bmNoYXJkICA8ZGF2ZUBncm93LmdhbWU+CiAKICAgICAgICAgTWlzc2luZyBoZWFkZXIgZ3RrL2d0
ay5oIGluIFBvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyNzE2OTApCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdENvbG9y
LCB3ZWJraXRfCiAKIGNvbnN0IFdlYkNvcmU6OkNvbG9yIHdlYmtpdENvbG9yVG9XZWJDb3JlQ29s
b3IoV2ViS2l0Q29sb3IqIGNvbG9yKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb252ZXJ0VG9D
b21wb25lbnRCeXRlcyhXZWJDb3JlOjpTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+
cmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvci0+Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpIH0pOworICAg
IHJldHVybiBXZWJDb3JlOjpjb252ZXJ0VG88V2ViQ29yZTo6U1JHQkE8dWludDhfdD4+KFdlYkNv
cmU6OlNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5yZWQpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3ItPmdyZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ibHVlKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5hbHBoYSkgfSk7CiB9CiAKIHZvaWQgd2Via2l0Q29sb3JG
aWxsRnJvbVdlYkNvcmVDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgd2ViQ29yZUNvbG9yLCBX
ZWJLaXRDb2xvciogY29sb3IpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzE2OTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAordzIwMjEtMDEtMjAgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJld29yayBjb2xvciBjbGFtcGluZyBsb2dpYyB0
byBiZSBtb3JlIGNvbnNpc3RlbnQgYW5kIGNsZWFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA3MTYKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1v
biBGcmFzZXIuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JU
ZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBVcGRhdGUgdGVzdHMgdG8gdXNlIG5ldyBj
b252ZXJ0VG88PiBmdW5jdGlvbnMuCisKIDIwMjEtMDEtMjAgIEpvbmF0aGFuIEJlZGFyZCAgPGpi
ZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRzY21weV0gR3JhY2VmdWxseSBoYW5k
bGUgbWlzc2luZyBrZXlyaW5nIGJhY2tlbmQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKICAgICAK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5l
c3MpOwogICAgIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25l
bnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQ
RUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAg
VEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
bGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7Cisg
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9T
UkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9y
KTsKIH0KIApAQCAtNzgsNyArNzgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3Mp
OwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVz
KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZl
cnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEo
Y29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtOTQsNyArOTQsNyBAQCBURVNUKENv
bG9yLCBSR0JUb0hTTF9HcmVlbikKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5l
c3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9y
ID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRv
IHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhz
bGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQog
CkBAIC0xMTAsNyArMTEwLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIAogICAgIEVY
UEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAK
LSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9T
UkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRv
PFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xv
ciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC0xMjYsNyArMTI2LDcgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfRGFya0dyYXkpCiAgICAgCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxp
Z2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVk
Q29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAg
IGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7
CiB9CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNz
KTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRl
cyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252
ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VR
KGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTE1OCw3ICsxNTgsNyBAQCBURVNU
KENvbG9yLCBSR0JUb0hTTF9MaWdodEdyYXkpCiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3Iu
bGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBw
ZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7Cisg
ICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9T
UkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9y
KTsKIH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVk
Q29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0
eSkKICAgICB9CiAKICAgICBhdXRvIGNvbXBvbmVudEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAy
NTUsIDEyOCwgNjMsIDEyNyB9OwotICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdHMoY29tcG9uZW50Qnl0ZXMpIH07CisgICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUbzxTUkdC
QTxmbG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9OwogICAgIENvbG9yIHJnYjIgeyBjb21wb25lbnRC
eXRlcyB9OwogICAgIEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKICAgICBFWFBFQ1RfTkUocmdiMiwg
cmdiMSk7CkBAIC0xMzgsNyArMTM4LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogICAg
IH0KIAogICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4
LCA2MywgMTI3IH07Ci0gICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhj
b21wb25lbnRCeXRlcykgfTsKKyAgICBDb2xvciByZ2IxIHsgY29udmVydFRvPFNSR0JBPGZsb2F0
Pj4oY29tcG9uZW50Qnl0ZXMpIH07CiAgICAgQ29sb3IgcmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07
CiAgICAgRVhQRUNUX05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7CiB9CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQkocmV2aXNpb24gMjcx
NjkwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBXZWJDb3JlOjpDb2xvciBUZXN0UERGUGFn
ZTo6Y29sb3JBdFBvaW50CiAKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKLSAgICByZXR1cm4gV2ViQ29yZTo6Y2xhbXBUb0NvbXBv
bmVudEJ5dGVzPFdlYkNvcmU6OlNSR0JBPihyICogMjU1IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAy
NTUgLyBhLCBhKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6bWFrZUZyb21Db21wb25lbnRzQ2xhbXBp
bmdFeGNlcHRBbHBoYTxXZWJDb3JlOjpTUkdCQTx1aW50OF90Pj4ociAqIDI1NSAvIGEsIGcgKiAy
NTUgLyBhLCBiICogMjU1IC8gYSwgYSk7CiB9CiAKIC8vIERvY3VtZW50cwpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjcxNjkwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMjEtMDEtMjAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFJld29yayBjb2xvciBjbGFtcGluZyBsb2dpYyB0byBiZSBtb3JlIGNvbnNp
c3RlbnQgYW5kIGNsZWFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjA3MTYKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldEZpbGxDb2xvci1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRGaWxsQ29s
b3IuaHRtbDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFNoYWRv
dy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1z
ZXRTaGFkb3cuaHRtbDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNl
dFN0cm9rZUNvbG9yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMt
b3ZlcmxvYWRzLXNldFN0cm9rZUNvbG9yLmh0bWw6CisgICAgICAgIEV4dGVuZCB0ZXN0cyB0byBj
b3ZlciB0ZXN0aW5nIHZhcmlvdXMgdmFsdWVzIGluY2x1ZGluZyBOYU4sIGluY2x1ZGluZyB0ZXN0
aW5nIHdoYXQKKyAgICAgICAgY29sb3IgYWN0dWFsbHkgZ2V0cyBzZXQgYXMgdGhlIGN1cnJlbnQg
c3R5bGUuIAorCiAyMDIxLTAxLTIxICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgTnVsbCBjaGVjayBpbiBSVENSdHBTRnJhbWVUcmFuc2Zvcm06OmNyZWF0ZVN0cmVhbXMK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0RmlsbENv
bG9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9j
YW52YXMtb3ZlcmxvYWRzLXNldEZpbGxDb2xvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI3MTY5
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0RmlsbENv
bG9yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCwxMyArNCw1MCBAQCBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogUEFTUyBjdHguc2V0RmlsbENv
bG9yKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQ
QVNTIGN0eC5maWxsU3R5bGUgaXMgJyMwMDAwMDAnCisKKwordW5kZWZpbmVkIHNldEZpbGxDb2xv
cihET01TdHJpbmcgY29sb3IsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSkKKwog
UEFTUyBjdHguc2V0RmlsbENvbG9yKCdyZWQnKSBpcyB1bmRlZmluZWQKLVBBU1MgY3R4LnNldEZp
bGxDb2xvcigwKSBpcyB1bmRlZmluZWQKLVBBU1MgY3R4LnNldEZpbGxDb2xvcigwLCAwKSBpcyB1
bmRlZmluZWQKLVBBU1MgY3R4LnNldEZpbGxDb2xvcigwLCAwLCAwKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBUeXBlIGVycm9yLgotUEFTUyBjdHguc2V0RmlsbENvbG9yKDAsIDAsIDAsIDAp
IGlzIHVuZGVmaW5lZAotUEFTUyBjdHguc2V0RmlsbENvbG9yKDAsIDAsIDAsIDAsIDApIGlzIHVu
ZGVmaW5lZAotUEFTUyBjdHguc2V0RmlsbENvbG9yKDAsIDAsIDAsIDAsIDAsIDApIGlzIHVuZGVm
aW5lZAorUEFTUyBjdHguZmlsbFN0eWxlIGlzICcjZmYwMDAwJworUEFTUyBjdHguc2V0RmlsbENv
bG9yKCdyZWQnLCAuNSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEo
MjU1LCAwLCAwLCAwLjUpJworUEFTUyBjdHguc2V0RmlsbENvbG9yKCdyZWQnLCBOYU4pIGlzIHVu
ZGVmaW5lZAorUEFTUyBjdHguZmlsbFN0eWxlIGlzICdyZ2JhKDI1NSwgMCwgMCwgMC41KScKKwor
Cit1bmRlZmluZWQgc2V0RmlsbENvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCBncmF5TGV2ZWwsIG9w
dGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSA9IDEpCisKK1BBU1MgY3R4LnNldEZpbGxD
b2xvciguMjUpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguZmlsbFN0eWxlIGlzICcjNDA0MDQwJwor
UEFTUyBjdHguc2V0RmlsbENvbG9yKC4yNSwgLjUpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguZmls
bFN0eWxlIGlzICdyZ2JhKDY0LCA2NCwgNjQsIDAuNSknCitQQVNTIGN0eC5zZXRGaWxsQ29sb3Io
TmFOLCAuNSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEoNjQsIDY0
LCA2NCwgMC41KScKK1BBU1MgY3R4LnNldEZpbGxDb2xvciguMjUsIE5hTikgaXMgdW5kZWZpbmVk
CitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEoNjQsIDY0LCA2NCwgMC41KScKKworCit1bmRl
ZmluZWQgc2V0RmlsbENvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCByLCB1bnJlc3RyaWN0ZWQgZmxv
YXQgZywgdW5yZXN0cmljdGVkIGZsb2F0IGIsIHVucmVzdHJpY3RlZCBmbG9hdCBhKQorCitQQVNT
IGN0eC5zZXRGaWxsQ29sb3IoLjEsIC4yLCAuMykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
VHlwZSBlcnJvci4KK1BBU1MgY3R4LnNldEZpbGxDb2xvciguMSwgLjIsIC4zLCAuNCkgaXMgdW5k
ZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEoMjYsIDUxLCA3NywgMC40KScKK1BB
U1MgY3R4LnNldEZpbGxDb2xvcihOYU4sIC4yLCAuMywgLjQpIGlzIHVuZGVmaW5lZAorUEFTUyBj
dHguZmlsbFN0eWxlIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCknCitQQVNTIGN0eC5zZXRGaWxs
Q29sb3IoLjEsIE5hTiwgLjMsIC40KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBp
cyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0RmlsbENvbG9yKC4xLCAuMiwg
TmFOLCAuNCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEoMjYsIDUx
LCA3NywgMC40KScKK1BBU1MgY3R4LnNldEZpbGxDb2xvciguMSwgLjIsIC4zLCBOYU4pIGlzIHVu
ZGVmaW5lZAorUEFTUyBjdHguZmlsbFN0eWxlIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCknCitQ
QVNTIGN0eC5zZXRGaWxsQ29sb3IoLjUsIC40LCAuMywgLjIsIC4xKSBpcyB1bmRlZmluZWQKK1BB
U1MgY3R4LmZpbGxTdHlsZSBpcyAncmdiYSgxMjgsIDEwMiwgNzcsIDAuMiknCitQQVNTIGN0eC5z
ZXRGaWxsQ29sb3IoMSwgLjQsIC4zLCAuMiwgLjEsIDApIGlzIHVuZGVmaW5lZAorUEFTUyBjdHgu
ZmlsbFN0eWxlIGlzICdyZ2JhKDI1NSwgMTAyLCA3NywgMC4yKScKK1BBU1MgY3R4LnNldEZpbGxD
b2xvcigxLjUsIDEwLCAtMC4xLCAtMTAwKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZpbGxTdHls
ZSBpcyAncmdiYSgyNTUsIDI1NSwgMCwgMCknCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZh
cy1vdmVybG9hZHMtc2V0RmlsbENvbG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRGaWxsQ29sb3IuaHRtbAkocmV2aXNpb24g
MjcxNjkwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRG
aWxsQ29sb3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNywxOSArNyw2OSBAQAogPHNjcmlwdD4K
IGRlc2NyaXB0aW9uKCJUZXN0IHRoZSBiZWhhdmlvciBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuc2V0RmlsbENvbG9yKCkgd2hlbiBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgbnVtYmVycyBvZiBh
cmd1bWVudHMuIik7CiAKLXZhciBjdHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMn
KS5nZXRDb250ZXh0KCcyZCcpOworbGV0IGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Nh
bnZhcycpLmdldENvbnRleHQoJzJkJyk7CiAKLXZhciBUeXBlRXJyb3IgPSAiVHlwZUVycm9yOiBU
eXBlIGVycm9yIjsKLXZhciBUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMgPSAiVHlwZUVycm9y
OiBOb3QgZW5vdWdoIGFyZ3VtZW50cyI7CitsZXQgVHlwZUVycm9yID0gIlR5cGVFcnJvcjogVHlw
ZSBlcnJvciI7CitsZXQgVHlwZUVycm9yTm90RW5vdWdoQXJndW1lbnRzID0gIlR5cGVFcnJvcjog
Tm90IGVub3VnaCBhcmd1bWVudHMiOwogCiBzaG91bGRUaHJvdygiY3R4LnNldEZpbGxDb2xvcigp
IiwgIlR5cGVFcnJvck5vdEVub3VnaEFyZ3VtZW50cyIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5
bGUiLCAiJyMwMDAwMDAnIik7CisKKworZGVidWcoIlxuXG51bmRlZmluZWQgc2V0RmlsbENvbG9y
KERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhhKVxuIikK
IHNob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKCdyZWQnKSIsICJ1bmRlZmluZWQiKTsKLXNob3Vs
ZEJlKCJjdHguc2V0RmlsbENvbG9yKDApIiwgInVuZGVmaW5lZCIpOwotc2hvdWxkQmUoImN0eC5z
ZXRGaWxsQ29sb3IoMCwgMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRUaHJvdygiY3R4LnNldEZp
bGxDb2xvcigwLCAwLCAwKSIsICJUeXBlRXJyb3IiKTsKLXNob3VsZEJlKCJjdHguc2V0RmlsbENv
bG9yKDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIpOwotc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29s
b3IoMCwgMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgiY3R4LnNldEZpbGxD
b2xvcigwLCAwLCAwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmls
bFN0eWxlIiwgIicjZmYwMDAwJyIpOworCitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvcigncmVk
JywgLjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3JnYmEo
MjU1LCAwLCAwLCAwLjUpJyIpOworCitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvcigncmVkJywg
TmFOKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIidyZ2JhKDI1
NSwgMCwgMCwgMC41KSciKTsKKworCitkZWJ1ZygiXG5cbnVuZGVmaW5lZCBzZXRGaWxsQ29sb3Io
dW5yZXN0cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0
IGFscGhhID0gMSlcbiIpCisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKC4yNSkiLCAidW5k
ZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICInIzQwNDA0MCciKTsKKworc2hv
dWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoLjI1LCAuNSkiLCAidW5kZWZpbmVkIik7CitzaG91bGRC
ZSgiY3R4LmZpbGxTdHlsZSIsICIncmdiYSg2NCwgNjQsIDY0LCAwLjUpJyIpOworCitzaG91bGRC
ZSgiY3R4LnNldEZpbGxDb2xvcihOYU4sIC41KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJj
dHguZmlsbFN0eWxlIiwgIidyZ2JhKDY0LCA2NCwgNjQsIDAuNSknIik7CisKK3Nob3VsZEJlKCJj
dHguc2V0RmlsbENvbG9yKC4yNSwgTmFOKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHgu
ZmlsbFN0eWxlIiwgIidyZ2JhKDY0LCA2NCwgNjQsIDAuNSknIik7CisKKworZGVidWcoIlxuXG51
bmRlZmluZWQgc2V0RmlsbENvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCByLCB1bnJlc3RyaWN0ZWQg
ZmxvYXQgZywgdW5yZXN0cmljdGVkIGZsb2F0IGIsIHVucmVzdHJpY3RlZCBmbG9hdCBhKVxuIikK
Kworc2hvdWxkVGhyb3coImN0eC5zZXRGaWxsQ29sb3IoLjEsIC4yLCAuMykiLCAiVHlwZUVycm9y
Iik7CisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKC4xLCAuMiwgLjMsIC40KSIsICJ1bmRl
ZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIidyZ2JhKDI2LCA1MSwgNzcsIDAu
NCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKE5hTiwgLjIsIC4zLCAuNCkiLCAi
dW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIncmdiYSgyNiwgNTEsIDc3
LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvciguMSwgTmFOLCAuMywgLjQp
IiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3JnYmEoMjYsIDUx
LCA3NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoLjEsIC4yLCBOYU4s
IC40KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIidyZ2JhKDI2
LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKC4xLCAuMiwg
LjMsIE5hTikiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIncmdi
YSgyNiwgNTEsIDc3LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvciguNSwg
LjQsIC4zLCAuMiwgLjEpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUi
LCAiJ3JnYmEoMTI4LCAxMDIsIDc3LCAwLjIpJyIpOworCitzaG91bGRCZSgiY3R4LnNldEZpbGxD
b2xvcigxLCAuNCwgLjMsIC4yLCAuMSwgMCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4
LmZpbGxTdHlsZSIsICIncmdiYSgyNTUsIDEwMiwgNzcsIDAuMiknIik7CisKK3Nob3VsZEJlKCJj
dHguc2V0RmlsbENvbG9yKDEuNSwgMTAsIC0wLjEsIC0xMDApIiwgInVuZGVmaW5lZCIpOworc2hv
dWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3JnYmEoMjU1LCAyNTUsIDAsIDApJyIpOworCiA8L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVy
bG9hZHMtc2V0U2hhZG93LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFNoYWRvdy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDI3MTY5MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMt
c2V0U2hhZG93LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNiwxNyArNiw1MiBAQCBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiBQQVNTIGN0eC5zZXRTaGFk
b3coKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KIFBB
U1MgY3R4LnNldFNoYWRvdygwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdo
IGFyZ3VtZW50cy4KIFBBU1MgY3R4LnNldFNoYWRvdygwLCAwKSB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAw
KSBpcyB1bmRlZmluZWQKLVBBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwKSBpcyB1bmRlZmlu
ZWQKLVBBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKIFBBU1Mg
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBUeXBlIGVycm9yLgotUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsICdyZWQnKSBpcyB1
bmRlZmluZWQKIFBBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAncmVkJywgMCkgdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KLVBBU1MgY3R4LnNldFNoYWRvdygwLCAw
LCAwLCAwLCAncmVkJywgMCwgMCkgaXMgdW5kZWZpbmVkCiBQQVNTIGN0eC5zZXRTaGFkb3coMCwg
MCwgMCwgMCwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KLVBB
U1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKLVBBU1Mg
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKLVBBU1Mg
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKKwor
Cit1bmRlZmluZWQgc2V0U2hhZG93KHVucmVzdHJpY3RlZCBmbG9hdCB3aWR0aCwgdW5yZXN0cmlj
dGVkIGZsb2F0IGhlaWdodCwgdW5yZXN0cmljdGVkIGZsb2F0IGJsdXIsIG9wdGlvbmFsIERPTVN0
cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhhKQorCitQQVNTIGN0
eC5zZXRTaGFkb3coMCwgMCwgMCwgJ3JlZCcpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hhZG93
Q29sb3IgaXMgJyNmZjAwMDAnCitQQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgJ3JlZCcsIC41
KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDI1NSwgMCwgMCwg
MC41KScKK1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAncmVkJywgTmFOKSBpcyB1bmRlZmlu
ZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDI1NSwgMCwgMCwgMC41KScKKworCit1
bmRlZmluZWQgc2V0U2hhZG93KHVucmVzdHJpY3RlZCBmbG9hdCB3aWR0aCwgdW5yZXN0cmljdGVk
IGZsb2F0IGhlaWdodCwgdW5yZXN0cmljdGVkIGZsb2F0IGJsdXIsIHVucmVzdHJpY3RlZCBmbG9h
dCBncmF5TGV2ZWwsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSA9IDEpCisKK1BB
U1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMjUpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hh
ZG93Q29sb3IgaXMgJyM0MDQwNDAnCitQQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjI1LCAu
NSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zaGFkb3dDb2xvciBpcyAncmdiYSg2NCwgNjQsIDY0
LCAwLjUpJworUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIE5hTiwgLjUpIGlzIHVuZGVmaW5l
ZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoNjQsIDY0LCA2NCwgMC41KScKK1BBU1Mg
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMjUsIE5hTikgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5z
aGFkb3dDb2xvciBpcyAncmdiYSg2NCwgNjQsIDY0LCAwLjUpJworCisKK3VuZGVmaW5lZCBzZXRT
aGFkb3codW5yZXN0cmljdGVkIGZsb2F0IHdpZHRoLCB1bnJlc3RyaWN0ZWQgZmxvYXQgaGVpZ2h0
LCB1bnJlc3RyaWN0ZWQgZmxvYXQgYmx1ciwgdW5yZXN0cmljdGVkIGZsb2F0IHIsIHVucmVzdHJp
Y3RlZCBmbG9hdCBnLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYiwgdW5yZXN0cmljdGVkIGZsb2F0IGEp
CisKK1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMSwgLjIsIC4zKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgorUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4x
LCAuMiwgLjMsIC40KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2Jh
KDI2LCA1MSwgNzcsIDAuNCknCitQQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgTmFOLCAuMiwg
LjMsIC40KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDI2LCA1
MSwgNzcsIDAuNCknCitQQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjEsIE5hTiwgLjMsIC40
KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDI2LCA1MSwgNzcs
IDAuNCknCitQQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjEsIC4yLCBOYU4sIC40KSBpcyB1
bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCkn
CitQQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjEsIC4yLCAuMywgTmFOKSBpcyB1bmRlZmlu
ZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCknCitQQVNT
IGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjUsIC40LCAuMywgLjIsIC4xKSBpcyB1bmRlZmluZWQK
K1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDEyOCwgMTAyLCA3NywgMC4yKScKK1BBU1Mg
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAxLCAuNCwgLjMsIC4yLCAuMSwgMCkgaXMgdW5kZWZpbmVk
CitQQVNTIGN0eC5zaGFkb3dDb2xvciBpcyAncmdiYSgyNTUsIDEwMiwgNzcsIDAuMiknCitQQVNT
IGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMS41LCAxMCwgLTAuMSwgLTEwMCkgaXMgdW5kZWZpbmVk
CitQQVNTIGN0eC5zaGFkb3dDb2xvciBpcyAncmdiYSgyNTUsIDI1NSwgMCwgMCknCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0U2hhZG93Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRTaGFkb3cu
aHRtbAkocmV2aXNpb24gMjcxNjkwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFz
LW92ZXJsb2Fkcy1zZXRTaGFkb3cuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsMTcgKzE1LDYz
IEBAIHZhciBUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMgPSAiVHlwZUUKIHNob3VsZFRocm93
KCJjdHguc2V0U2hhZG93KCkiLCAiVHlwZUVycm9yTm90RW5vdWdoQXJndW1lbnRzIik7CiBzaG91
bGRUaHJvdygiY3R4LnNldFNoYWRvdygwKSIsICJUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMi
KTsKIHNob3VsZFRocm93KCJjdHguc2V0U2hhZG93KDAsIDApIiwgIlR5cGVFcnJvck5vdEVub3Vn
aEFyZ3VtZW50cyIpOwotc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCkiLCAidW5kZWZp
bmVkIik7Ci1zaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQi
KTsKLXNob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIp
Owogc2hvdWxkVGhyb3coImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgMCwgMCkiLCAiVHlwZUVy
cm9yIik7Ci1zaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAncmVkJykiLCAidW5k
ZWZpbmVkIik7CiBzaG91bGRUaHJvdygiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAncmVkJywg
MCkiLCAiVHlwZUVycm9yIik7Ci1zaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAn
cmVkJywgMCwgMCkiLCAidW5kZWZpbmVkIik7CiBzaG91bGRUaHJvdygiY3R4LnNldFNoYWRvdygw
LCAwLCAwLCAwLCAwLCAwKSIsICJUeXBlRXJyb3IiKTsKLXNob3VsZEJlKCJjdHguc2V0U2hhZG93
KDAsIDAsIDAsIDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIpOwotc2hvdWxkQmUoImN0eC5zZXRT
aGFkb3coMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgi
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsK
KworZGVidWcoIlxuXG51bmRlZmluZWQgc2V0U2hhZG93KHVucmVzdHJpY3RlZCBmbG9hdCB3aWR0
aCwgdW5yZXN0cmljdGVkIGZsb2F0IGhlaWdodCwgdW5yZXN0cmljdGVkIGZsb2F0IGJsdXIsIG9w
dGlvbmFsIERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhh
KVxuIikKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsICdyZWQnKSIsICJ1bmRlZmlu
ZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJyNmZjAwMDAnIik7CisKK3Nob3Vs
ZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsICdyZWQnLCAuNSkiLCAidW5kZWZpbmVkIik7Citz
aG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDI1NSwgMCwgMCwgMC41KSciKTsKKwor
c2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgJ3JlZCcsIE5hTikiLCAidW5kZWZpbmVk
Iik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDI1NSwgMCwgMCwgMC41KSci
KTsKKworZGVidWcoIlxuXG51bmRlZmluZWQgc2V0U2hhZG93KHVucmVzdHJpY3RlZCBmbG9hdCB3
aWR0aCwgdW5yZXN0cmljdGVkIGZsb2F0IGhlaWdodCwgdW5yZXN0cmljdGVkIGZsb2F0IGJsdXIs
IHVucmVzdHJpY3RlZCBmbG9hdCBncmF5TGV2ZWwsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9h
dCBhbHBoYSA9IDEpXG4iKQorCitzaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMjUp
IiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICInIzQwNDA0MCci
KTsKKworc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjI1LCAuNSkiLCAidW5kZWZp
bmVkIik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDY0LCA2NCwgNjQsIDAu
NSknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIE5hTiwgLjUpIiwgInVu
ZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICIncmdiYSg2NCwgNjQsIDY0
LCAwLjUpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMjUsIE5hTiki
LCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDY0LCA2
NCwgNjQsIDAuNSknIik7CisKKworZGVidWcoIlxuXG51bmRlZmluZWQgc2V0U2hhZG93KHVucmVz
dHJpY3RlZCBmbG9hdCB3aWR0aCwgdW5yZXN0cmljdGVkIGZsb2F0IGhlaWdodCwgdW5yZXN0cmlj
dGVkIGZsb2F0IGJsdXIsIHVucmVzdHJpY3RlZCBmbG9hdCByLCB1bnJlc3RyaWN0ZWQgZmxvYXQg
ZywgdW5yZXN0cmljdGVkIGZsb2F0IGIsIHVucmVzdHJpY3RlZCBmbG9hdCBhKVxuIikKKworc2hv
dWxkVGhyb3coImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjEsIC4yLCAuMykiLCAiVHlwZUVycm9y
Iik7CisKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4xLCAuMiwgLjMsIC40KSIs
ICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoMjYsIDUx
LCA3NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgTmFOLCAu
MiwgLjMsIC40KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAi
J3JnYmEoMjYsIDUxLCA3NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwg
MCwgMCwgLjEsIE5hTiwgLjMsIC40KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hh
ZG93Q29sb3IiLCAiJ3JnYmEoMjYsIDUxLCA3NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5z
ZXRTaGFkb3coMCwgMCwgMCwgLjEsIC4yLCBOYU4sIC40KSIsICJ1bmRlZmluZWQiKTsKK3Nob3Vs
ZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoMjYsIDUxLCA3NywgMC40KSciKTsKKworc2hv
dWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjEsIC4yLCAuMywgTmFOKSIsICJ1bmRlZmlu
ZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoMjYsIDUxLCA3NywgMC40
KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjUsIC40LCAuMywgLjIs
IC4xKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEo
MTI4LCAxMDIsIDc3LCAwLjIpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAw
LCAxLCAuNCwgLjMsIC4yLCAuMSwgMCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnNo
YWRvd0NvbG9yIiwgIidyZ2JhKDI1NSwgMTAyLCA3NywgMC4yKSciKTsKKworc2hvdWxkQmUoImN0
eC5zZXRTaGFkb3coMCwgMCwgMCwgMS41LCAxMCwgLTAuMSwgLTEwMCkiLCAidW5kZWZpbmVkIik7
CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDI1NSwgMjU1LCAwLCAwKSciKTsK
KwogPC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+CiA8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52
YXMtb3ZlcmxvYWRzLXNldFN0cm9rZUNvbG9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFN0cm9rZUNvbG9yLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMjcxNjkwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
Y2FudmFzLW92ZXJsb2Fkcy1zZXRTdHJva2VDb2xvci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTQsMTMgKzQsNTAgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQQogCiAKIFBBU1MgY3R4LnNldFN0cm9rZUNvbG9yKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAnIzAw
MDAwMCcKKworCit1bmRlZmluZWQgc2V0U3Ryb2tlQ29sb3IoRE9NU3RyaW5nIGNvbG9yLCBvcHRp
b25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYWxwaGEpCisKIFBBU1MgY3R4LnNldFN0cm9rZUNvbG9y
KCdyZWQnKSBpcyB1bmRlZmluZWQKLVBBU1MgY3R4LnNldFN0cm9rZUNvbG9yKDApIGlzIHVuZGVm
aW5lZAotUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoMCwgMCkgaXMgdW5kZWZpbmVkCi1QQVNTIGN0
eC5zZXRTdHJva2VDb2xvcigwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBl
IGVycm9yLgotUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoMCwgMCwgMCwgMCkgaXMgdW5kZWZpbmVk
Ci1QQVNTIGN0eC5zZXRTdHJva2VDb2xvcigwLCAwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQKLVBB
U1MgY3R4LnNldFN0cm9rZUNvbG9yKDAsIDAsIDAsIDAsIDAsIDApIGlzIHVuZGVmaW5lZAorUEFT
UyBjdHguc3Ryb2tlU3R5bGUgaXMgJyNmZjAwMDAnCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvcign
cmVkJywgLjUpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMgJ3JnYmEoMjU1
LCAwLCAwLCAwLjUpJworUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoJ3JlZCcsIE5hTikgaXMgdW5k
ZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSgyNTUsIDAsIDAsIDAuNSknCisK
KwordW5kZWZpbmVkIHNldFN0cm9rZUNvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCBncmF5TGV2ZWws
IG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSA9IDEpCisKK1BBU1MgY3R4LnNldFN0
cm9rZUNvbG9yKC4yNSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAnIzQw
NDA0MCcKK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9yKC4yNSwgLjUpIGlzIHVuZGVmaW5lZAorUEFT
UyBjdHguc3Ryb2tlU3R5bGUgaXMgJ3JnYmEoNjQsIDY0LCA2NCwgMC41KScKK1BBU1MgY3R4LnNl
dFN0cm9rZUNvbG9yKE5hTiwgLjUpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUg
aXMgJ3JnYmEoNjQsIDY0LCA2NCwgMC41KScKK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9yKC4yNSwg
TmFOKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDY0LCA2NCwg
NjQsIDAuNSknCisKKwordW5kZWZpbmVkIHNldFN0cm9rZUNvbG9yKHVucmVzdHJpY3RlZCBmbG9h
dCByLCB1bnJlc3RyaWN0ZWQgZmxvYXQgZywgdW5yZXN0cmljdGVkIGZsb2F0IGIsIHVucmVzdHJp
Y3RlZCBmbG9hdCBhKQorCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvciguMSwgLjIsIC4zKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgorUEFTUyBjdHguc2V0U3Ryb2tlQ29s
b3IoLjEsIC4yLCAuMywgLjQpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMg
J3JnYmEoMjYsIDUxLCA3NywgMC40KScKK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9yKE5hTiwgLjIs
IC4zLCAuNCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSgyNiwg
NTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoLjEsIE5hTiwgLjMsIC40KSBp
cyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAu
NCknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvciguMSwgLjIsIE5hTiwgLjQpIGlzIHVuZGVmaW5l
ZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMgJ3JnYmEoMjYsIDUxLCA3NywgMC40KScKK1BBU1Mg
Y3R4LnNldFN0cm9rZUNvbG9yKC4xLCAuMiwgLjMsIE5hTikgaXMgdW5kZWZpbmVkCitQQVNTIGN0
eC5zdHJva2VTdHlsZSBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0U3Ry
b2tlQ29sb3IoLjUsIC40LCAuMywgLjIsIC4xKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9r
ZVN0eWxlIGlzICdyZ2JhKDEyOCwgMTAyLCA3NywgMC4yKScKK1BBU1MgY3R4LnNldFN0cm9rZUNv
bG9yKDEsIC40LCAuMywgLjIsIC4xLCAwKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0
eWxlIGlzICdyZ2JhKDI1NSwgMTAyLCA3NywgMC4yKScKK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9y
KDEuNSwgMTAsIC0wLjEsIC0xMDApIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUg
aXMgJ3JnYmEoMjU1LCAyNTUsIDAsIDApJwogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMt
b3ZlcmxvYWRzLXNldFN0cm9rZUNvbG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRTdHJva2VDb2xvci5odG1sCShyZXZpc2lv
biAyNzE2OTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNl
dFN0cm9rZUNvbG9yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTcsMTkgKzcsNjkgQEAKIDxzY3Jp
cHQ+CiBkZXNjcmlwdGlvbigiVGVzdCB0aGUgYmVoYXZpb3Igb2YgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELnNldFN0cm9rZUNvbG9yKCkgd2hlbiBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgbnVtYmVy
cyBvZiBhcmd1bWVudHMuIik7CiAKLXZhciBjdHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdj
YW52YXMnKS5nZXRDb250ZXh0KCcyZCcpOworbGV0IGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7CiAKLXZhciBUeXBlRXJyb3IgPSAiVHlwZUVy
cm9yOiBUeXBlIGVycm9yIjsKLXZhciBUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMgPSAiVHlw
ZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyI7CitsZXQgVHlwZUVycm9yID0gIlR5cGVFcnJv
cjogVHlwZSBlcnJvciI7CitsZXQgVHlwZUVycm9yTm90RW5vdWdoQXJndW1lbnRzID0gIlR5cGVF
cnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMiOwogCiBzaG91bGRUaHJvdygiY3R4LnNldFN0cm9r
ZUNvbG9yKCkiLCAiVHlwZUVycm9yTm90RW5vdWdoQXJndW1lbnRzIik7CitzaG91bGRCZSgiY3R4
LnN0cm9rZVN0eWxlIiwgIicjMDAwMDAwJyIpOworCisKK2RlYnVnKCJcblxudW5kZWZpbmVkIHNl
dFN0cm9rZUNvbG9yKERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0
IGFscGhhKVxuIikKIHNob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoJ3JlZCcpIiwgInVuZGVm
aW5lZCIpOwotc2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigwKSIsICJ1bmRlZmluZWQiKTsK
LXNob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoMCwgMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91
bGRUaHJvdygiY3R4LnNldFN0cm9rZUNvbG9yKDAsIDAsIDApIiwgIlR5cGVFcnJvciIpOwotc2hv
dWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsKLXNo
b3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoMCwgMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7
Ci1zaG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKDAsIDAsIDAsIDAsIDAsIDApIiwgInVuZGVm
aW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICInI2ZmMDAwMCciKTsKKworc2hv
dWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigncmVkJywgLjUpIiwgInVuZGVmaW5lZCIpOworc2hv
dWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICIncmdiYSgyNTUsIDAsIDAsIDAuNSknIik7CisKK3No
b3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoJ3JlZCcsIE5hTikiLCAidW5kZWZpbmVkIik7Citz
aG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDI1NSwgMCwgMCwgMC41KSciKTsKKwor
CitkZWJ1ZygiXG5cbnVuZGVmaW5lZCBzZXRTdHJva2VDb2xvcih1bnJlc3RyaWN0ZWQgZmxvYXQg
Z3JheUxldmVsLCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYWxwaGEgPSAxKVxuIikKKwor
c2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xvciguMjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxk
QmUoImN0eC5zdHJva2VTdHlsZSIsICInIzQwNDA0MCciKTsKKworc2hvdWxkQmUoImN0eC5zZXRT
dHJva2VDb2xvciguMjUsIC41KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tl
U3R5bGUiLCAiJ3JnYmEoNjQsIDY0LCA2NCwgMC41KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRT
dHJva2VDb2xvcihOYU4sIC41KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tl
U3R5bGUiLCAiJ3JnYmEoNjQsIDY0LCA2NCwgMC41KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRT
dHJva2VDb2xvciguMjUsIE5hTikiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9r
ZVN0eWxlIiwgIidyZ2JhKDY0LCA2NCwgNjQsIDAuNSknIik7CisKKworZGVidWcoIlxuXG51bmRl
ZmluZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IHIsIHVucmVzdHJpY3RlZCBm
bG9hdCBnLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYiwgdW5yZXN0cmljdGVkIGZsb2F0IGEpXG4iKQor
CitzaG91bGRUaHJvdygiY3R4LnNldFN0cm9rZUNvbG9yKC4xLCAuMiwgLjMpIiwgIlR5cGVFcnJv
ciIpOworCitzaG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKC4xLCAuMiwgLjMsIC40KSIsICJ1
bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tlU3R5bGUiLCAiJ3JnYmEoMjYsIDUxLCA3
NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcihOYU4sIC4yLCAuMywg
LjQpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICIncmdiYSgy
NiwgNTEsIDc3LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKC4xLCBO
YU4sIC4zLCAuNCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwg
IidyZ2JhKDI2LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29s
b3IoLjEsIC4yLCBOYU4sIC40KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tl
U3R5bGUiLCAiJ3JnYmEoMjYsIDUxLCA3NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRT
dHJva2VDb2xvciguMSwgLjIsIC4zLCBOYU4pIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0
eC5zdHJva2VTdHlsZSIsICIncmdiYSgyNiwgNTEsIDc3LCAwLjQpJyIpOworCitzaG91bGRCZSgi
Y3R4LnNldFN0cm9rZUNvbG9yKC41LCAuNCwgLjMsIC4yLCAuMSkiLCAidW5kZWZpbmVkIik7Citz
aG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDEyOCwgMTAyLCA3NywgMC4yKSciKTsK
Kworc2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigxLCAuNCwgLjMsIC4yLCAuMSwgMCkiLCAi
dW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDI1NSwgMTAy
LCA3NywgMC4yKSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigxLjUsIDEwLCAt
MC4xLCAtMTAwKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tlU3R5bGUiLCAi
J3JnYmEoMjU1LCAyNTUsIDAsIDApJyIpOworCiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KIDwvYm9keT4K
</data>
<flag name="commit-queue"
          id="435882"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418045</attachid>
            <date>2021-01-21 08:55:00 -0800</date>
            <delta_ts>2021-01-21 09:41:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220716-20210121072338.patch</filename>
            <type>text/plain</type>
            <size>112166</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDIxLTAxLTIwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdvcmsgY29sb3IgY2xhbXBpbmcg
bG9naWMgdG8gYmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBvZiBhZGRpbmcgc3VwcG9ydCBm
b3IgRXh0ZW5kZWQtc1JHQiB0byBjb2xvciB0eXBlcywKKyAgICAgICAgdGhpcyBhZGRzIGNvbnN0
ZXhwciBtZXRhZGF0YSBhbmQgaGVscGVyIGZ1bmN0aW9ucyB0byBjcmVhdGUgY29sb3IKKyAgICAg
ICAgdHlwZXMgd2l0aCB0aGUgY29ycmVjdCBjbGFtcGVkIChvciB1bmNsYW1wZWQpIHZhbHVlcyBh
bmQgYWRvcHRzIHRoZW0KKyAgICAgICAgdGhyb3VnaG91dCB0aGUgY29kZSBiYXNlLgorCisgICAg
ICAgIC0gUmVtb3ZlcyAiY29tcG9uZW50IGJ5dGVzIiBhbmQgImNvbXBvbmVudCBmbG9hdHMiIGNv
bmNlcHRzIHJlcGxhY2luZworICAgICAgICAgIHdpdGggZnVuY3Rpb25zIHRoYXQgdGFrZSBjb2xv
ciB0eXBlcyBhcyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzOgorICAgICAgICAgIAorICAgICAgICAgICAg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZXMvY29udmVydFRvQ29tcG9uZW50RmxvYXRzIC0+IGNvbnZl
cnRUbzxDb2xvclR5cGU8VD4+CisgICAgICAgICAgICBjbGFtcFRvQ29tcG9uZW50Qnl0ZXMvY2xh
bXBUb0NvbXBvbmVudEZsb2F0cyAtPiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxDb2xvclR5
cGU8VD4+CisKKyAgICAgICAgLSBBZGRzIE1vZGVsIHR5cGUgYWxpYXNlcyB0byBlYWNoIGNvbG9y
IHR5cGUgd2hpY2ggY2FuIHNwZWNpZnkgdHJhaXRzIAorICAgICAgICAgIGZvciB0aGF0IHR5cGUg
b2YgY29sb3IuIFRoZXNlIHRyYWl0cyBjdXJyZW50bHkgb25seSBpbmNsdWRlIHRoZSB2YWxpZCAK
KyAgICAgICAgICBjb21wb25lbnQgcmFuZ2VzIGFuZCB3aGV0aGVyIHRoZSBjb2xvciBjYW4gYmUg
aW52ZXJ0ZWQuIE1vcmUgd2lsbCBiZSAKKyAgICAgICAgICBhZGRlZCAobGlrZSB3aGl0ZSBwb2lu
dCBhbmQgYmFzZSBjb2xvciBzcGFjZSkgdG8gaGVscCBzaW1wbGlmeSB1dGlsaXR5IAorICAgICAg
ICAgIGFuZCBjb252ZXJzaW9uIGNvZGUuIAorCisgICAgICAgIC0gQWRkcyBhc3NlcnRpb25zIHRv
IGVhY2ggY29sb3IgdHlwZSBjb25zdHJ1Y3RvciB0aGF0IHRoZSB2YWx1ZXMgcGFzc2VkCisgICAg
ICAgICAgYXJlIHdpdGhpbiB0aGUgdmFsaWQgcmFuZ2VzIChhcyBzcGVjaWZpZWQgYnkgdGhlIE1v
ZGVsKS4KKworICAgICAgICAtIFJlbW92ZWQgYXNGb28oY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+
JikgZnVuY3Rpb25zLCB3aGljaCB3ZXJlIGEgbGl0dGxlIAorICAgICAgICAgIHRvICBzaW1pbGFy
bHkgbmFtZWQgdG8gdGhlIHRvRm9vKCkgZnVuY3Rpb25zLiBJbnN0ZWFkLCB0aGUgZ2VuZXJpYyAK
KyAgICAgICAgICBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPFQ+PiAob3IgaXQncyBjbGFt
cGluZyB2YXJpYW50cykgY2FuIGJlIHVzZWQKKyAgICAgICAgICB0byBjb252ZXJ0IGZyb20gQ29s
b3JDb21wb25lbnRzIHRvIGNvbG9yIHR5cGVzLgorCisgICAgICAgIC0gQWRkcyBBbHBoYVRyYWl0
cyB0byBtb2RlbCBhbHBoYSB2YWx1ZXMgYXMgdGhlc2UgYXJlIGNvbnNpc3RlbnQgYmV0d2Vlbgor
ICAgICAgICAgIGNvbG9yIHR5cGVzIGFuZCBvbmx5IGNoYW5nZSBiYXNlZCBvbiBjb21wb25lbnQg
dHlwZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRl
ZENTU09NUkdCQ29sb3IuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRo
cy5jcHA6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
OgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JDb252ZXJzaW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b2xvckNvbnZlcnNpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVz
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29sb3JEaXJlY3QyRC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvQ29s
b3JJT1MubW06CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAg
ICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwu
aDoKKwogMjAyMS0wMS0yMSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IEVuc3VyZSBjcmVhdGVTdHJlYW1zIGdldHMgdmFsaWQgSlNHbG9iYWxPYmplY3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBnY2hhciog
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXgKIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9S
KQogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dHMoY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZl
cnRUbzxTUkdCQTxmbG9hdD4+KGNvcmVPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAgICAgIHJl
dHVybiBnX3N0cmR1cF9wcmludGYoInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29sb3IucmVk
LCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjcxNjkwKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NDcsNyArMTQ0Nyw3IEBAIC0gKE5TU3RyaW5n
ICopYWNjZXNzaWJpbGl0eUNvbG9yU3RyaW5nVmEKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAg
IGlmIChzZWxmLmF4QmFja2luZ09iamVjdC0+aXNDb2xvcldlbGwoKSkgewotICAgICAgICBhdXRv
IGNvbG9yID0gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5j
b2xvclZhbHVlKCkpOworICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydFRvPFNSR0JBPGZsb2F0
Pj4oc2VsZi5heEJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7CiAgICAgICAgIHJldHVybiBb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiAlNy41ZiAlNy41ZiAlNy41ZiAxIiwgY29s
b3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZV07CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjcxNjkwKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzODUsNyArMjM4NSw3IEBAIEFMTE9XX0RFUFJF
Q0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgcmV0dXJuIEAoYmFja2luZ09i
amVjdC0+aXNTZWxlY3RlZCgpKTsKIAogICAgICAgICBpZiAoYmFja2luZ09iamVjdC0+aXNDb2xv
cldlbGwoKSkgewotICAgICAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEZs
b2F0cyhiYWNraW5nT2JqZWN0LT5jb2xvclZhbHVlKCkpOworICAgICAgICAgICAgYXV0byBjb2xv
ciA9IGNvbnZlcnRUbzxTUkdCQTxmbG9hdD4+KGJhY2tpbmdPYmplY3QtPmNvbG9yVmFsdWUoKSk7
CiAgICAgICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJyZ2IgJTcu
NWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWVdOwog
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01S
R0JDb2xvci5oCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVj
YXRlZENTU09NUkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwcml2
YXRlOgogICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkKSkK
ICAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuZ3JlZW4pKQog
ICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWUpKQotICAg
ICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgY29udmVydFRvQ29tcG9uZW50Rmxv
YXQobV9jb2xvci5hbHBoYSkpKQorICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25l
ciwgY29sb3IuYWxwaGFBc0Zsb2F0KCkpKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlckZhc3RQYXRocy5jcHAJKHJldmlzaW9u
IDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyRmFzdFBhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IHN0YXRpYyAKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIGlmIChjdXJyZW50ICE9IGVuZCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBu
ZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFs
cGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBjbGFtcFRvQ29t
cG9uZW50Qnl0ZXMgd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+Lgor
ICAgICAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8dWludDhfdD4+
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsgLy8gRklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9l
c24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUgcGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9w
YXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3Ry
dWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAgIH0KIAogICAgIC8vIFRyeSByZ2IoKSBzeW50
YXguCkBAIC01MDUsNyArNTA1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4g
c3RhdGljIAogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKGN1
cnJlbnQgIT0gZW5kKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
cmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ocmVkLCBncmVlbiwgYmx1ZSk7IC8v
IEZJWE1FOiBBbHJlYWR5IGNsYW1wZWQsIGRvZXNuJ3QgbmVlZCB0byByZS1jbGFtcC4gVXBkYXRl
IHBhcnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UvcGFyc2VBbHBoYVZhbHVlIHRvIHJldHVybiB1aW50
OF90IGFuZCByZXBsYWNlIGNhbGwgdG8gY2xhbXBUb0NvbXBvbmVudEJ5dGVzIHdpdGggZGlyZWN0
IGNvbnN0cnVjdGlvbiBvZiBTUkdCQTx1aW50OF90Pi4KKyAgICAgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PihyZWQsIGdyZWVuLCBibHVlKTsgLy8g
RklYTUU6IEFscmVhZHkgY2xhbXBlZCwgZG9lc24ndCBuZWVkIHRvIHJlLWNsYW1wLiBVcGRhdGUg
cGFyc2VDb2xvckludE9yUGVyY2VudGFnZS9wYXJzZUFscGhhVmFsdWUgdG8gcmV0dXJuIHVpbnQ4
X3QgYW5kIHJlcGxhY2UgY2FsbCB0byBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1
aW50OF90Pj4gd2l0aCBkaXJlY3QgY29uc3RydWN0aW9uIG9mIFNSR0JBPHVpbnQ4X3Q+LgogICAg
IH0KIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MSw3ICs2NzEsNyBAQCBzdGF0aWMgdWlu
dDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgCiAgICAgaWYgKGlzUGVyY2VudGFnZSkKICAg
ICAgICAgdmFsdWUgPSB2YWx1ZSAvIDEwMC4wICogMjU1LjA7CiAKLSAgICByZXR1cm4gY29udmVy
dFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnRQcmVz
Y2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFy
c2VSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtNzM5LDcgKzcz
OSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAgICAgfQotICAg
ICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYWxwaGEpOworICAg
ICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oYWxwaGEp
OwogICAgIH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKQEAgLTc5NCw3ICs3OTQsNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VIU0xQYXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgaWYgKCFhcmdzLmF0
RW5kKCkpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCi0gICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKHRvU1JHQkEoSFNMQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3JBcnJheVswXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzFdKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMl0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pKTsK
KyAgICByZXR1cm4gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKEhTTEE8ZmxvYXQ+
IHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3JBcnJheVsxXSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvckFycmF5WzJdKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KSk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxmbG9hdD4gcGFy
c2VPcHRpb25hbEFscGhhKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMjcx
NjkwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02MDEsNyArNjAxLDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6
ZGV0ZWN0Q29udGVudEluUgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGNvbG9y
IHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJhY2tncm91bmRzLCBzaW5jZSBvbmx5IG9u
ZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgogICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5s
aWdodG5lc3MgPSAwLjVmOwogICAgICAgICAgICAgICAgICAgICAgICAgaHNsYS5hbHBoYSAqPSAw
LjM4ZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBjb252
ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGEpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gdW5kZXJsaW5lQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JH
QkEoaHNsYSkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIENTU1ZhbHVlQ3VycmVudGNvbG9y
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yLCBzZXJpYWxpemF0aW9uRm9y
Q1NTKHVuZGVybGluZUNvbG9yKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwJKHJldmlzaW9uIDI3MTY5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogICAgIC8vIE5vbi1zdGFu
ZGFyZCBsZWdhY3kgYWxpYXNlcyAoQ2FudmFzRmlsbFN0cm9rZVN0eWxlcykuCiAgICAgdW5kZWZp
bmVkIHNldFN0cm9rZUNvbG9yKERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVk
IGZsb2F0IGFscGhhKTsKLSAgICB1bmRlZmluZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVk
IGZsb2F0IGdyYXlMZXZlbCwgb3B0aW9uYWwgZmxvYXQgYWxwaGEgPSAxKTsKKyAgICB1bmRlZmlu
ZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwgb3B0aW9uYWwg
dW5yZXN0cmljdGVkIGZsb2F0IGFscGhhID0gMSk7CiAgICAgdW5kZWZpbmVkIHNldFN0cm9rZUNv
bG9yKHVucmVzdHJpY3RlZCBmbG9hdCByLCB1bnJlc3RyaWN0ZWQgZmxvYXQgZywgdW5yZXN0cmlj
dGVkIGZsb2F0IGIsIHVucmVzdHJpY3RlZCBmbG9hdCBhKTsKICAgICB1bmRlZmluZWQgc2V0Rmls
bENvbG9yKERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhh
KTsKICAgICB1bmRlZmluZWQgc2V0RmlsbENvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCBncmF5TGV2
ZWwsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSA9IDEpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MDMsNiArOTAzLDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpyZXNl
dAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdHJva2VDb2xvcihjb25z
dCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gYWxwaGEpCiB7CiAgICAgaWYgKGFscGhh
KSB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKCphbHBoYSkpCisgICAgICAgICAgICByZXR1cm47
CisKICAgICAgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmdX
aXRoT3ZlcnJpZGVBbHBoYShjb2xvciwgYWxwaGEudmFsdWUoKSwgY2FudmFzQmFzZSgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MTcsNyArOTIwLDEwIEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3QKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewot
ICAgIGF1dG8gY29sb3IgPSBTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWws
IGFscGhhIH07CisgICAgaWYgKHN0ZDo6aXNuYW4oZ3JheUxldmVsKSB8fCBzdGQ6OmlzbmFuKGFs
cGhhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBjb2xvciA9IG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZl
bCwgYWxwaGEpOwogICAgIGlmIChzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudChjb2xv
cikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xv
cikpOwpAQCAtOTI1LDcgKzkzMSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldFN0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tl
Q29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBhdXRvIGNv
bG9yID0gU1JHQkEgeyByLCBnLCBiLCBhIH07CisgICAgaWYgKHN0ZDo6aXNuYW4ocikgfHwgc3Rk
Ojppc25hbihnKSB8fCBzdGQ6OmlzbmFuKGIpICB8fCBzdGQ6OmlzbmFuKGEpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JH
QkE8ZmxvYXQ+PihyLCBnLCBiLCBhKTsKICAgICBpZiAoc3RhdGUoKS5zdHJva2VTdHlsZS5pc0Vx
dWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0U3Ryb2tlU3R5bGUoQ2Fu
dmFzU3R5bGUoY29sb3IpKTsKQEAgLTkzNCw2ICs5NDMsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnNldFN0CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gYWxwaGEp
CiB7CiAgICAgaWYgKGFscGhhKSB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKCphbHBoYSkpCisg
ICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpj
cmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29sb3IsIGFscGhhLnZhbHVlKCksIGNh
bnZhc0Jhc2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTQ4LDcgKzk2MCwxMCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpCiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZlbCwgZmxv
YXQgYWxwaGEpCiB7Ci0gICAgYXV0byBjb2xvciA9IFNSR0JBIHsgZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAoc3RkOjppc25hbihncmF5TGV2ZWwpIHx8
IHN0ZDo6aXNuYW4oYWxwaGEpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNvbG9yID0g
bWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5TGV2ZWwsIGdyYXlM
ZXZlbCwgZ3JheUxldmVsLCBhbHBoYSk7CiAgICAgaWYgKHN0YXRlKCkuZmlsbFN0eWxlLmlzRXF1
aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRGaWxsU3R5bGUoQ2FudmFz
U3R5bGUoY29sb3IpKTsKQEAgLTk1Niw3ICs5NzEsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRGaQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldEZpbGxDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAg
IGF1dG8gY29sb3IgPSBTUkdCQSB7IHIsIGcsIGIsIGEgfTsKKyAgICBpZiAoc3RkOjppc25hbihy
KSB8fCBzdGQ6OmlzbmFuKGcpIHx8IHN0ZDo6aXNuYW4oYikgIHx8IHN0ZDo6aXNuYW4oYSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY29sb3IgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFt
cGluZzxTUkdCQTxmbG9hdD4+KHIsIGcsIGIsIGEpOwogICAgIGlmIChzdGF0ZSgpLmZpbGxTdHls
ZS5pc0VxdWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0RmlsbFN0eWxl
KENhbnZhc1N0eWxlKGNvbG9yKSk7CkBAIC0xMjg5LDYgKzEzMDcsOSBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnN0cm9rCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIs
IGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcsIE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkKIHsKKyAg
ICBpZiAoYWxwaGEgJiYgc3RkOjppc25hbigqYWxwaGEpKQorICAgICAgICByZXR1cm47CisKICAg
ICBDb2xvciBjb2xvciA9IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogICAgIGlmICghY29sb3JT
dHJpbmcuaXNOdWxsKCkpIHsKICAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yT3JDdXJyZW50Q29s
b3IoY29sb3JTdHJpbmcsIGNhbnZhc0Jhc2UoKSk7CkBAIC0xMzAwLDEyICsxMzIxLDE4IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwg
ZmxvYXQgYmx1ciwgZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzZXRTaGFk
b3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBjb252ZXJ0VG9Db21wb25lbnRCeXRl
cyhTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH0pKTsKKyAg
ICBpZiAoc3RkOjppc25hbihncmF5TGV2ZWwpIHx8IHN0ZDo6aXNuYW4oYWxwaGEpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVy
LCBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPGZsb2F0Pj4oZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKSk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdp
ZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIs
IGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1
ciwgY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyByLCBnLCBiLCBhIH0pKTsKKyAgICBp
ZiAoc3RkOjppc25hbihyKSB8fCBzdGQ6OmlzbmFuKGcpIHx8IHN0ZDo6aXNuYW4oYikgIHx8IHN0
ZDo6aXNuYW4oYSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIGhlaWdodCksIGJsdXIsIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4obWFrZUZyb21D
b21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihyLCBnLCBiLCBhKSkpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI3MTY5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsNyArOTUsNyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3IgY29s
b3IpCiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTUkdCQTxmbG9hdD4mIGNv
bG9yQ29tcG9uZW50cykKLSAgICA6IG1fc3R5bGUoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29s
b3JDb21wb25lbnRzKSkKKyAgICA6IG1fc3R5bGUoY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pihj
b2xvckNvbXBvbmVudHMpKQogewogfQogCkBAIC0xNDgsNyArMTQ4LDcgQEAgYm9vbCBDYW52YXNT
dHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2
YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAgIHJldHVy
biBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xv
cj4obV9zdHlsZSkgPT0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29tcG9uZW50cyk7CisgICAg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6Z2V0
PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMp
OwogfQogCiB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKFJl
ZlB0cjxKU09OOjpPYmoKIAogICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUoUHJv
dG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKICAgICBpZiAoIWEpCi0gICAgICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOwotICAgIHJldHVybiBj
bGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGUoKmEpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiKTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmdFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4oKnIsICpnLCAqYiwgY29udmVydEZs
b2F0QWxwaGFUbzx1aW50OF90PigqYSkpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdD
b2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdPYmplY3Qp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZp
c2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgQ29sb3IgQ29sb3I6OmxpZ2h0ZW5l
ZCgpIGNvbnN0CiAKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptaW4oMS4wZiwgdiArIDAu
MzNmKSAvIHY7CiAKLSAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBt
dWx0aXBsaWVyICogciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOworICAg
IHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgbXVsdGlwbGllciAqIHIs
IG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSB9KTsKIH0KIAogQ29sb3IgQ29sb3I6
OmRhcmtlbmVkKCkgY29uc3QKQEAgLTEwNSw3ICsxMDUsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2Vu
ZWQoKSBjb25zdAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CiAKLSAgICBy
ZXR1cm4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoU1JHQkEgeyBtdWx0aXBsaWVyICogciwgbXVs
dGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOworICAgIHJldHVybiBjb252ZXJ0VG88
U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgbXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBt
dWx0aXBsaWVyICogYiwgYSB9KTsKIH0KIAogZmxvYXQgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0
CkBAIC0xNDEsNyArMTQxLDE1IEBAIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBh
bHBoYSkKIENvbG9yIENvbG9yOjppbnZlcnRlZENvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBj
b25zdAogewogICAgIHJldHVybiBjYWxsT25VbmRlcmx5aW5nVHlwZShbJl0gKGNvbnN0IGF1dG8m
IHVuZGVybHlpbmdDb2xvcikgLT4gQ29sb3IgewotICAgICAgICByZXR1cm4gaW52ZXJ0ZWRDb2xv
cldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFscGhhKTsKKyAgICAgICAgdXNp
bmcgQ29sb3JUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBlKHVuZGVybHlpbmdDb2xvcik+Owor
CisgICAgICAgIC8vIEZJWE1FOiBEZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBtZWFuaW5nZnVsIHVu
ZGVyc3RhbmRpbmcgb2YgaW52ZXJzaW9uIHRoYXQgd29ya3MKKyAgICAgICAgLy8gYmV0dGVyIGZv
ciBub24taW52ZXJ0aWJsZSBjb2xvciB0eXBlcyBsaWtlIExhYiBvciBjb25zaWRlciByZW1vdmlu
ZyB0aGlzIGluIGZhdm9yCisgICAgICAgIC8vIG9mIGFsdGVybmF0aXZlcy4KKyAgICAgICAgaWYg
Y29uc3RleHByIChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUpCisgICAgICAgICAgICBy
ZXR1cm4gaW52ZXJ0ZWRDb2xvcldpdGhPdmVycmlkZW5BbHBoYSh1bmRlcmx5aW5nQ29sb3IsIGFs
cGhhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGludmVydGVkQ29sb3JXaXRo
T3ZlcnJpZGVuQWxwaGEodG9TUkdCQSh1bmRlcmx5aW5nQ29sb3IpLCBhbHBoYSk7CiAgICAgfSk7
CiB9CiAKQEAgLTE1Nyw3ICsxNjUsNyBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21w
b25lbnRzPGZsCiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIHsgYXNF
eHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OwotICAg
IHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRUb0Nv
bXBvbmVudEZsb2F0cyhhc0lubGluZSgpKSkgfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpT
UkdCLCBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+Pihhc0lubGluZSgp
KSkgfTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAxLDggQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5k
ZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9CiAgICAgYm9v
bCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCku
YWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9Ci0gICAgdWludDhfdCBhbHBo
YUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0VG9Db21wb25lbnRC
eXRlKGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KLSAgICBmbG9h
dCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVk
KCkuYWxwaGEoKSA6IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFzSW5saW5lKCkuYWxwaGEpOyB9
CisgICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBj
b252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5s
aW5lKCkuYWxwaGE7IH0KKyAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxm
bG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1
bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNv
bnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KQEAg
LTMzMSwxMSArMzMxLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0
b1MKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yOwogICAgICAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0cyhjb2xvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZl
cnRUbzxTUkdCQTxmbG9hdD4+KGNvbG9yKTsKICAgICAgICAgfSwKICAgICAgICAgW10gKGNvbnN0
IGF1dG8mIGNvbG9yKSB7CiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PFQsIHVpbnQ4X3Q+KQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyh0b1NSR0JBKGNvbG9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUbzxT
UkdCQTx1aW50OF90Pj4odG9TUkdCQShjb2xvcikpOwogICAgICAgICAgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRvU1JH
QkEoY29sb3IpOwogICAgICAgICB9CkBAIC0zOTEsMTUgKzM5MSwxNSBAQCBpbmxpbmUgdm9pZCBD
b2xvcjo6c2V0RXh0ZW5kZWRDb2xvcihSZWY8CiAKIGlubGluZSBib29sIENvbG9yOjppc0JsYWNr
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRl
cmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OmlzQmxhY2soY29sb3IpOworICAgIHJldHVybiBjb2xvci5jYWxsT25VbmRlcmx5aW5nVHlw
ZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSB7CisgICAgICAgIHJldHVybiBXZWJD
b3JlOjppc0JsYWNrKHVuZGVybHlpbmdDb2xvcik7CiAgICAgfSk7CiB9CiAKIGlubGluZSBib29s
IENvbG9yOjppc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHJldHVybiBj
b2xvci5jYWxsT25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgY29sb3IpIHsKLSAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OmlzV2hpdGUoY29sb3IpOworICAgIHJldHVybiBjb2xvci5jYWxs
T25VbmRlcmx5aW5nVHlwZShbXSAoY29uc3QgYXV0byYgdW5kZXJseWluZ0NvbG9yKSB7CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjppc1doaXRlKHVuZGVybHlpbmdDb2xvcik7CiAgICAgfSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
QmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJhY2tkCiAgICAgaW50IGcg
PSAoYmFja2Ryb3BHICogYmFja2Ryb3BBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3Vy
Y2VBICogc291cmNlRykgLyBkOwogICAgIGludCBiID0gKGJhY2tkcm9wQiAqIGJhY2tkcm9wQSAq
ICgweEZGIC0gc291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUIpIC8gZDsKIAotICAg
IHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIGEpOworICAgIHJl
dHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4ociwgZywgYiwg
YSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTc4
LDcgKzc4LDcgQEAgQ29sb3IgYmxlbmRXaXRoV2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogICAg
ICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywgYWxwaGEpOwogICAgICAgICBp
bnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEpOwogCi0gICAgICAgIHJlc3Vs
dCA9IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4ociwgZywgYiwgYWxwaGEpOworICAgICAg
ICByZXN1bHQgPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4ociwg
ZywgYiwgYWxwaGEpOwogCiAgICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYmIGIgPj0gMCkK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbG9yIGJsZW5kKGNvbnN0
IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gcHJl
bXVsdGlwbGllZENlaWxpbmcoZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKSk7CiAgICAgYXV0
byBwcmVtdWx0aXBsaWVkVG8gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyh0by50b1NSR0JBTG9zc3k8
dWludDhfdD4oKSk7CiAKLSAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gY2xhbXBUb0Nv
bXBvbmVudEJ5dGVzPFNSR0JBPigKKyAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8dWludDhfdD4+KAogICAgICAgICBXZWJDb3Jl
OjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5yZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIHByb2dy
ZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uZ3JlZW4sIHBy
ZW11bHRpcGxpZWRUby5ncmVlbiwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpibGVuZChw
cmVtdWx0aXBsaWVkRnJvbS5ibHVlLCBwcmVtdWx0aXBsaWVkVG8uYmx1ZSwgcHJvZ3Jlc3MpLApA
QCAtMTIwLDcgKzEyMCw3IEBAIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENv
bG8KICAgICBhdXRvIGZyb21TUkdCID0gZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICBhdXRvIHRvU1JHQiA9IHRvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJu
IGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4oCisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9u
ZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PigKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJv
bVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252ZXJzaW9u
LmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JDb252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjggKzMyLDc0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dChmbG9hdCBjKQorLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1JHQgorLy8gaHR0
cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXgu
aHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhclNSR0JN
YXRyaXggeworICAgICAzLjI0MDQ1NDJmLCAtMS41MzcxMzg1ZiwgLTAuNDk4NTMxNGYsCisgICAg
LTAuOTY5MjY2MGYsICAxLjg3NjAxMDhmLCAgMC4wNDE1NTYwZiwKKyAgICAgMC4wNTU2NDM0Ziwg
LTAuMjA0MDI1OWYsICAxLjA1NzIyNTJmCit9OworCisvLyBodHRwczovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9TUkdCCisvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1s
P0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCitzdGF0aWMgY29uc3RleHByIENvbG9yTWF0cml4PDMs
IDM+IGxpbmVhclNSR0JUb1hZWk1hdHJpeCB7CisgICAgMC40MTI0NTY0ZiwgIDAuMzU3NTc2MWYs
ICAwLjE4MDQzNzVmLAorICAgIDAuMjEyNjcyOWYsICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwK
KyAgICAwLjAxOTMzMzlmLCAgMC4xMTkxOTIwZiwgIDAuOTUwMzA0MWYKK307CisKKy8vIGh0dHBz
Oi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQorc3Rh
dGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiB4eXpUb0xpbmVhckRpc3BsYXlQM01hdHJp
eCB7CisgICAgIDIuNDkzNDk2OTExOTQxNDI1ZiwgIC0wLjkzMTM4MzYxNzkxOTEyMzlmLCAtMC40
MDI3MTA3ODQ0NTA3MTY4ZiwKKyAgICAtMC44Mjk0ODg5Njk1NjE1NzQ3ZiwgIDEuNzYyNjY0MDYw
MzE4MzQ2M2YsICAwLjAyMzYyNDY4NTg0MTk0MzZmLAorICAgICAwLjAzNTg0NTgzMDI0Mzc4NDVm
LCAtMC4wNzYxNzIzODkyNjgwNDE4ZiwgIDAuOTU2ODg0NTI0MDA3Njg3MmYKK307CisKKy8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQor
c3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJEaXNwbGF5UDNUb1hZWk1h
dHJpeCB7CisgICAgMC40ODY1NzA5NDg2NDgyMTYyZiwgMC4yNjU2Njc2OTMxNjkwOTMxZiwgMC4x
OTgyMTcyODUyMzQzNjNmLAorICAgIDAuMjI4OTc0NTY0MDY5NzQ4OGYsIDAuNjkxNzM4NTIxODM2
NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKKyAgICAwLjBmLCAgICAgICAgICAgICAgICAwLjA0
NTExMzM4MTg1ODkwMjZmLCAxLjA0Mzk0NDM2ODkwMDk3NmYKK307CisKKy8vIGh0dHA6Ly93d3cu
YnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRtbAorc3RhdGlj
IGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7CisgICAgIDAuOTU1
NTc2NmYsIC0wLjAyMzAzOTNmLCAwLjA2MzE2MzZmLAorICAgIC0wLjAyODI4OTVmLCAgMS4wMDk5
NDE2ZiwgMC4wMjEwMDc3ZiwKKyAgICAgMC4wMTIyOTgyZiwgLTAuMDIwNDgzMGYsIDEuMzI5OTA5
OGYKK307CisKKy8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFu
X0Nocm9tQWRhcHQuaHRtbAorc3RhdGljIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENjVU
b0Q1ME1hdHJpeCB7CisgICAgIDEuMDQ3ODExMmYsIDAuMDIyODg2NmYsIC0wLjA1MDEyNzBmLAor
ICAgICAwLjAyOTU0MjRmLCAwLjk5MDQ4NDRmLCAtMC4wMTcwNDkxZiwKKyAgICAtMC4wMDkyMzQ1
ZiwgMC4wMTUwNDM2ZiwgIDAuNzUyMTMxNmYKK307CisKK2Zsb2F0IGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnRDbGFtcGluZyhmbG9hdCBjKQogewogICAgIGlmIChjIDwgMC4wMDMxMzA4ZikKLSAg
ICAgICAgcmV0dXJuIDEyLjkyZiAqIGM7CisgICAgICAgIHJldHVybiBzdGQ6Om1heDxmbG9hdD4o
MTIuOTJmICogYywgMCk7CiAKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oMS4wNTVmICogc3Rk
Ojpwb3coYywgMS4wZiAvIDIuNGYpIC0gMC4wNTVmLCAwLCAxKTsKIH0KIAotZmxvYXQgcmdiVG9M
aW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCBjKQorZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBv
bmVudENsYW1waW5nKGZsb2F0IGMpCiB7CiAgICAgaWYgKGMgPD0gMC4wNDA0NWYpCi0gICAgICAg
IHJldHVybiBjIC8gMTIuOTJmOworICAgICAgICByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KGMgLyAx
Mi45MmYsIDApOwogCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93KChjICsgMC4w
NTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCisvLyBHYW1tYSBjb252ZXJzaW9ucy4K
KwogTGluZWFyU1JHQkE8ZmxvYXQ+IHRvTGluZWFyU1JHQkEoY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKICAgICByZXR1cm4gewotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50
KGNvbG9yLnJlZCksCi0gICAgICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IuZ3Jl
ZW4pLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmJsdWUpLAorICAg
ICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50Q2xhbXBpbmcoY29sb3IucmVkKSwKKyAgICAg
ICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmdyZWVuKSwKKyAgICAg
ICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLmJsdWUpLAogICAgICAg
ICBjb2xvci5hbHBoYQogICAgIH07CiB9CkBAIC02MSw5ICsxMDcsOSBAQCBMaW5lYXJTUkdCQTxm
bG9hdD4gdG9MaW5lYXJTUkdCQShjb25zdCBTCiBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBM
aW5lYXJTUkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIGxpbmVh
clRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAgbGluZWFyVG9SR0JDb2xv
ckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25l
bnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnRDbGFtcGlu
Zyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmco
Y29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50Q2xhbXBpbmco
Y29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsKIH0KQEAgLTcxLDkgKzEx
Nyw5IEBAIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IExpbmVhclNSR0JBPGYKIExpbmVhckRp
c3BsYXlQMzxmbG9hdD4gdG9MaW5lYXJEaXNwbGF5UDMoY29uc3QgRGlzcGxheVAzPGZsb2F0PiYg
Y29sb3IpCiB7CiAgICAgcmV0dXJuIHsKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVu
dChjb2xvci5yZWQpLAotICAgICAgICByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yLmdy
ZWVuKSwKLSAgICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvci5ibHVlKSwKKyAg
ICAgICAgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yLnJlZCksCisgICAg
ICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ncmVlbiksCisgICAg
ICAgIHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGluZyhjb2xvci5ibHVlKSwKICAgICAg
ICAgY29sb3IuYWxwaGEKICAgICB9OwogfQpAQCAtODEsODEgKzEyNyw0OSBAQCBMaW5lYXJEaXNw
bGF5UDM8ZmxvYXQ+IHRvTGluZWFyRGlzcGxheVAzCiBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxh
eVAzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB7
Ci0gICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoY29sb3IucmVkKSwKLSAgICAgICAg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChjb2xvci5ncmVlbiksCi0gICAgICAgIGxpbmVhclRv
UkdCQ29sb3JDb21wb25lbnQoY29sb3IuYmx1ZSksCisgICAgICAgIGxpbmVhclRvUkdCQ29sb3JD
b21wb25lbnRDbGFtcGluZyhjb2xvci5yZWQpLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29t
cG9uZW50Q2xhbXBpbmcoY29sb3IuZ3JlZW4pLAorICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29t
cG9uZW50Q2xhbXBpbmcoY29sb3IuYmx1ZSksCiAgICAgICAgIGNvbG9yLmFscGhhCiAgICAgfTsK
IH0KIAorLy8gTWF0cml4IGNvbnZlcnNpb25zLgorCiBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5l
YXJTUkdCQShjb25zdCBYWVpBPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgLy8gaHR0cHM6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvU1JHQgotICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20u
Y29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKLSAgICBjb25zdGV4cHIgQ29s
b3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJTUkdCTWF0cml4IHsKLSAgICAgICAgIDMuMjQwNDU0
MmYsIC0xLjUzNzEzODVmLCAtMC40OTg1MzE0ZiwKLSAgICAgICAgLTAuOTY5MjY2MGYsICAxLjg3
NjAxMDhmLCAgMC4wNDE1NTYwZiwKLSAgICAgICAgIDAuMDU1NjQzNGYsIC0wLjIwNDAyNTlmLCAg
MS4wNTcyMjUyZgotICAgIH07Ci0gICAgcmV0dXJuIGFzTGluZWFyU1JHQkEoeHl6VG9MaW5lYXJT
UkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNv
bG9yKSkpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhh
PExpbmVhclNSR0JBPGZsb2F0Pj4oeHl6VG9MaW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29s
b3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBYWVpBPGZsb2F0
PiB0b1hZWkEoY29uc3QgTGluZWFyU1JHQkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAvLyBodHRw
czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCCi0gICAgLy8gaHR0cDovL3d3dy5icnVjZWxp
bmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9NYXRyaXguaHRtbAotICAgIGNvbnN0
ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBsaW5lYXJTUkdCVG9YWVpNYXRyaXggewotICAgICAgICAw
LjQxMjQ1NjRmLCAgMC4zNTc1NzYxZiwgIDAuMTgwNDM3NWYsCi0gICAgICAgIDAuMjEyNjcyOWYs
ICAwLjcxNTE1MjJmLCAgMC4wNzIxNzUwZiwKLSAgICAgICAgMC4wMTkzMzM5ZiwgIDAuMTE5MTky
MGYsICAwLjk1MDMwNDFmCi0gICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhclNSR0JUb1hZ
Wk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xv
cikpKTsKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmdFeGNlcHRBbHBoYTxY
WVpBPGZsb2F0Pj4obGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25l
bnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBMaW5lYXJEaXNwbGF5UDM8Zmxv
YXQ+IHRvTGluZWFyRGlzcGxheVAzKGNvbnN0IFhZWkE8ZmxvYXQ+JiBjb2xvcikKIHsKLSAgICAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252ZXJzaW9uLWNv
ZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4geHl6VG9MaW5lYXJEaXNwbGF5UDNN
YXRyaXggewotICAgICAgICAgMi40OTM0OTY5MTE5NDE0MjVmLCAgLTAuOTMxMzgzNjE3OTE5MTIz
OWYsIC0wLjQwMjcxMDc4NDQ1MDcxNjhmLAotICAgICAgICAtMC44Mjk0ODg5Njk1NjE1NzQ3Ziwg
IDEuNzYyNjY0MDYwMzE4MzQ2M2YsICAwLjAyMzYyNDY4NTg0MTk0MzZmLAotICAgICAgICAgMC4w
MzU4NDU4MzAyNDM3ODQ1ZiwgLTAuMDc2MTcyMzg5MjY4MDQxOGYsICAwLjk1Njg4NDUyNDAwNzY4
NzJmCi0gICAgfTsKLSAgICByZXR1cm4gYXNMaW5lYXJEaXNwbGF5UDMoeHl6VG9MaW5lYXJEaXNw
bGF5UDNNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpKSk7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxw
aGE8TGluZWFyRGlzcGxheVAzPGZsb2F0Pj4oeHl6VG9MaW5lYXJEaXNwbGF5UDNNYXRyaXgudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiB9CiAK
IFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBMaW5lYXJEaXNwbGF5UDM8ZmxvYXQ+JiBjb2xvcikK
IHsKLSAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWNvbG9yLyNjb2xvci1jb252
ZXJzaW9uLWNvZGUKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gbGluZWFyRGlzcGxh
eVAzVG9YWVpNYXRyaXggewotICAgICAgICAwLjQ4NjU3MDk0ODY0ODIxNjJmLCAwLjI2NTY2NzY5
MzE2OTA5MzFmLCAwLjE5ODIxNzI4NTIzNDM2M2YsCi0gICAgICAgIDAuMjI4OTc0NTY0MDY5NzQ4
OGYsIDAuNjkxNzM4NTIxODM2NTA2NGYsIDAuMDc5Mjg2OTE0MDkzNzQ1ZiwKLSAgICAgICAgMC4w
ZiwgICAgICAgICAgICAgICAgMC4wNDUxMTMzODE4NTg5MDI2ZiwgMS4wNDM5NDQzNjg5MDA5NzZm
Ci0gICAgfTsKLSAgICByZXR1cm4gYXNYWVpBKGxpbmVhckRpc3BsYXlQM1RvWFlaTWF0cml4LnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSkpOworICAg
IHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+
PihsaW5lYXJEaXNwbGF5UDNUb1hZWk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gQ2hyb21hdGljIEFkYXB0YXRpb24g
Y29udmVyc2lvbnMuCisKIHN0YXRpYyBYWVpBPGZsb2F0PiBjb252ZXJ0RnJvbUQ1MFdoaXRlUG9p
bnRUb0Q2NVdoaXRlUG9pbnQoY29uc3QgWFlaQTxmbG9hdD4mIGNvbG9yKQogewotICAgIC8vIGh0
dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0Nocm9tQWRhcHQuaHRt
bAotICAgIGNvbnN0ZXhwciBDb2xvck1hdHJpeDwzLCAzPiBENTBUb0Q2NU1hdHJpeCB7Ci0gICAg
ICAgICAwLjk1NTU3NjZmLCAtMC4wMjMwMzkzZiwgMC4wNjMxNjM2ZiwKLSAgICAgICAgLTAuMDI4
Mjg5NWYsICAxLjAwOTk0MTZmLCAwLjAyMTAwNzdmLAotICAgICAgICAgMC4wMTIyOTgyZiwgLTAu
MDIwNDgzMGYsIDEuMzI5OTA5OGYKLSAgICB9OwotICAgIHJldHVybiBhc1hZWkEoRDUwVG9ENjVN
YXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3Ip
KSk7CisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nRXhjZXB0QWxwaGE8WFla
QTxmbG9hdD4+KEQ1MFRvRDY1TWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29s
b3JDb21wb25lbnRzKGNvbG9yKSkpOwogfQogCiBzdGF0aWMgWFlaQTxmbG9hdD4gY29udmVydEZy
b21ENjVXaGl0ZVBvaW50VG9ENTBXaGl0ZVBvaW50KGNvbnN0IFhZWkE8ZmxvYXQ+JiBjb2xvcikK
IHsKLSAgICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9D
aHJvbUFkYXB0Lmh0bWwKLSAgICBjb25zdGV4cHIgQ29sb3JNYXRyaXg8MywgMz4gRDY1VG9ENTBN
YXRyaXggewotICAgICAgICAgMS4wNDc4MTEyZiwgMC4wMjI4ODY2ZiwgLTAuMDUwMTI3MGYsCi0g
ICAgICAgICAwLjAyOTU0MjRmLCAwLjk5MDQ4NDRmLCAtMC4wMTcwNDkxZiwKLSAgICAgICAgLTAu
MDA5MjM0NWYsIDAuMDE1MDQzNmYsICAwLjc1MjEzMTZmCi0gICAgfTsKLSAgICByZXR1cm4gYXNY
WVpBKEQ2NVRvRDUwTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21w
b25lbnRzKGNvbG9yKSkpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4
Y2VwdEFscGhhPFhZWkE8ZmxvYXQ+PihENjVUb0Q1ME1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKIH0KIAorLy8gTGFiIGNvbnZlcnNp
b25zLgorCiBzdGF0aWMgY29uc3RleHByIGZsb2F0IExBQmUgPSAyMTYuMGYgLyAyNDM4OS4wZjsK
IHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgTEFCayA9IDI0Mzg5LjBmIC8gMjcuMGY7CiBzdGF0aWMg
Y29uc3RleHByIGZsb2F0IEQ1MFdoaXRlVmFsdWVzW10gPSB7IDAuOTY0MjJmLCAxLjBmLCAwLjgy
NTIxZiB9OwpAQCAtMjIxLDYgKzIzNSw5IEBAIExhYjxmbG9hdD4gdG9MYWIoY29uc3QgWFlaQTxm
bG9hdD4mIGNvbG8KICAgICByZXR1cm4geyBsaWdodG5lc3MsIGEsIGIsIGNvbG9yV2l0aEQ1MFdo
aXRlUG9pbnQuYWxwaGEgfTsKIH0KIAorCisvLyBMQ0ggY29udmVyc2lvbnMuCisKIExDSEE8Zmxv
YXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvY3NzLWNvbG9yLTQvI2xhYi10by1sY2gKQEAgLTI0Nyw2ICsyNjQsOCBAQCBM
YWI8ZmxvYXQ+IHRvTGFiKGNvbnN0IExDSEE8ZmxvYXQ+JiBjb2xvCiAgICAgfTsKIH0KIAorLy8g
SFNMIGNvbnZlcnNpb25zLgorCiBIU0xBPGZsb2F0PiB0b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKIHsKICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xv
cl9zcGFjZS4KQEAgLTMzMiw2ICszNTEsOCBAQCBTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25zdCBI
U0xBPGZsb2F0PiYgCiAgICAgfTsKIH0KIAorLy8gQ01ZSyBjb252ZXJzaW9ucy4KKwogU1JHQkE8
ZmxvYXQ+IHRvU1JHQkEoY29uc3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKIHsKICAgICBhdXRvIFtj
LCBtLCB5LCBrLCBhXSA9IGNvbG9yOwpAQCAtMzU2LDYgKzM3Nyw5IEBAIENNWUtBPGZsb2F0PiB0
b0NNWUtBKGNvbnN0IFNSR0JBPGZsb2F0PiYKICAgICByZXR1cm4geyBjLCBtLCB5LCBrLCBhIH07
CiB9CiAKKworLy8gQ29tYmluYXRpb24gY29udmVyc2lvbnMgKGNvbnN0cnVjdGVkIGZyb20gbW9y
ZSBiYXNpYyBjb252ZXJzaW9ucyBhYm92ZSkuCisKIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBT
UkdCQTxmbG9hdD4mIGNvbG9yKQogewogICAgIHJldHVybiB0b1hZWkEodG9MaW5lYXJTUkdCQShj
b2xvcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb252
ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JDb252ZXJzaW9uLmgJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5
ICszMCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoZXNlIGFyZSB0aGUgc3RhbmRh
cmQgc1JHQiA8LT4gTGluZWFyUkdCIC8gRGlzcGxheVAzIDwtPiBMaW5lYXJEaXNwbGF5UDMgY29u
dmVyc2lvbiBmdW5jdGlvbnMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IpLgot
ZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7Ci1mbG9hdCByZ2JUb0xpbmVh
ckNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLQorZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVu
dENsYW1waW5nKGZsb2F0KTsKK2Zsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnRDbGFtcGlu
ZyhmbG9hdCk7CiAKIC8vIEFsbCBjb2xvciB0eXBlcyBtdXN0IGF0IGxlYXN0IGltcGxlbWVudCB0
aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zIHRvIGFuZCBmcm9tIHRoZSBYWVpBIGNvbG9yIHNwYWNl
OgogLy8gICAgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IENvbG9yVHlwZTxmbG9hdD4mKTsKQEAg
LTU2LDQyICs1NSwzNiBAQCBXRUJDT1JFX0VYUE9SVCBMaW5lYXJTUkdCQTxmbG9hdD4gdG9MaW5l
CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0
IExpbmVhclNSR0JBPGZsb2F0PiYpOwogCi0KIC8vIERpc3BsYXlQMwogV0VCQ09SRV9FWFBPUlQg
WFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IERpc3BsYXlQMzxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQ
T1JUIERpc3BsYXlQMzxmbG9hdD4gdG9EaXNwbGF5UDMoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8v
IEFkZGl0aW9ucwogV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xpbmVh
ckRpc3BsYXlQMyhjb25zdCBEaXNwbGF5UDM8ZmxvYXQ+Jik7CiAKLQogLy8gTGluZWFyRGlzcGxh
eVAzCiBXRUJDT1JFX0VYUE9SVCBYWVpBPGZsb2F0PiB0b1hZWkEoY29uc3QgTGluZWFyRGlzcGxh
eVAzPGZsb2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgTGluZWFyRGlzcGxheVAzPGZsb2F0PiB0b0xp
bmVhckRpc3BsYXlQMyhjb25zdCBYWVpBPGZsb2F0PiYpOwogLy8gQWRkaXRpb25zCiBXRUJDT1JF
X0VYUE9SVCBEaXNwbGF5UDM8ZmxvYXQ+IHRvRGlzcGxheVAzKGNvbnN0IExpbmVhckRpc3BsYXlQ
MzxmbG9hdD4mKTsKIAotCiAvLyBMYWIKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFla
QShjb25zdCBMYWI8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBMYWI8ZmxvYXQ+IHRvTGFiKGNv
bnN0IFhZWkE8ZmxvYXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIExDSEE8Zmxv
YXQ+IHRvTENIQShjb25zdCBMYWI8ZmxvYXQ+Jik7CiAKLQogLy8gTENIQQogV0VCQ09SRV9FWFBP
UlQgWFlaQTxmbG9hdD4gdG9YWVpBKGNvbnN0IExDSEE8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9S
VCBMQ0hBPGZsb2F0PiB0b0xDSEEoY29uc3QgWFlaQTxmbG9hdD4mKTsKIC8vIEFkZGl0aW9ucwog
V0VCQ09SRV9FWFBPUlQgTGFiPGZsb2F0PiB0b0xhYihjb25zdCBMQ0hBPGZsb2F0PiYpOwogCi0K
IC8vIEhTTEEKIFdFQkNPUkVfRVhQT1JUIFhZWkE8ZmxvYXQ+IHRvWFlaQShjb25zdCBIU0xBPGZs
b2F0PiYpOwogV0VCQ09SRV9FWFBPUlQgSFNMQTxmbG9hdD4gdG9IU0xBKGNvbnN0IFhZWkE8Zmxv
YXQ+Jik7CiAvLyBBZGRpdGlvbnMKIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JB
KGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKLQogLy8gQ01ZS0EKIFdFQkNPUkVfRVhQT1JUIFhZWkE8
ZmxvYXQ+IHRvWFlaQShjb25zdCBDTVlLQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIENNWUtB
PGZsb2F0PiB0b0NNWUtBKGNvbnN0IFhZWkE8ZmxvYXQ+Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNzE2OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDE4ICszMSwyMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1w
bGF0ZTx0eXBlbmFtZT4gc3RydWN0IENvbXBvbmVudFRyYWl0czsKK3RlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgQWxwaGFUcmFpdHM7CiAKLXRlbXBsYXRlPD4gc3RydWN0IENvbXBvbmVudFRyYWl0
czx1aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1pblZhbHVlID0gMDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBBbHBoYVRyYWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
OF90IHRyYW5zcGFyZW50ID0gMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qgb3BhcXVl
ID0gMjU1OwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29tcG9uZW50VHJhaXRzPGZsb2F0PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBtaW5WYWx1ZSA9IDAuMGY7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBmbG9hdCBtYXhWYWx1ZSA9IDEuMGY7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBbHBo
YVRyYWl0czxmbG9hdD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgdHJhbnNwYXJlbnQg
PSAwLjBmOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgb3BhcXVlID0gMS4wZjsKIH07CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvckNvbXBvbmVudFJhbmdlIHsKKyAgICBU
IG1pbjsKKyAgICBUIG1heDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgUkdCTW9k
ZWw7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IExhYk1vZGVsOwordGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBMQ0hNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFNMTW9kZWw7
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENNWUtNb2RlbDsKK3RlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgWFlaTW9kZWw7CisKK3RlbXBsYXRlPD4gc3RydWN0IFJHQk1vZGVsPHVpbnQ4X3Q+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21wb25lbnRSYW5nZTx1
aW50OF90PiwgMz4gcmFuZ2VzIHsgeworICAgICAgICB7IDAsIDI1NSB9LAorICAgICAgICB7IDAs
IDI1NSB9LAorICAgICAgICB7IDAsIDI1NSB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0ludmVydGlibGUgPSB0cnVlOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgUkdC
TW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JDb21w
b25lbnRSYW5nZTxmbG9hdD4sIDM+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAxIH0sCisgICAg
ICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfQorICAgIH0gfTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbnZlcnRpYmxlID0gdHJ1ZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IExhYk1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9y
Q29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAtc3RkOjpudW1l
cmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9CisgICAg
fSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IExDSE1vZGVsPGZsb2F0PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFuZ2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7
CisgICAgICAgIHsgMCwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwK
KyAgICAgICAgeyAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9LAor
ICAgICAgICB7IDAsIDM2MCB9CisgICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0ludmVydGlibGUgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhTTE1vZGVsPGZs
b2F0PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PENvbG9yQ29tcG9uZW50UmFu
Z2U8ZmxvYXQ+LCAzPiByYW5nZXMgeyB7CisgICAgICAgIHsgMCwgMzYwIH0sCisgICAgICAgIHsg
MCwgMTAwIH0sCisgICAgICAgIHsgMCwgMTAwIH0KKyAgICB9IH07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
TVlLTW9kZWw8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8Q29sb3JD
b21wb25lbnRSYW5nZTxmbG9hdD4sIDQ+IHJhbmdlcyB7IHsKKyAgICAgICAgeyAwLCAxIH0sCisg
ICAgICAgIHsgMCwgMSB9LAorICAgICAgICB7IDAsIDEgfSwKKyAgICAgICAgeyAwLCAxIH0KKyAg
ICB9IH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW52ZXJ0aWJsZSA9IHRydWU7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBYWVpNb2RlbDxmbG9hdD4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgc3RkOjphcnJheTxDb2xvckNvbXBvbmVudFJhbmdlPGZsb2F0PiwgMz4gcmFuZ2VzIHsg
eworICAgICAgICB7IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSwgc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkgfSwKKyAgICAgICAgeyAtc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjppbmZpbml0eSgpIH0sCisgICAgICAgIHsgLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSB9Cisg
ICAgfSB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0ludmVydGlibGUgPSBmYWxzZTsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgVD4gY29uc3RleHBy
IENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBj
KQoreworICAgIHJldHVybiBDb2xvclR5cGUgeyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdW5zaWduZWQgSW5kZXgsIHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBhdXRvIGNsYW1wZWRDb21wb25lbnQoVCBjKSAtPiB0eXBlbmFtZSBDb2xv
clR5cGU6OkNvbXBvbmVudFR5cGUKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdy
YWxfdjxUPik7CisKKyAgICBjb25zdGV4cHIgYXV0byByYW5nZSA9IENvbG9yVHlwZTo6TW9kZWw6
OnJhbmdlc1tJbmRleF07CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXA8VD4oYywgcmFuZ2UubWluLCBy
YW5nZS5tYXgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHVuc2lnbmVkIElu
ZGV4PiBjb25zdGV4cHIgZmxvYXQgY2xhbXBlZENvbXBvbmVudChmbG9hdCBjKQoreworICAgIGNv
bnN0ZXhwciBhdXRvIHJhbmdlID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzW0luZGV4XTsKKwor
ICAgIGlmIGNvbnN0ZXhwciAocmFuZ2UubWluID09IC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6aW5maW5pdHkoKSAmJiByYW5nZS5tYXggPT0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OmluZmluaXR5KCkpCisgICAgICAgIHJldHVybiBjOworCisgICAgaWYgY29uc3RleHByIChyYW5n
ZS5taW4gPT0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAg
ICByZXR1cm4gc3RkOjptaW4oYywgcmFuZ2UubWF4KTsKKworICAgIGlmIGNvbnN0ZXhwciAocmFu
Z2UubWF4ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQorICAgICAg
ICByZXR1cm4gc3RkOjptYXgoYywgcmFuZ2UubWluKTsKKworICAgIHJldHVybiBzdGQ6OmNsYW1w
KGMsIHJhbmdlLm1pbiwgcmFuZ2UubWF4KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlLCB1bnNpZ25lZCBJbmRleCwgdHlwZW5hbWUgVD4gY29uc3RleHByIFQgY2xhbXBlZENvbXBv
bmVudChjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGMpCit7CisgICAgcmV0dXJuIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCBJbmRleD4oY1tJbmRleF0pOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBDb21wb25lbnRUeXBlID0gVD4gY29uc3RleHByIENvbXBvbmVudFR5
cGUgY2xhbXBlZEFscGhhKFQgYWxwaGEpCit7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXA8VD4oYWxw
aGEsIEFscGhhVHJhaXRzPENvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCwgQWxwaGFUcmFpdHM8
Q29tcG9uZW50VHlwZT46Om9wYXF1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZSwgdHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBjbGFtcGVkQ29tcG9u
ZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGNvbXBvbmVudHMpCit7CisgICAgcmV0dXJu
IHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDA+KGNvbXBvbmVudHMpLAor
ICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oY29tcG9uZW50cyksCisgICAg
ICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihjb21wb25lbnRzKSwKKyAgICAgICAg
Y2xhbXBlZEFscGhhKGNvbXBvbmVudHNbM10pCisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGNs
YW1wZWRDb21wb25lbnRzRXhjZXB0QWxwaGEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21w
b25lbnRzKQoreworICAgIHJldHVybiB7CisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JU
eXBlLCAwPihjb21wb25lbnRzKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUs
IDE+KGNvbXBvbmVudHMpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4o
Y29tcG9uZW50cyksCisgICAgICAgIGNvbXBvbmVudHNbM10KKyAgICB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFr
ZUZyb21Db21wb25lbnRzQ2xhbXBpbmcoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjb21wb25l
bnRzKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihjbGFtcGVk
Q29tcG9uZW50czxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JUeXBlIG1ha2VGcm9tQ29t
cG9uZW50c0NsYW1waW5nKFQgYzEsIFQgYzIsIFQgYzMpCit7CisgICAgcmV0dXJuIG1ha2VGcm9t
Q29tcG9uZW50czxDb2xvclR5cGU+KENvbG9yQ29tcG9uZW50cyB7CisgICAgICAgIGNsYW1wZWRD
b21wb25lbnQ8Q29sb3JUeXBlLCAwPihjMSksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29s
b3JUeXBlLCAxPihjMiksCisgICAgICAgIGNsYW1wZWRDb21wb25lbnQ8Q29sb3JUeXBlLCAyPihj
MyksCisgICAgICAgIEFscGhhVHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlw
ZT46Om9wYXF1ZQorICAgIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvclR5cGUgbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmco
VCBjMSwgVCBjMiwgVCBjMywgVCBhbHBoYSkKK3sKKyAgICByZXR1cm4gbWFrZUZyb21Db21wb25l
bnRzPENvbG9yVHlwZT4oQ29sb3JDb21wb25lbnRzIHsKKyAgICAgICAgY2xhbXBlZENvbXBvbmVu
dDxDb2xvclR5cGUsIDA+KGMxKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUs
IDE+KGMyKSwKKyAgICAgICAgY2xhbXBlZENvbXBvbmVudDxDb2xvclR5cGUsIDI+KGMzKSwKKyAg
ICAgICAgY2xhbXBlZEFscGhhPFQsIHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4o
YWxwaGEpCisgICAgfSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5h
bWUgVD4gY29uc3RleHByIENvbG9yVHlwZSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2Vw
dEFscGhhKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgY29tcG9uZW50cykKK3sKKyAgICByZXR1
cm4gbWFrZUZyb21Db21wb25lbnRzPENvbG9yVHlwZT4oY2xhbXBlZENvbXBvbmVudHNFeGNlcHRB
bHBoYTxDb2xvclR5cGU+KGNvbXBvbmVudHMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29s
b3JUeXBlLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbHBoYT4gY29uc3RleHByIENvbG9yVHlwZSBt
YWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhKFQgYzEsIFQgYzIsIFQgYzMsIEFs
cGhhIGFscGhhKQoreworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHM8Q29sb3JUeXBlPihD
b2xvckNvbXBvbmVudHMgeworICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMD4o
YzEpLAorICAgICAgICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMT4oYzIpLAorICAgICAg
ICBjbGFtcGVkQ29tcG9uZW50PENvbG9yVHlwZSwgMj4oYzMpLAorICAgICAgICBhbHBoYQorICAg
IH0pOworfQorCisjaWYgQVNTRVJUX0VOQUJMRUQKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIHZvaWQgYXNzZXJ0SW5SYW5nZShUIGNvbG9yKQoreworICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgVDo6Q29tcG9uZW50VHlwZSwgZmxvYXQ+KSB7CisgICAg
ICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShjb21wb25lbnRzW2ldID49IFQ6Ok1vZGVsOjpyYW5nZXNbaV0ubWluLCAiQ29t
cG9uZW50IGF0IGluZGV4ICVkIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQgbWlu
aW11bSAlZiIsIGksICBjb21wb25lbnRzW2ldLCBUOjpNb2RlbDo6cmFuZ2VzW2ldLm1pbik7Cisg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNvbXBvbmVudHNbaV0gPD0gVDo6TW9kZWw6
OnJhbmdlc1tpXS5tYXgsICJDb21wb25lbnQgYXQgaW5kZXggJWQgaXMgJWYgYW5kIGlzIGdyZWF0
ZXIgdGhhbiB0aGUgYWxsb3dlZCBtYXhpbXVtICVmIiwgaSwgIGNvbXBvbmVudHNbaV0sIFQ6Ok1v
ZGVsOjpyYW5nZXNbaV0ubWF4KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGNvbG9yLmFscGhhID49IEFscGhhVHJhaXRzPHR5cGVuYW1lIFQ6OkNvbXBvbmVudFR5cGU+
Ojp0cmFuc3BhcmVudCwgIkFscGhhIGlzICVmIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGFsbG93ZWQg
bWluaW11bSAodHJhbnNwYXJlbnQpICVmIiwgY29sb3IuYWxwaGEsIEFscGhhVHJhaXRzPHR5cGVu
YW1lIFQ6OkNvbXBvbmVudFR5cGU+Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoY29sb3IuYWxwaGEgPD0gQWxwaGFUcmFpdHM8dHlwZW5hbWUgVDo6Q29tcG9uZW50
VHlwZT46Om9wYXF1ZSwgIkFscGhhIGlzICVmIGFuZCBpcyBncmVhdGVyIHRoYW4gdGhlIGFsbG93
ZWQgbWF4aW11bSAob3BhcXVlKSAlZiIsIGNvbG9yLmFscGhhLCBBbHBoYVRyYWl0czx0eXBlbmFt
ZSBUOjpDb21wb25lbnRUeXBlPjo6b3BhcXVlKTsKKyAgICB9Cit9CisKKyNlbHNlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB2b2lkIGFzc2VydEluUmFuZ2UoVCkKK3sKK30KKwor
I2VuZGlmCisKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+IGlubGluZSBjb25z
dGV4cHIgYm9vbCBIYXNDb2xvclNwYWNlTWVtYmVyID0gZmFsc2U7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgY29uc3RleHByIGJvb2wgSGFzQ29sb3JTcGFjZU1lbWJlcjxULCBzdGQ6OnZv
aWRfdDxkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VD4oKS5jb2xvclNwYWNlKT4+ID0gdHJ1ZTsKIApA
QCAtNzQsMTggKzI3MiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQ+IHN0cnVjdCBDb2xv
cldpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBTUkdCQSA6IENvbG9yV2l0aEFscGhh
SGVscGVyPFNSR0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwotCi0gICAg
Y29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBDb21wb25l
bnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpTUkdCIH07
CisgICAgCisgICAgY29uc3RleHByIFNSR0JBKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUsIFQgYWxw
aGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IHJlZCB7IHJlZCB9CiAgICAg
ICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1ZSB7IGJsdWUgfQogICAgICAgICAs
IGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAg
ICAgfQogCiAgICAgY29uc3RleHByIFNSR0JBKCkKLSAgICAgICAgOiBTUkdCQSB7IENvbXBvbmVu
dFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBv
bmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQor
ICAgICAgICA6IFNSR0JBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMTAwLDEx
ICszMDAsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAg
cmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQShjb25zdCBDb2xvckNvbXBv
bmVudHM8VD4mIGMpCi17Ci0gICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9Owot
fQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNSR0JBPFQ+JiBhLCBjb25zdCBTUkdCQTxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0xMTgsMTggKzMxMywyMCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSA6IENvbG9yV2l0aEFscGhhSGVscGVyPExpbmVh
clNSR0JBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9k
ZWwgPSBSR0JNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gY29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OkxpbmVhclJHQjsKIAotICAgIGNvbnN0ZXhwciBMaW5lYXJTUkdCQShUIHJl
ZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1
ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBh
bHBoYSA9IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAg
ICAgICAgLCBncmVlbiB7IGdyZWVuIH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAg
ICwgYWxwaGEgeyBhbHBoYSB9CiAgICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsK
ICAgICB9CiAKICAgICBjb25zdGV4cHIgTGluZWFyU1JHQkEoKQotICAgICAgICA6IExpbmVhclNS
R0JBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
aW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+
OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGluZWFyU1JHQkEgeyAwLCAwLCAwLCAwIH0KICAgICB7
CiAgICAgfQogCkBAIC0xNDQsMTEgKzM0MSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFs
cGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJTUkdCQTxU
PiBhc0xpbmVhclNSR0JBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1
cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyU1JHQkE8VD4mIGEsIGNvbnN0
IExpbmVhclNSR0JBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9
PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTE2MiwxOCArMzU0LDIwIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IERpc3BsYXlQMyA6IENvbG9yV2l0aEFscGhhSGVscGVyPERpc3BsYXlQMzxUPj4gewogICAg
IHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gUkdCTW9kZWw8VD47
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGNvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpEaXNw
bGF5UDM7CiAKLSAgICBjb25zdGV4cHIgRGlzcGxheVAzKFQgcmVkLCBUIGdyZWVuLCBUIGJsdWUs
IFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAgIGNvbnN0ZXhwciBE
aXNwbGF5UDMoVCByZWQsIFQgZ3JlZW4sIFQgYmx1ZSwgVCBhbHBoYSA9IEFscGhhVHJhaXRzPFQ+
OjpvcGFxdWUpCiAgICAgICAgIDogcmVkIHsgcmVkIH0KICAgICAgICAgLCBncmVlbiB7IGdyZWVu
IH0KICAgICAgICAgLCBibHVlIHsgYmx1ZSB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAg
ICAgeworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4
cHIgRGlzcGxheVAzKCkKLSAgICAgICAgOiBEaXNwbGF5UDMgeyBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBE
aXNwbGF5UDMgeyAwLCAwLCAwLCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0xODgsMTEgKzM4Miw2
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4g
eyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBEaXNwbGF5UDM8VD4gYXNEaXNwbGF5UDMoY29uc3QgQ29sb3JDb21w
b25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsK
LX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxUPiYgYikKIHsKICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7CkBAIC0yMDYsMTcg
KzM5NSwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDMgOiBDb2xvcldpdGhBbHBo
YUhlbHBlcjxMaW5lYXJEaXNwbGF5UDM8VD4+IHsKICAgICB1c2luZyBDb21wb25lbnRUeXBlID0g
VDsKKyAgICB1c2luZyBNb2RlbCA9IFJHQk1vZGVsPFQ+OwogCi0gICAgY29uc3RleHByIExpbmVh
ckRpc3BsYXlQMyhUIHJlZCwgVCBncmVlbiwgVCBibHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJh
aXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzKFQgcmVkLCBU
IGdyZWVuLCBUIGJsdWUsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAg
ICA6IHJlZCB7IHJlZCB9CiAgICAgICAgICwgZ3JlZW4geyBncmVlbiB9CiAgICAgICAgICwgYmx1
ZSB7IGJsdWUgfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNz
ZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIExpbmVhckRpc3BsYXlQ
MygpCi0gICAgICAgIDogTGluZWFyRGlzcGxheVAzIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5W
YWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+Ojpt
aW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTGluZWFy
RGlzcGxheVAzIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjMxLDExICs0MjIs
NiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJu
IHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgTGluZWFyRGlzcGxheVAzPFQ+IGFzTGluZWFyRGlzcGxheVAzKGNv
bnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBj
WzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPT0oY29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBhLCBjb25zdCBMaW5lYXJEaXNwbGF5
UDM8VD4mIGIpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEpID09IGFzQ29sb3JD
b21wb25lbnRzKGIpOwpAQCAtMjQ5LDE4ICs0MzUsMjAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIGJvb2wgb3BlcgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGFiIDog
Q29sb3JXaXRoQWxwaGFIZWxwZXI8TGFiPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9
IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBMYWJNb2RlbDxUPjsKICAgICBzdGF0aWMgY29uc3RleHBy
IGF1dG8gY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkxhYjsKIAotICAgIGNvbnN0ZXhwciBMYWIo
VCBsaWdodG5lc3MsIFQgYSwgVCBiLCBUIGFscGhhID0gQ29tcG9uZW50VHJhaXRzPFQ+OjptYXhW
YWx1ZSkKKyAgICBjb25zdGV4cHIgTGFiKFQgbGlnaHRuZXNzLCBUIGEsIFQgYiwgVCBhbHBoYSA9
IEFscGhhVHJhaXRzPFQ+OjpvcGFxdWUpCiAgICAgICAgIDogbGlnaHRuZXNzIHsgbGlnaHRuZXNz
IH0KICAgICAgICAgLCBhIHsgYSB9CiAgICAgICAgICwgYiB7IGIgfQogICAgICAgICAsIGFscGhh
IHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0SW5SYW5nZSgqdGhpcyk7CiAgICAgfQog
CiAgICAgY29uc3RleHByIExhYigpCi0gICAgICAgIDogTGFiIHsgQ29tcG9uZW50VHJhaXRzPFQ+
OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRz
PFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDog
TGFiIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAgIH0KIApAQCAtMjc1LDExICs0NjMsNiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy5s
aWdodG5lc3MsIGMuYSwgYy5iLCBjLmFscGhhIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBMYWI8VD4gYXNMYWIoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewot
ICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMYWI8VD4mIGEsIGNvbnN0
IExhYjxUPiYgYikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xv
ckNvbXBvbmVudHMoYik7CkBAIC0yOTMsMTcgKzQ3NiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBMQ0hB
IDogQ29sb3JXaXRoQWxwaGFIZWxwZXI8TENIQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5
cGUgPSBUOworICAgIHVzaW5nIE1vZGVsID0gTENITW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIg
TENIQShUIGxpZ2h0bmVzcywgVCBjaHJvbWEsIFQgaHVlLCBUIGFscGhhID0gQ29tcG9uZW50VHJh
aXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgTENIQShUIGxpZ2h0bmVzcywgVCBjaHJv
bWEsIFQgaHVlLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46Om9wYXF1ZSkKICAgICAgICAgOiBs
aWdodG5lc3MgeyBsaWdodG5lc3MgfQogICAgICAgICAsIGNocm9tYSB7IGNocm9tYSB9CiAgICAg
ICAgICwgaHVlIHsgaHVlIH0KICAgICAgICAgLCBhbHBoYSB7IGFscGhhIH0KICAgICB7CisgICAg
ICAgIGFzc2VydEluUmFuZ2UoKnRoaXMpOwogICAgIH0KIAogICAgIGNvbnN0ZXhwciBMQ0hBKCkK
LSAgICAgICAgOiBMQ0hBIHsgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50
VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9uZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSwgQ29tcG9u
ZW50VHJhaXRzPFQ+OjptaW5WYWx1ZSB9CisgICAgICAgIDogTENIQSB7IDAsIDAsIDAsIDAgfQog
ICAgIHsKICAgICB9CiAKQEAgLTMxOCwxMSArNTAzLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIENvbG9yQ29tcAogICAgIHJldHVybiB7IGMubGlnaHRuZXNzLCBjLmNocm9tYSwg
Yy5odWUsIGMuYWxwaGEgfTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIExD
SEE8VD4gYXNMQ0hBKGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYykKLXsKLSAgICByZXR1cm4g
eyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTENIQTxUPiYgYSwgY29uc3QgTENIQTxUPiYg
YikKIHsKICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVu
dHMoYik7CkBAIC0zMzYsMTcgKzUxNiwxOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4
cHIgYm9vbCBvcGVyCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIDogQ29sb3JX
aXRoQWxwaGFIZWxwZXI8SFNMQTxUPj4gewogICAgIHVzaW5nIENvbXBvbmVudFR5cGUgPSBUOwor
ICAgIHVzaW5nIE1vZGVsID0gSFNMTW9kZWw8VD47CiAKLSAgICBjb25zdGV4cHIgSFNMQShUIGh1
ZSwgVCBzYXR1cmF0aW9uLCBUIGxpZ2h0bmVzcywgVCBhbHBoYSA9IENvbXBvbmVudFRyYWl0czxU
Pjo6bWF4VmFsdWUpCisgICAgY29uc3RleHByIEhTTEEoVCBodWUsIFQgc2F0dXJhdGlvbiwgVCBs
aWdodG5lc3MsIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6b3BhcXVlKQogICAgICAgICA6IGh1
ZSB7IGh1ZSB9CiAgICAgICAgICwgc2F0dXJhdGlvbiB7IHNhdHVyYXRpb24gfQogICAgICAgICAs
IGxpZ2h0bmVzcyB7IGxpZ2h0bmVzcyB9CiAgICAgICAgICwgYWxwaGEgeyBhbHBoYSB9CiAgICAg
eworICAgICAgICBhc3NlcnRJblJhbmdlKCp0aGlzKTsKICAgICB9CiAKICAgICBjb25zdGV4cHIg
SFNMQSgpCi0gICAgICAgIDogSFNMQSB7IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENv
bXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUsIENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUs
IENvbXBvbmVudFRyYWl0czxUPjo6bWluVmFsdWUgfQorICAgICAgICA6IEhTTEEgeyAwLCAwLCAw
LCAwIH0KICAgICB7CiAgICAgfQogCkBAIC0zNjMsMTEgKzU0NSw2IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXAKICAgICByZXR1cm4geyBjLmh1ZSwgYy5zYXR1cmF0
aW9uLCBjLmxpZ2h0bmVzcywgYy5hbHBoYSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgSFNMQTxUPiBhc0hTTEEoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBjKQotewot
ICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKLX0KLQogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIU0xBPFQ+JiBhLCBjb25z
dCBIU0xBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0Nv
bG9yQ29tcG9uZW50cyhiKTsKQEAgLTM4Miw4ICs1NTksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyCiAvLyBGSVhNRTogV2hlbiBDb2xvckNvbXBvbmVudHMgc3Vw
cG9ydHMgbW9yZSB0aGFuIGxlbmd0aCA9PSA0LCBhZGQgY29udmVyc2lvbiB0by9mcm9tIENvbG9y
Q29tcG9uZW50czxUPiBmb3IgQ01ZS0EKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDTVlL
QSA6IENvbG9yV2l0aEFscGhhSGVscGVyPENNWUtBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50
VHlwZSA9IFQ7CisgICAgdXNpbmcgTW9kZWwgPSBDTVlLTW9kZWw8VD47CiAKLSAgICBjb25zdGV4
cHIgQ01ZS0EoVCBjeWFuLCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0g
Q29tcG9uZW50VHJhaXRzPFQ+OjptYXhWYWx1ZSkKKyAgICBjb25zdGV4cHIgQ01ZS0EoVCBjeWFu
LCBUIG1hZ2VudGEsIFQgeWVsbG93LCBUIGJsYWNrLCBUIGFscGhhID0gQWxwaGFUcmFpdHM8VD46
Om9wYXF1ZSkKICAgICAgICAgOiBjeWFuIHsgY3lhbiB9CiAgICAgICAgICwgbWFnZW50YSB7IG1h
Z2VudGEgfQogICAgICAgICAsIHllbGxvdyB7IHllbGxvdyB9CkBAIC0zOTMsNyArNTcxLDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENNWUtBIDogQ29sbwogICAgIH0KIAogICAgIGNv
bnN0ZXhwciBDTVlLQSgpCi0gICAgICAgIDogQ01ZS0EgeyBDb21wb25lbnRUcmFpdHM8VD46Om1p
blZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBDTVlLQSB7IDAsIDAsIDAsIDAsIDAgfQogICAgIHsK
ICAgICB9CiAKQEAgLTQxNywxNyArNTk1LDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBib29sIG9wZXIKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFhZWkEgOiBDb2xv
cldpdGhBbHBoYUhlbHBlcjxYWVpBPFQ+PiB7CiAgICAgdXNpbmcgQ29tcG9uZW50VHlwZSA9IFQ7
CisgICAgdXNpbmcgTW9kZWwgPSBYWVpNb2RlbDxUPjsKIAotICAgIGNvbnN0ZXhwciBYWVpBKFQg
eCwgVCB5LCBUIHosIFQgYWxwaGEgPSBDb21wb25lbnRUcmFpdHM8VD46Om1heFZhbHVlKQorICAg
IGNvbnN0ZXhwciBYWVpBKFQgeCwgVCB5LCBUIHosIFQgYWxwaGEgPSBBbHBoYVRyYWl0czxUPjo6
b3BhcXVlKQogICAgICAgICA6IHggeyB4IH0KICAgICAgICAgLCB5IHsgeSB9CiAgICAgICAgICwg
eiB7IHogfQogICAgICAgICAsIGFscGhhIHsgYWxwaGEgfQogICAgIHsKKyAgICAgICAgYXNzZXJ0
SW5SYW5nZSgqdGhpcyk7CiAgICAgfQogCiAgICAgY29uc3RleHByIFhZWkEoKQotICAgICAgICA6
IFhZWkEgeyBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46
Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8VD46Om1pblZhbHVlLCBDb21wb25lbnRUcmFpdHM8
VD46Om1pblZhbHVlIH0KKyAgICAgICAgOiBYWVpBIHsgMCwgMCwgMCwgMCB9CiAgICAgewogICAg
IH0KIApAQCAtNDQyLDExICs2MjIsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg
Q29sb3JDb21wCiAgICAgcmV0dXJuIHsgYy54LCBjLnksIGMueiwgYy5hbHBoYSB9OwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgWFlaQTxUPiBhc1hZWkEoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBjKQotewotICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBYWVpBPFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBiKQogewogICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhiKTsKQEAgLTQ1NywyMSArNjMyLDIy
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXIKICAgICByZXR1cm4g
IShhID09IGIpOwogfQogCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+
IGNvbnN0ZXhwciBkZWNsdHlwZShhdXRvKSBjYWxsV2l0aENvbG9yVHlwZShjb25zdCBDb2xvckNv
bXBvbmVudHM8VD4mIGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRnVuY3RvciYm
IGZ1bmN0b3IpCiB7CiAgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNw
YWNlOjpTUkdCOgotICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0
b3I+KGZ1bmN0b3IpLCBhc1NSR0JBKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRz
PFNSR0JBPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6
Ci0gICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIGFzTGluZWFyU1JHQkEoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8TGlu
ZWFyU1JHQkE8VD4+KGNvbXBvbmVudHMpKTsKICAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSwgYXNEaXNwbGF5UDMoY29tcG9uZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8RGlz
cGxheVAzPFQ+Pihjb21wb25lbnRzKSk7CiAgICAgY2FzZSBDb2xvclNwYWNlOjpMYWI6Ci0gICAg
ICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFz
TGFiKGNvbXBvbmVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25lbnRzPExhYjxUPj4oY29tcG9uZW50
cykpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6
Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIGFzU1JHQkEoY29tcG9uZW50
cykpOworICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTxUPj4oY29tcG9uZW50cykpOwogfQogCiAvLyBQ
YWNrZWQgQ29sb3IgRm9ybWF0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9v
cmluZyhTUkcKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1
NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0
ZXM8U1JHQkE+KGZhc3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVCeTI1NShnICogYSks
IGZhc3REaXZpZGVCeTI1NShiICogYSksIGEpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVu
dHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PihmYXN0RGl2aWRlQnkyNTUociAq
IGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBhKTsK
IH0KIAogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4g
Y29sb3IpCkBAIC04OCw3ICs4OCw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWls
aW5nKFNSR0IKICAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwogICAgIGlmIChhID09IDI1
NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0
ZXM8U1JHQkE+KGZhc3REaXZpZGVCeTI1NShyICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShn
ICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShiICogYSArIDI1NCksIGEpOworICAgIHJldHVy
biBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+Pihm
YXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQp
LCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKIH0KIAogc3RhdGljIGlubGluZSB1
aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHVpbnQ4X3QgYywgdWludDhfdCBh
KQpAQCAtMTAxLDcgKzEwMSw3IEBAIFNSR0JBPHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGllZChTUkdC
QTx1aW4KICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwogICAgIGlmICghYSB8fCBhID09
IDI1NSkKICAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50
Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSksIHVucHJlbXVs
dGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUo
YiwgYSksIGEpOworICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFs
cGhhPFNSR0JBPHVpbnQ4X3Q+Pih1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHIsIGEpLCB1
bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDb21wb25l
bnRCeXRlKGIsIGEpLCBhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShy
ZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMiArNDUsMTQgQEAgU1JHQkE8dWlu
dDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSRwogU1JHQkE8dWludDhfdD4gcHJlbXVsdGlw
bGllZENlaWxpbmcoU1JHQkE8dWludDhfdD4pOwogU1JHQkE8dWludDhfdD4gdW5wcmVtdWx0aXBs
aWVkKFNSR0JBPHVpbnQ4X3Q+KTsKIAotdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25l
bnRCeXRlKGZsb2F0KTsKK3VpbnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JB
Qnl0ZShmbG9hdCk7CiAKLXVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCk7Ci1j
b25zdGV4cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRCeXRlQWxwaGFUbyh1aW50OF90KTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgY29udmVydEZsb2F0QWxwaGFUbyhmbG9hdCk7CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciB1aW50OF90IGNsYW1wVG9Db21wb25lbnRCeXRl
KENvbXBvbmVudFR5cGUpOwotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9uZW50VHlwZT4gY29uc3Rl
eHByIGZsb2F0IGNsYW1wVG9Db21wb25lbnRGbG9hdChDb21wb25lbnRUeXBlKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Q29tcG9uZW50Qnl0ZVRvKHVpbnQ4X3QpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbyhmbG9hdCk7Ci0KLXRlbXBs
YXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZTx1aW50
OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+Jik7Ci10
ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIg
Q29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBl
PHVpbnQ4X3Q+Jik7Ci0KLXRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xv
clR5cGUsIHR5cGVuYW1lLi4uIENvbXBvbmVudFR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8dWlu
dDhfdD4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzKENvbXBvbmVudFR5cGUuLi4pOwotdGVtcGxhdGU8
dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUuLi4gQ29tcG9u
ZW50VHlwZT4gY29uc3RleHByIENvbG9yVHlwZTxmbG9hdD4gY2xhbXBUb0NvbXBvbmVudEZsb2F0
cyhDb21wb25lbnRUeXBlLi4uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IFQg
Y29udmVydFRvKGNvbnN0IFUmKTsKK3RlbXBsYXRlPD4gU1JHQkE8ZmxvYXQ+IGNvbnZlcnRUbyhj
b25zdCBTUkdCQTx1aW50OF90PiYpOwordGVtcGxhdGU8PiBTUkdCQTx1aW50OF90PiBjb252ZXJ0
VG8oY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwg
dHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNvbG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNv
bXBvbmVudChjb25zdCBDb2xvclR5cGUmLCBGdW5jdG9yJiYpOwogCkBAIC03MCw3OCArNjIsNjEg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xvclR5cGUgYwogdGVtcGxhdGU8dHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgdWludDhfdCBvdmVycmlkZUFscGhhKTsKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gQ29sb3JUeXBlIGludmVydGVkQ29sb3JXaXRoT3Zl
cnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBD
b2xvclR5cGUmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wg
aXNXaGl0ZShjb25zdCBDb2xvclR5cGUmKTsKK2NvbnN0ZXhwciBib29sIGlzQmxhY2soY29uc3Qg
TGFiPGZsb2F0PiYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZV92PHR5cGVuYW1lIENvbG9yVHlwZTo6TW9kZWwsIFJH
Qk1vZGVsPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4+PiogPSBudWxscHRyPgor
Y29uc3RleHByIGJvb2wgaXNCbGFjayhjb25zdCBDb2xvclR5cGUmKTsKKworY29uc3RleHByIGJv
b2wgaXNXaGl0ZShjb25zdCBMYWI8ZmxvYXQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lX3Y8dHlwZW5hbWUgQ29s
b3JUeXBlOjpNb2RlbCwgUkdCTW9kZWw8dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBl
Pj4+KiA9IG51bGxwdHI+Citjb25zdGV4cHIgYm9vbCBpc1doaXRlKGNvbnN0IENvbG9yVHlwZSYp
OwogCiBjb25zdGV4cHIgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QpOwogY29u
c3RleHByIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKIAotaW5saW5lIHVp
bnQ4X3QgY29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQotewotICAgIHJl
dHVybiBzdGQ6OmNsYW1wKHN0ZDo6bHJvdW5kKGYpLCAwbCwgMjU1bCk7Ci19Ci0KLWlubGluZSB1
aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKLXsKLSAgICByZXR1cm4gc3Rk
OjpjbGFtcChzdGQ6Omxyb3VuZChmICogMjU1LjBmKSwgMGwsIDI1NWwpOwotfQotCi1jb25zdGV4
cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQodWludDhfdCBieXRlKQoraW5saW5lIHVp
bnQ4X3QgY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZShmbG9hdCB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gYnl0ZSAvIDI1NS4wZjsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6
Omxyb3VuZCh2YWx1ZSksIDBsLCAyNTVsKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ29tcG9u
ZW50VHlwZT4gY29uc3RleHByIHVpbnQ4X3QgY2xhbXBUb0NvbXBvbmVudEJ5dGUoQ29tcG9uZW50
VHlwZSBjb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6Y2xhbXA8Q29tcG9uZW50VHlwZT4o
Y29tcG9uZW50LCAwLCAyNTUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb21wb25lbnRUeXBl
PiBjb25zdGV4cHIgZmxvYXQgY2xhbXBUb0NvbXBvbmVudEZsb2F0KENvbXBvbmVudFR5cGUgY29t
cG9uZW50KQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wPENvbXBvbmVudFR5cGU+KGNvbXBvbmVu
dCwgMCwgMSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3RleHByIHVpbnQ4X3QgY29udmVydENvbXBv
bmVudEJ5dGVUbzx1aW50OF90Pih1aW50OF90IHZhbHVlKQordGVtcGxhdGU8PiBjb25zdGV4cHIg
dWludDhfdCBjb252ZXJ0Qnl0ZUFscGhhVG88dWludDhfdD4odWludDhfdCB2YWx1ZSkKIHsKICAg
ICByZXR1cm4gdmFsdWU7CiB9CiAKLXRlbXBsYXRlPD4gY29uc3RleHByIGZsb2F0IGNvbnZlcnRD
b21wb25lbnRCeXRlVG88ZmxvYXQ+KHVpbnQ4X3QgdmFsdWUpCit0ZW1wbGF0ZTw+IGNvbnN0ZXhw
ciBmbG9hdCBjb252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+KHVpbnQ4X3QgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWUg
LyAyNTUuMGY7CiB9CiAKLXRlbXBsYXRlPD4gaW5saW5lIHVpbnQ4X3QgY29udmVydENvbXBvbmVu
dEZsb2F0VG88dWludDhfdD4oZmxvYXQgdmFsdWUpCit0ZW1wbGF0ZTw+IGlubGluZSB1aW50OF90
IGNvbnZlcnRGbG9hdEFscGhhVG88dWludDhfdD4oZmxvYXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUodmFsdWUpOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0
ZDo6bHJvdW5kKHZhbHVlICogMjU1LjBmKSwgMGwsIDI1NWwpOwogfQogCi10ZW1wbGF0ZTw+IGlu
bGluZSBmbG9hdCBjb252ZXJ0Q29tcG9uZW50RmxvYXRUbzxmbG9hdD4oZmxvYXQgdmFsdWUpCit0
ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBjb252ZXJ0RmxvYXRBbHBoYVRvPGZsb2F0PihmbG9hdCB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEZsb2F0KHZhbHVlKTsKKyAgICBy
ZXR1cm4gY2xhbXBlZEFscGhhKHZhbHVlKTsKIH0KIAotdGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5h
bWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3RlbXBsYXRl
PD4gaW5saW5lIFNSR0JBPGZsb2F0PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8dWludDhfdD4mIGNv
bG9yKQogewotICAgIGF1dG8gY29tcG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsK
LSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMF0pLCBjb252
ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGNvbXBvbmVudHNbM10pIH07
Ci19CisgICAgYXV0byBjb252ZXJ0VG9TUkdCQUZsb2F0ID0gW10odWludDhfdCB2YWx1ZSkgLT4g
ZmxvYXQgeworICAgICAgICByZXR1cm4gdmFsdWUgLyAyNTUuMGY7CisgICAgfTsKIAotdGVtcGxh
dGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9y
VHlwZTxmbG9hdD4gY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNvbnN0IENvbG9yVHlwZTx1aW50
OF90PiYgY29sb3IpCi17CiAgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMo
Y29sb3IpOwotICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNb
MF0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzFdKSwgY29udmVydFRvQ29t
cG9uZW50RmxvYXQoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBv
bmVudHNbM10pIH07CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRz
WzBdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzFdKSwgY29udmVydFRvU1JHQkFG
bG9hdChjb21wb25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFGbG9hdChjb21wb25lbnRzWzNdKSB9
OwogfQogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0
eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNs
YW1wVG9Db21wb25lbnRCeXRlcyhDb21wb25lbnRUeXBlLi4uIGNvbXBvbmVudHMpCit0ZW1wbGF0
ZTw+IGlubGluZSBTUkdCQTx1aW50OF90PiBjb252ZXJ0VG8oY29uc3QgU1JHQkE8ZmxvYXQ+JiBj
b2xvcikKIHsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzKS4u
LiB9OwotfQorICAgIGF1dG8gY29udmVydFRvU1JHQkFCeXRlID0gW10oZmxvYXQgdmFsdWUpIC0+
IHVpbnQ4X3QgeworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZCh2YWx1ZSAq
IDI1NS4wZiksIDBsLCAyNTVsKTsKKyAgICB9OwogCi10ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFt
ZT4gdHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZS4uLiBDb21wb25lbnRUeXBlPiBjb25zdGV4
cHIgQ29sb3JUeXBlPGZsb2F0PiBjbGFtcFRvQ29tcG9uZW50RmxvYXRzKENvbXBvbmVudFR5cGUu
Li4gY29tcG9uZW50cykKLXsKLSAgICByZXR1cm4geyBjbGFtcFRvQ29tcG9uZW50RmxvYXQoY29t
cG9uZW50cykuLi4gfTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhj
b2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbMF0pLCBj
b252ZXJ0VG9TUkdCQUJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRUb1NSR0JBQnl0ZShjb21w
b25lbnRzWzJdKSwgY29udmVydFRvU1JHQkFCeXRlKGNvbXBvbmVudHNbM10pIH07CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gQ29sb3JUeXBlIGNv
bG9yQnlNb2RpZmluZ0VhY2hOb25BbHBoYUNvbXBvbmVudChjb25zdCBDb2xvclR5cGUmIGNvbG9y
LCBGdW5jdG9yJiYgZnVuY3RvcikKQEAgLTE1Nyw1MCArMTMyLDY5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgRnUKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4g
Y29uc3RleHByIENvbG9yVHlwZSBjb2xvcldpdGhPdmVycmlkZW5BbHBoYShjb25zdCBDb2xvclR5
cGUmIGNvbG9yLCB1aW50OF90IG92ZXJyaWRlQWxwaGEpCiB7CiAgICAgYXV0byBjb3B5ID0gY29s
b3I7Ci0gICAgY29weS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRCeXRlVG88ZGVjbHR5cGUoY29w
eS5hbHBoYSk+KG92ZXJyaWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0Qnl0ZUFs
cGhhVG88dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPihvdmVycmlkZUFscGhhKTsK
ICAgICByZXR1cm4gY29weTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBDb2xv
clR5cGUgY29sb3JXaXRoT3ZlcnJpZGVuQWxwaGEoY29uc3QgQ29sb3JUeXBlJiBjb2xvciwgZmxv
YXQgb3ZlcnJpZGVBbHBoYSkKIHsKICAgICBhdXRvIGNvcHkgPSBjb2xvcjsKLSAgICBjb3B5LmFs
cGhhID0gY29udmVydENvbXBvbmVudEZsb2F0VG88ZGVjbHR5cGUoY29weS5hbHBoYSk+KG92ZXJy
aWRlQWxwaGEpOworICAgIGNvcHkuYWxwaGEgPSBjb252ZXJ0RmxvYXRBbHBoYVRvPHR5cGVuYW1l
IENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT4ob3ZlcnJpZGVBbHBoYSk7CiAgICAgcmV0dXJuIGNv
cHk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlw
ZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFscGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3Is
IHVpbnQ4X3Qgb3ZlcnJpZGVBbHBoYSkKIHsKLSAgICBhdXRvIGNvcHkgPSBjb2xvckJ5TW9kaWZp
bmdFYWNoTm9uQWxwaGFDb21wb25lbnQoY29sb3IsIFtdIChhdXRvIGNvbXBvbmVudCkgewotICAg
ICAgICByZXR1cm4gQ29tcG9uZW50VHJhaXRzPGRlY2x0eXBlKGNvbXBvbmVudCk+OjptYXhWYWx1
ZSAtIGNvbXBvbmVudDsKLSAgICB9KTsKLSAgICBjb3B5LmFscGhhID0gY29udmVydENvbXBvbmVu
dEJ5dGVUbzxkZWNsdHlwZShjb3B5LmFscGhhKT4ob3ZlcnJpZGVBbHBoYSk7Ci0gICAgcmV0dXJu
IGNvcHk7CisgICAgc3RhdGljX2Fzc2VydChDb2xvclR5cGU6Ok1vZGVsOjppc0ludmVydGlibGUp
OworCisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAg
IGF1dG8gY29weSA9IGNvbXBvbmVudHM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MzsgKytpKQorICAgICAgICBjb3B5W2ldID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzW2ldLm1h
eCAtIGNvbXBvbmVudHNbaV07CisgICAgY29weVszXSA9IGNvbnZlcnRCeXRlQWxwaGFUbzx0eXBl
bmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+KG92ZXJyaWRlQWxwaGEpOworCisgICAgcmV0
dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5cGU+KGNvcHkpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xvclR5cGU+IENvbG9yVHlwZSBpbnZlcnRlZENvbG9yV2l0aE92ZXJyaWRlbkFs
cGhhKGNvbnN0IENvbG9yVHlwZSYgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpCiB7Ci0gICAg
YXV0byBjb3B5ID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhhQ29tcG9uZW50KGNvbG9yLCBb
XSAoYXV0byBjb21wb25lbnQpIHsKLSAgICAgICAgcmV0dXJuIENvbXBvbmVudFRyYWl0czxkZWNs
dHlwZShjb21wb25lbnQpPjo6bWF4VmFsdWUgLSBjb21wb25lbnQ7Ci0gICAgfSk7Ci0gICAgY29w
eS5hbHBoYSA9IGNvbnZlcnRDb21wb25lbnRGbG9hdFRvPGRlY2x0eXBlKGNvcHkuYWxwaGEpPihv
dmVycmlkZUFscGhhKTsKLSAgICByZXR1cm4gY29weTsKKyAgICBzdGF0aWNfYXNzZXJ0KENvbG9y
VHlwZTo6TW9kZWw6OmlzSW52ZXJ0aWJsZSk7CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgYXV0byBjb3B5ID0gY29tcG9uZW50czsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgICAgIGNvcHlbaV0gPSBDb2xv
clR5cGU6Ok1vZGVsOjpyYW5nZXNbaV0ubWF4IC0gY29tcG9uZW50c1tpXTsKKyAgICBjb3B5WzNd
ID0gY29udmVydEZsb2F0QWxwaGFUbzx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+
KG92ZXJyaWRlQWxwaGEpOworCisgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50czxDb2xvclR5
cGU+KGNvcHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBi
b29sIGlzQmxhY2soY29uc3QgQ29sb3JUeXBlJiBjb2xvcikKK2NvbnN0ZXhwciBib29sIGlzQmxh
Y2soY29uc3QgTGFiPGZsb2F0PiYgY29sb3IpCiB7Ci0gICAgY29uc3RleHByIGF1dG8gbWluID0g
Q29tcG9uZW50VHJhaXRzPHR5cGVuYW1lIENvbG9yVHlwZTo6Q29tcG9uZW50VHlwZT46Om1pblZh
bHVlOwotICAgIGNvbnN0ZXhwciBhdXRvIG1heCA9IENvbXBvbmVudFRyYWl0czx0eXBlbmFtZSBD
b2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjptYXhWYWx1ZTsKKyAgICByZXR1cm4gY29sb3IubGln
aHRuZXNzID09IDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8ZmxvYXQ+OjpvcGFxdWU7
Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVsLCBSR0JNb2RlbDx0
eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pj4qPgorY29uc3RleHByIGJvb2wgaXNC
bGFjayhjb25zdCBDb2xvclR5cGUmIGNvbG9yKQorewogICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFs
cGhhXSA9IGNvbG9yOwotICAgIHJldHVybiBjMSA9PSBtaW4gJiYgYzIgPT0gbWluICYmIGMzID09
IG1pbiAmJiBhbHBoYSA9PSBtYXg7CisgICAgY29uc3RleHByIGF1dG8gcmFuZ2VzID0gQ29sb3JU
eXBlOjpNb2RlbDo6cmFuZ2VzOworICAgIHJldHVybiBjMSA9PSByYW5nZXNbMF0ubWluICYmIGMy
ID09IHJhbmdlc1sxXS5taW4gJiYgYzMgPT0gcmFuZ2VzWzJdLm1pbiAmJiBhbHBoYSA9PSBBbHBo
YVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+OjpvcGFxdWU7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25z
dCBDb2xvclR5cGUmIGNvbG9yKQorY29uc3RleHByIGJvb2wgaXNXaGl0ZShjb25zdCBMYWI8Zmxv
YXQ+JiBjb2xvcikKIHsKLSAgICBjb25zdGV4cHIgYXV0byBtYXggPSBDb21wb25lbnRUcmFpdHM8
dHlwZW5hbWUgQ29sb3JUeXBlOjpDb21wb25lbnRUeXBlPjo6bWF4VmFsdWU7CisgICAgcmV0dXJu
IGNvbG9yLmxpZ2h0bmVzcyA9PSAxMDAgJiYgY29sb3IuYWxwaGEgPT0gQWxwaGFUcmFpdHM8Zmxv
YXQ+OjpvcGFxdWU7Cit9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWVfdjx0eXBlbmFtZSBDb2xvclR5cGU6Ok1vZGVs
LCBSR0JNb2RlbDx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Pj4qPgorY29uc3Rl
eHByIGJvb2wgaXNXaGl0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQorewogICAgIGF1dG8gW2Mx
LCBjMiwgYzMsIGFscGhhXSA9IGNvbG9yOwotICAgIHJldHVybiBjMSA9PSBtYXggJiYgYzIgPT0g
bWF4ICYmIGMzID09IG1heCAmJiBhbHBoYSA9PSBtYXg7CisgICAgY29uc3RleHByIGF1dG8gcmFu
Z2VzID0gQ29sb3JUeXBlOjpNb2RlbDo6cmFuZ2VzOworICAgIHJldHVybiBjMSA9PSByYW5nZXNb
MF0ubWF4ICYmIGMyID09IHJhbmdlc1sxXS5tYXggJiYgYzMgPT0gcmFuZ2VzWzJdLm1heCAmJiBh
bHBoYSA9PSBBbHBoYVRyYWl0czx0eXBlbmFtZSBDb2xvclR5cGU6OkNvbXBvbmVudFR5cGU+Ojpv
cGFxdWU7CiB9CiAKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZf
dCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRi5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+IG1ha2VTaW1wCiAgICAgICAgIGNvbXBvbmVudEFycmF5W2ldID0gY29tcG9uZW50OwogICAg
IH0KIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbXBvbmVu
dEFycmF5WzFdLCBjb21wb25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVu
dEFycmF5WzBdIH0pOworICAgIHJldHVybiBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JB
IHsgY29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVsz
XSwgY29tcG9uZW50QXJyYXlbMF0gfSk7CiB9CiAKIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRT
dHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAJKHJldmlzaW9uIDI3MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5z
Zm9ybUMKICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHJn
YlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGNvbG9yID0g
cmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudENsYW1waW5nKGNvbG9yKTsKICAgICAgICAgICAgICAg
ICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xMTUsNyArMTE1LDcg
QEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQwogICAgICAgICAgICAg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBp
IC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9SR0JDb2xvckNvbXBv
bmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1JHQkNvbG9yQ29t
cG9uZW50Q2xhbXBpbmcoY29sb3IpOwogICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBhcnJheTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNyArODEsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHJvdW5kQW5kCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHJldHVybiBjb252ZXJ0
VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHIsIGcsIGIsIGEgfSk7CisgICAgcmV0dXJuIGNvbnZl
cnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyByLCBnLCBiLCBhIH0pOwogfQogCiBDb2xvcjo6
Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShyZXZpc2lvbiAyNzE2OTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBDb2xvciBOYXRpdmVJbWFnZTo6c2lu
Z2xlUGl4ZWxTb2xpZENvbG9yCiAgICAgaWYgKCFwaXhlbFszXSkKICAgICAgICAgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCi0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhl
bFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOworICAgIHJldHVybiBt
YWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+PihwaXhl
bFswXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsy
XSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7CiB9CiAKIHZvaWQgTmF0aXZlSW1hZ2U6OmNs
ZWFyU3ViaW1hZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDI3
MTY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTkgKzkxLDE5IEBAIGJvb2wgQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHIKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgR1JBWVNDQUxFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShncmF5c2Nh
bGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xv
ckNvbXBvbmVudHMoY29sb3IpKSk7CisgICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmc8U1JHQkE8ZmxvYXQ+PihncmF5c2NhbGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJh
bnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBjYXNlIFNFUElBOiB7Ci0gICAgICAgIGNvbG9y
ID0gYXNTUkdCQShzZXBpYUNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKKyAgICAgICAgY29sb3IgPSBtYWtl
RnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTxmbG9hdD4+KHNlcGlhQ29sb3JNYXRyaXgobV9h
bW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGNvbG9y
KSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBIVUVfUk9UQVRFOiB7
Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShodWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCku
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7Cisg
ICAgICAgIGNvbG9yID0gbWFrZUZyb21Db21wb25lbnRzQ2xhbXBpbmc8U1JHQkE8ZmxvYXQ+Piho
dWVSb3RhdGVDb2xvck1hdHJpeChtX2Ftb3VudCkudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMo
YXNDb2xvckNvbXBvbmVudHMoY29sb3IpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBjYXNlIFNBVFVSQVRFOiB7Ci0gICAgICAgIGNvbG9yID0gYXNTUkdCQShzYXR1cmF0aW9u
Q29sb3JNYXRyaXgobV9hbW91bnQpLnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JD
b21wb25lbnRzKGNvbG9yKSkpOworICAgICAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0Ns
YW1waW5nPFNSR0JBPGZsb2F0Pj4oc2F0dXJhdGlvbkNvbG9yTWF0cml4KG1fYW1vdW50KS50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC0xNzIsNyArMTcyLDcgQEAg
Ym9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aQogICAgIH0KICAgICBjYXNl
IEJSSUdIVE5FU1M6CiAgICAgICAgIGNvbG9yID0gY29sb3JCeU1vZGlmaW5nRWFjaE5vbkFscGhh
Q29tcG9uZW50KGNvbG9yLCBbJl0oZmxvYXQgY29tcG9uZW50KSB7Ci0gICAgICAgICAgICByZXR1
cm4gc3RkOjptYXg8ZmxvYXQ+KG1fYW1vdW50ICogY29tcG9uZW50LCAwLjBmKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmNsYW1wPGZsb2F0PihtX2Ftb3VudCAqIGNvbXBvbmVudCwgMC4wZiwg
MS4wZik7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpA
QCAtMjI0LDE1ICsyMjQsNzggQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gSW52ZXJ0TGlnaHRu
ZXNzRgogICAgIHJldHVybiBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgp
OwogfQogCisvLyBGSVhNRTogVGhpcyBodWVSb3RhdGUgY29kZSBleGlzdHMgdG8gYWxsb3cgSW52
ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uIHRvIHBlcmZvcm0gaHVlIHJvdGF0aW9uCisvLyBv
biBjb2xvciB2YWx1ZXMgb3V0c2lkZSBvZiB0aGUgbm9uLWV4dGVuZGVkIFNSR0IgdmFsdWUgcmFu
Z2UgKDAtMSkgdG8gbWFpbnRhaW4gdGhlIGJlaGF2aW9yIG9mIGNvbG9ycworLy8gcHJpb3IgdG8g
Y2xhbXBpbmcgYmVpbmcgZW5mb3JjZWQuIEl0IHNob3VsZCBsaWtlbHkganVzdCB1c2UgdGhlIGV4
aXN0aW5nIGh1ZVJvdGF0ZUNvbG9yTWF0cml4KGFtb3VudCkKKy8vIGluIENvbG9yTWF0cml4LmgK
K3N0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGh1ZVJvdGF0ZShjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+JiBjb2xvciwgZmxvYXQgYW1vdW50KQoreworICAgIGF1dG8gW3IsIGcsIGIs
IGFscGhhXSA9IGNvbG9yOworCisgICAgYXV0byBbbWluLCBtYXhdID0gc3RkOjptaW5tYXgoeyBy
LCBnLCBiIH0pOworICAgIGZsb2F0IGNocm9tYSA9IG1heCAtIG1pbjsKKworICAgIGZsb2F0IGxp
Z2h0bmVzcyA9IDAuNWYgKiAobWF4ICsgbWluKTsKKyAgICBmbG9hdCBzYXR1cmF0aW9uOworICAg
IGlmICghY2hyb21hKQorICAgICAgICBzYXR1cmF0aW9uID0gMDsKKyAgICBlbHNlIGlmIChsaWdo
dG5lc3MgPD0gMC41ZikKKyAgICAgICAgc2F0dXJhdGlvbiA9IChjaHJvbWEgLyAobWF4ICsgbWlu
KSk7CisgICAgZWxzZQorICAgICAgICBzYXR1cmF0aW9uID0gKGNocm9tYSAvICgyLjBmIC0gKG1h
eCArIG1pbikpKTsKKworICAgIGlmICghc2F0dXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHsgbGln
aHRuZXNzLCBsaWdodG5lc3MsIGxpZ2h0bmVzcywgYWxwaGEgfTsKKworICAgIGZsb2F0IGh1ZTsK
KyAgICBpZiAoIWNocm9tYSkKKyAgICAgICAgaHVlID0gMDsKKyAgICBlbHNlIGlmIChtYXggPT0g
cikKKyAgICAgICAgaHVlID0gKDYwLjBmICogKChnIC0gYikgLyBjaHJvbWEpKSArIDM2MC4wZjsK
KyAgICBlbHNlIGlmIChtYXggPT0gZykKKyAgICAgICAgaHVlID0gKDYwLjBmICogKChiIC0gcikg
LyBjaHJvbWEpKSArIDEyMC4wZjsKKyAgICBlbHNlCisgICAgICAgIGh1ZSA9ICg2MC4wZiAqICgo
ciAtIGcpIC8gY2hyb21hKSkgKyAyNDAuMGY7CisKKyAgICBpZiAoaHVlID49IDM2MC4wZikKKyAg
ICAgICAgaHVlIC09IDM2MC4wZjsKKworICAgIGh1ZSAvPSAzNjAuMGY7CisKKyAgICAvLyBQZXJm
b3JtIHJvdGF0aW9uLgorICAgIGh1ZSA9IHN0ZDo6Zm1vZChodWUgKyBhbW91bnQsIDEuMGYpOwor
CisgICAgZmxvYXQgdGVtcDIgPSBsaWdodG5lc3MgPD0gMC41ZiA/IGxpZ2h0bmVzcyAqICgxLjBm
ICsgc2F0dXJhdGlvbikgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0
dXJhdGlvbjsKKyAgICBmbG9hdCB0ZW1wMSA9IDIuMGYgKiBsaWdodG5lc3MgLSB0ZW1wMjsKKyAg
ICAKKyAgICBodWUgKj0gNi4wZjsgLy8gY2FsY0h1ZSgpIHdhbnRzIGh1ZSBpbiB0aGUgMC02IHJh
bmdlLgorCisgICAgLy8gSHVlIGlzIGluIHRoZSByYW5nZSAwLTYsIG90aGVyIGFyZ3MgaW4gMC0x
LgorICAgIGF1dG8gY2FsY0h1ZSA9IFtdKGZsb2F0IHRlbXAxLCBmbG9hdCB0ZW1wMiwgZmxvYXQg
aHVlVmFsKSB7CisgICAgICAgIGlmIChodWVWYWwgPCAwLjBmKQorICAgICAgICAgICAgaHVlVmFs
ICs9IDYuMGY7CisgICAgICAgIGVsc2UgaWYgKGh1ZVZhbCA+PSA2LjBmKQorICAgICAgICAgICAg
aHVlVmFsIC09IDYuMGY7CisgICAgICAgIGlmIChodWVWYWwgPCAxLjBmKQorICAgICAgICAgICAg
cmV0dXJuIHRlbXAxICsgKHRlbXAyIC0gdGVtcDEpICogaHVlVmFsOworICAgICAgICBpZiAoaHVl
VmFsIDwgMy4wZikKKyAgICAgICAgICAgIHJldHVybiB0ZW1wMjsKKyAgICAgICAgaWYgKGh1ZVZh
bCA8IDQuMGYpCisgICAgICAgICAgICByZXR1cm4gdGVtcDEgKyAodGVtcDIgLSB0ZW1wMSkgKiAo
NC4wZiAtIGh1ZVZhbCk7CisgICAgICAgIHJldHVybiB0ZW1wMTsKKyAgICB9OworCisgICAgcmV0
dXJuIHsKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVtcDIsIGh1ZSArIDIuMGYpLAorICAgICAg
ICBjYWxjSHVlKHRlbXAxLCB0ZW1wMiwgaHVlKSwKKyAgICAgICAgY2FsY0h1ZSh0ZW1wMSwgdGVt
cDIsIGh1ZSAtIDIuMGYpLAorICAgICAgICBhbHBoYQorICAgIH07Cit9CisKIGJvb2wgSW52ZXJ0
TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihTUkdCQTxmbG9hdD4mIGNv
bG9yKSBjb25zdAogewotICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb2xvcik7Ci0gICAgCi0gICAg
Ly8gUm90YXRlIHRoZSBodWUgMTgwZGVnLgotICAgIGhzbGEuaHVlID0gc3RkOjpmbW9kKGhzbGEu
aHVlICsgMC41ZiwgMS4wZik7Ci0gICAgCi0gICAgLy8gQ29udmVydCBiYWNrIHRvIFJHQi4KLSAg
ICBhdXRvIGh1ZVJvdGF0ZWRTUkdCQSA9IHRvU1JHQkEoaHNsYSk7CisgICAgYXV0byBodWVSb3Rh
dGVkU1JHQkFDb21wb25lbnRzID0gaHVlUm90YXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSwg
MC41Zik7CiAgICAgCiAgICAgLy8gQXBwbHkgdGhlIG1hdHJpeC4gU2VlIHJkYXI6Ly9wcm9ibGVt
LzQxMTQ2NjUwIGZvciBob3cgdGhpcyBtYXRyaXggd2FzIGRlcml2ZWQuCiAgICAgY29uc3RleHBy
IENvbG9yTWF0cml4PDUsIDM+IHRvRGFya01vZGVNYXRyaXggewpAQCAtMjQwLDcgKzMwMyw3IEBA
IGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmEKICAgICAgICAgMC4wMzBm
LCAtMC43NDFmLCAtMC4wODlmLCAwLjBmLCAxLjBmLAogICAgICAgICAwLjAzMGYsICAwLjA1OWYs
IC0wLjg5MGYsIDAuMGYsIDEuMGYKICAgICB9OwotICAgIGNvbG9yID0gYXNTUkdCQSh0b0RhcmtN
b2RlTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGFzQ29sb3JDb21wb25lbnRzKGh1
ZVJvdGF0ZWRTUkdCQSkpKTsKKyAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5n
PFNSR0JBPGZsb2F0Pj4odG9EYXJrTW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50
cyhodWVSb3RhdGVkU1JHQkFDb21wb25lbnRzKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTI1MiwxNiArMzE1LDExIEBAIGJvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpp
bnYKICAgICAgICAgLTAuMDQ5ZiwgLTEuMzQ3ZiwgIDAuMTQ2ZiwgMC4wZiwgMS4yNWYsCiAgICAg
ICAgIC0wLjA0OWYsIC0wLjA5N2YsIC0xLjEwNGYsIDAuMGYsIDEuMjVmCiAgICAgfTsKLSAgICBh
dXRvIGNvbnZlcnRlZFRvTGlnaHRNb2RlID0gYXNTUkdCQSh0b0xpZ2h0TW9kZU1hdHJpeC50cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpKTsKLQotICAg
IC8vIENvbnZlcnQgdG8gSFNMLgotICAgIGF1dG8gaHNsYSA9IHRvSFNMQShjb252ZXJ0ZWRUb0xp
Z2h0TW9kZSk7CisgICAgYXV0byBjb252ZXJ0ZWRUb0xpZ2h0TW9kZUNvbXBvbmVudHMgPSB0b0xp
Z2h0TW9kZU1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhhc0NvbG9yQ29tcG9uZW50
cyhjb2xvcikpOwogCi0gICAgLy8gSHVlIHJvdGF0ZSBieSAxODBkZWcuCi0gICAgaHNsYS5odWUg
PSBzdGQ6OmZtb2QoaHNsYS5odWUgKyAwLjVmLCAxLjBmKTsKKyAgICBhdXRvIGh1ZVJvdGF0ZWRT
UkdCQUNvbXBvbmVudHMgPSBodWVSb3RhdGUoY29udmVydGVkVG9MaWdodE1vZGVDb21wb25lbnRz
LCAwLjVmKTsKIAotICAgIC8vIEFuZCByZXR1cm4gUkdCLgotICAgIGNvbG9yID0gdG9TUkdCQSho
c2xhKTsKKyAgICBjb2xvciA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPGZsb2F0
Pj4oaHVlUm90YXRlZFNSR0JBQ29tcG9uZW50cyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6
dHJhbnNmb3JtQ29sb3IoQ28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBjb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JBQ29sb3IpOworICAgIGNvbG9y
ID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihzUkdCQUNvbG9yKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTM2LDcgKzEzNiw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6aW52ZXJz
ZVRyYW5zZm9ybUMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb2xv
ciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JBQ29sb3IpOworICAgIGNvbG9yID0gY29u
dmVydFRvPFNSR0JBPHVpbnQ4X3Q+PihzUkdCQUNvbG9yKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29s
b3JHdGsuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBjb2xv
cikKLSAgICA6IENvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKFNSR0JBIHsgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yLnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ncmVlbiksIHN0
YXRpY19jYXN0PGZsb2F0Pihjb2xvci5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmFs
cGhhKSB9KSkKKyAgICA6IENvbG9yKGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBz
dGF0aWNfY2FzdDxmbG9hdD4oY29sb3IucmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmdy
ZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLmJsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y29sb3IuYWxwaGEpIH0pKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29sb3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTkyLDEzICs5MiwxMyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IG1h
a2VTaW1wCiAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxbNF07CiAgICAgICAgIFtvZmZzY3JlZW5S
ZXAgZ2V0UGl4ZWw6cGl4ZWwgYXRYOjAgeTowXTsKIAotICAgICAgICByZXR1cm4gY2xhbXBUb0Nv
bXBvbmVudEJ5dGVzPFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFsz
XSk7CisgICAgICAgIHJldHVybiBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50
OF90Pj4ocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgcGl4ZWxbM10pOwogICAgIH0KIAog
ICAgIFtyZ2JDb2xvciBnZXRSZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQg
Ymx1ZTomYmx1ZUNvbXBvbmVudCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlMKIAotICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0
YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5D
b21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0
PGZsb2F0PihhbHBoYSkgfSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4o
U1JHQkEgeyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGdyZWVuQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9y
KE5TQ29sb3IgKmNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENv
bG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCi0gICAgOiBDb2xvcihjb252ZXJ0VG9Db21w
b25lbnRCeXRlcyhTUkdCQSB7IGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSkp
CisgICAgOiBDb2xvcihjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KFNSR0JBIHsgY29sb3Iuciwg
Y29sb3IuZywgY29sb3IuYiwgY29sb3IuYSB9KSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNzE2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6
c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9SX0YmIGNvbG9yKQogewot
ICAgIGF1dG8gY29sb3JLZXkgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IGNvbG9y
LnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgfSk7CisgICAgYXV0byBjb2xvcktleSA9IGNv
bnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBjb2xvci5yLCBjb2xvci5nLCBjb2xvci5i
LCBjb2xvci5hIH0pOwogCiAgICAgaWYgKCFjb2xvcktleSkgewogICAgICAgICBpZiAoIW1femVy
b0JydXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5tbQkocmV2
aXNpb24gMjcxNjkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENvbG9yIGNvbG9yRnJvbVVJQ29sb3Io
VUlDb2xvciAqY29sb3IpCiAKICAgICBbY29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46
JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKIAotICAg
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0
PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkg
fSk7CisgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4oU1JHQkEgeyBzdGF0aWNf
Y2FzdDxmbG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9u
ZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oYWxwaGEpIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNzE2OTApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgU1JHQkE8dWludDhfdD4gbWVudUJhY2tncm91
bmRDb2xvCiAgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKICAgICBbb2Zmc2NyZWVuUmVwIGdldFBp
eGVsOnBpeGVsIGF0WDowIHk6MF07CiAKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVz
PFNSR0JBPihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CisgICAgcmV0
dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNSR0JBPHVpbnQ4X3Q+PihwaXhlbFswXSwg
cGl4ZWxbMV0sIHBpeGVsWzJdLCBwaXhlbFszXSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lTWFj
OjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9y
OjpPcHRpb25zPiBvcHRpb25zKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFs
dWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjcxNjkwKQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgYmx1ZSA9
IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJsdWUsIHNp
bXBsZVRvLmJsdWUsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWUsIHNpbXBsZUFuaW1hdGVk
LmJsdWUpOwogICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJl
cGVhdENvdW50LCBzaW1wbGVGcm9tLmFscGhhLCBzaW1wbGVUby5hbHBoYSwgc2ltcGxlVG9BdEVu
ZE9mRHVyYXRpb24uYWxwaGEsIHNpbXBsZUFuaW1hdGVkLmFscGhhKTsKICAgICAgICAgCi0gICAg
ICAgIGFuaW1hdGVkID0gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihzdGQ6Omxyb3VuZChy
ZWQpLCBzdGQ6Omxyb3VuZChncmVlbiksIHN0ZDo6bHJvdW5kKGJsdWUpLCBzdGQ6Omxyb3VuZChh
bHBoYSkpOworICAgICAgICBhbmltYXRlZCA9IG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPHVpbnQ4X3Q+PihzdGQ6Omxyb3VuZChyZWQpLCBzdGQ6Omxyb3VuZChncmVlbiksIHN0ZDo6
bHJvdW5kKGJsdWUpLCBzdGQ6Omxyb3VuZChhbHBoYSkpOwogICAgIH0KIAogICAgIE9wdGlvbmFs
PGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBmcm9t
LCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQpAQCAtMTIwLDcgKzEyMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOwogCiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhhIG9uIHJl
c3VsdCB0byAxMDAlIG9wYXF1ZS4KLSAgICAgICAgbV90byA9IGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4oc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsg
c2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CisgICAg
ICAgIG1fdG8gPSBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4oc2lt
cGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5n
cmVlbiwgc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSk7CiAgICAgfQogCiAgICAgc3Rh
dGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkocmV2aXNpb24gMjcxNjkwKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wMS0yMCAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5nIGxvZ2lj
IHRvIGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEZyYXNlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNw
cDoKKyAgICAgICAgKHdlYmtpdENvbG9yVG9XZWJDb3JlQ29sb3IpOgorICAgICAgICBVcGRhdGUg
dG8gdXNlIG5ldyBjb252ZXJ0VG88PiBmdW5jdGlvbnMuCisKIDIwMjEtMDEtMjEgIERhdmUgQmxh
bmNoYXJkICA8ZGF2ZUBncm93LmdhbWU+CiAKICAgICAgICAgTWlzc2luZyBoZWFkZXIgZ3RrL2d0
ay5oIGluIFBvaW50ZXJMb2NrTWFuYWdlclgxMS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAyNzE2OTApCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdENvbG9y
LCB3ZWJraXRfCiAKIGNvbnN0IFdlYkNvcmU6OkNvbG9yIHdlYmtpdENvbG9yVG9XZWJDb3JlQ29s
b3IoV2ViS2l0Q29sb3IqIGNvbG9yKQogewotICAgIHJldHVybiBXZWJDb3JlOjpjb252ZXJ0VG9D
b21wb25lbnRCeXRlcyhXZWJDb3JlOjpTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+
cmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvci0+Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpIH0pOworICAg
IHJldHVybiBXZWJDb3JlOjpjb252ZXJ0VG88V2ViQ29yZTo6U1JHQkE8dWludDhfdD4+KFdlYkNv
cmU6OlNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5yZWQpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3ItPmdyZWVuKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ibHVlKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5hbHBoYSkgfSk7CiB9CiAKIHZvaWQgd2Via2l0Q29sb3JG
aWxsRnJvbVdlYkNvcmVDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgd2ViQ29yZUNvbG9yLCBX
ZWJLaXRDb2xvciogY29sb3IpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzE2OTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wMS0yMCAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5nIGxvZ2ljIHRv
IGJlIG1vcmUgY29uc2lzdGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEZyYXNlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRl
c3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIFVwZGF0ZSB0ZXN0cyB0byB1c2UgbmV3IGNv
bnZlcnRUbzw+IGZ1bmN0aW9ucy4KKwogMjAyMS0wMS0yMCAgSm9uYXRoYW4gQmVkYXJkICA8amJl
ZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNjbXB5XSBHcmFjZWZ1bGx5IGhhbmRs
ZSBtaXNzaW5nIGtleXJpbmcgYmFja2VuZApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogICAgIAog
ICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVz
cyk7CiAgICAgCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9
IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBF
Q1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtNjIsNyArNjIsNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5s
aWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NS
R0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3Ip
OwogfQogCkBAIC03OCw3ICs3OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogICAg
IEVYUEVDVF9GTE9BVF9FUShjb2xvci5saWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7
CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMo
dG9TUkdCQShoc2xhQ29sb3IpKTsKKyAgICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVy
dFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NSR0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShj
b2xvciwgcm91bmRUcmlwcGVkQ29sb3IpOwogfQogCkBAIC05NCw3ICs5NCw3IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX0dyZWVuKQogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVz
cygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAotICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3Ig
PSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NSR0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8g
cm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNs
YUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9yLCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAK
QEAgLTExMCw3ICsxMTAsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogCiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKGNvbG9yLmxpZ2h0bmVzcygpLCBoc2xhQ29sb3IubGlnaHRuZXNzKTsKIAot
ICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyh0b1NS
R0JBKGhzbGFDb2xvcikpOworICAgIGF1dG8gcm91bmRUcmlwcGVkQ29sb3IgPSBjb252ZXJ0VG88
U1JHQkE8dWludDhfdD4+KHRvU1JHQkEoaHNsYUNvbG9yKSk7CiAgICAgRVhQRUNUX0VRKGNvbG9y
LCByb3VuZFRyaXBwZWRDb2xvcik7CiB9CiAKQEAgLTEyNiw3ICsxMjYsNyBAQCBURVNUKENvbG9y
LCBSR0JUb0hTTF9EYXJrR3JheSkKICAgICAKICAgICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGln
aHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3MpOwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRD
b2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAg
YXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdC
QShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEoY29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsK
IH0KIApAQCAtMTQyLDcgKzE0Miw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoY29sb3IubGlnaHRuZXNzKCksIGhzbGFDb2xvci5saWdodG5lc3Mp
OwogCi0gICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVz
KHRvU1JHQkEoaHNsYUNvbG9yKSk7CisgICAgYXV0byByb3VuZFRyaXBwZWRDb2xvciA9IGNvbnZl
cnRUbzxTUkdCQTx1aW50OF90Pj4odG9TUkdCQShoc2xhQ29sb3IpKTsKICAgICBFWFBFQ1RfRVEo
Y29sb3IsIHJvdW5kVHJpcHBlZENvbG9yKTsKIH0KIApAQCAtMTU4LDcgKzE1OCw3IEBAIFRFU1Qo
Q29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIAogICAgIEVYUEVDVF9GTE9BVF9FUShjb2xvci5s
aWdodG5lc3MoKSwgaHNsYUNvbG9yLmxpZ2h0bmVzcyk7CiAKLSAgICBhdXRvIHJvdW5kVHJpcHBl
ZENvbG9yID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXModG9TUkdCQShoc2xhQ29sb3IpKTsKKyAg
ICBhdXRvIHJvdW5kVHJpcHBlZENvbG9yID0gY29udmVydFRvPFNSR0JBPHVpbnQ4X3Q+Pih0b1NS
R0JBKGhzbGFDb2xvcikpOwogICAgIEVYUEVDVF9FUShjb2xvciwgcm91bmRUcmlwcGVkQ29sb3Ip
OwogfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRD
b2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjcxNjkwKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5
KQogICAgIH0KIAogICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1
NSwgMTI4LCA2MywgMTI3IH07Ci0gICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRUb0NvbXBvbmVudEZs
b2F0cyhjb21wb25lbnRCeXRlcykgfTsKKyAgICBDb2xvciByZ2IxIHsgY29udmVydFRvPFNSR0JB
PGZsb2F0Pj4oY29tcG9uZW50Qnl0ZXMpIH07CiAgICAgQ29sb3IgcmdiMiB7IGNvbXBvbmVudEJ5
dGVzIH07CiAgICAgRVhQRUNUX05FKHJnYjEsIHJnYjIpOwogICAgIEVYUEVDVF9ORShyZ2IyLCBy
Z2IxKTsKQEAgLTEzOCw3ICsxMzgsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gpCiAgICAg
fQogCiAgICAgYXV0byBjb21wb25lbnRCeXRlcyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAxMjgs
IDYzLCAxMjcgfTsKLSAgICBDb2xvciByZ2IxIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXRzKGNv
bXBvbmVudEJ5dGVzKSB9OworICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0VG88U1JHQkE8ZmxvYXQ+
Pihjb21wb25lbnRCeXRlcykgfTsKICAgICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsK
ICAgICBFWFBFQ1RfTkUocmdiMS5oYXNoKCksIHJnYjIuaGFzaCgpKTsKIH0KSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1tCShyZXZpc2lvbiAyNzE2
OTApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIFdlYkNvcmU6OkNvbG9yIFRlc3RQREZQYWdl
Ojpjb2xvckF0UG9pbnQKIAogICAgIGlmICghYSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNv
bG9yOjp0cmFuc3BhcmVudEJsYWNrOwotICAgIHJldHVybiBXZWJDb3JlOjpjbGFtcFRvQ29tcG9u
ZW50Qnl0ZXM8V2ViQ29yZTo6U1JHQkE+KHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1
NSAvIGEsIGEpOworICAgIHJldHVybiBXZWJDb3JlOjptYWtlRnJvbUNvbXBvbmVudHNDbGFtcGlu
Z0V4Y2VwdEFscGhhPFdlYkNvcmU6OlNSR0JBPHVpbnQ4X3Q+PihyICogMjU1IC8gYSwgZyAqIDI1
NSAvIGEsIGIgKiAyNTUgLyBhLCBhKTsKIH0KIAogLy8gRG9jdW1lbnRzCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNzE2OTApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOSBAQAorMjAyMS0wMS0yMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgUmV3b3JrIGNvbG9yIGNsYW1waW5nIGxvZ2ljIHRvIGJlIG1vcmUgY29uc2lz
dGVudCBhbmQgY2xlYXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMDcxNgorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAg
ICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0RmlsbENvbG9yLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldEZpbGxDb2xv
ci5odG1sOgorICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0U2hhZG93
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNl
dFNoYWRvdy5odG1sOgorICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0
U3Ryb2tlQ29sb3ItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL2NhbnZhcy1v
dmVybG9hZHMtc2V0U3Ryb2tlQ29sb3IuaHRtbDoKKyAgICAgICAgRXh0ZW5kIHRlc3RzIHRvIGNv
dmVyIHRlc3RpbmcgdmFyaW91cyB2YWx1ZXMgaW5jbHVkaW5nIE5hTiwgaW5jbHVkaW5nIHRlc3Rp
bmcgd2hhdAorICAgICAgICBjb2xvciBhY3R1YWxseSBnZXRzIHNldCBhcyB0aGUgY3VycmVudCBz
dHlsZS4gCisKIDIwMjEtMDEtMjEgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBOdWxsIGNoZWNrIGluIFJUQ1J0cFNGcmFtZVRyYW5zZm9ybTo6Y3JlYXRlU3RyZWFtcwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRGaWxsQ29s
b3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2Nh
bnZhcy1vdmVybG9hZHMtc2V0RmlsbENvbG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjcxNjkw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRGaWxsQ29s
b3ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDEzICs0LDUwIEBAIE9uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBQQVNTIGN0eC5zZXRGaWxsQ29s
b3IoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KK1BB
U1MgY3R4LmZpbGxTdHlsZSBpcyAnIzAwMDAwMCcKKworCit1bmRlZmluZWQgc2V0RmlsbENvbG9y
KERPTVN0cmluZyBjb2xvciwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhhKQorCiBQ
QVNTIGN0eC5zZXRGaWxsQ29sb3IoJ3JlZCcpIGlzIHVuZGVmaW5lZAotUEFTUyBjdHguc2V0Rmls
bENvbG9yKDApIGlzIHVuZGVmaW5lZAotUEFTUyBjdHguc2V0RmlsbENvbG9yKDAsIDApIGlzIHVu
ZGVmaW5lZAotUEFTUyBjdHguc2V0RmlsbENvbG9yKDAsIDAsIDApIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IFR5cGUgZXJyb3IuCi1QQVNTIGN0eC5zZXRGaWxsQ29sb3IoMCwgMCwgMCwgMCkg
aXMgdW5kZWZpbmVkCi1QQVNTIGN0eC5zZXRGaWxsQ29sb3IoMCwgMCwgMCwgMCwgMCkgaXMgdW5k
ZWZpbmVkCi1QQVNTIGN0eC5zZXRGaWxsQ29sb3IoMCwgMCwgMCwgMCwgMCwgMCkgaXMgdW5kZWZp
bmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJyNmZjAwMDAnCitQQVNTIGN0eC5zZXRGaWxsQ29s
b3IoJ3JlZCcsIC41KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAncmdiYSgy
NTUsIDAsIDAsIDAuNSknCitQQVNTIGN0eC5zZXRGaWxsQ29sb3IoJ3JlZCcsIE5hTikgaXMgdW5k
ZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJworCisK
K3VuZGVmaW5lZCBzZXRGaWxsQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwgb3B0
aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhhID0gMSkKKworUEFTUyBjdHguc2V0RmlsbENv
bG9yKC4yNSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJyM0MDQwNDAnCitQ
QVNTIGN0eC5zZXRGaWxsQ29sb3IoLjI1LCAuNSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5maWxs
U3R5bGUgaXMgJ3JnYmEoNjQsIDY0LCA2NCwgMC41KScKK1BBU1MgY3R4LnNldEZpbGxDb2xvcihO
YU4sIC41KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAncmdiYSg2NCwgNjQs
IDY0LCAwLjUpJworUEFTUyBjdHguc2V0RmlsbENvbG9yKC4yNSwgTmFOKSBpcyB1bmRlZmluZWQK
K1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAncmdiYSg2NCwgNjQsIDY0LCAwLjUpJworCisKK3VuZGVm
aW5lZCBzZXRGaWxsQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IHIsIHVucmVzdHJpY3RlZCBmbG9h
dCBnLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYiwgdW5yZXN0cmljdGVkIGZsb2F0IGEpCisKK1BBU1Mg
Y3R4LnNldEZpbGxDb2xvciguMSwgLjIsIC4zKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBU
eXBlIGVycm9yLgorUEFTUyBjdHguc2V0RmlsbENvbG9yKC4xLCAuMiwgLjMsIC40KSBpcyB1bmRl
ZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFT
UyBjdHguc2V0RmlsbENvbG9yKE5hTiwgLjIsIC4zLCAuNCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0
eC5maWxsU3R5bGUgaXMgJ3JnYmEoMjYsIDUxLCA3NywgMC40KScKK1BBU1MgY3R4LnNldEZpbGxD
b2xvciguMSwgTmFOLCAuMywgLjQpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguZmlsbFN0eWxlIGlz
ICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCknCitQQVNTIGN0eC5zZXRGaWxsQ29sb3IoLjEsIC4yLCBO
YU4sIC40KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LmZpbGxTdHlsZSBpcyAncmdiYSgyNiwgNTEs
IDc3LCAwLjQpJworUEFTUyBjdHguc2V0RmlsbENvbG9yKC4xLCAuMiwgLjMsIE5hTikgaXMgdW5k
ZWZpbmVkCitQQVNTIGN0eC5maWxsU3R5bGUgaXMgJ3JnYmEoMjYsIDUxLCA3NywgMC40KScKK1BB
U1MgY3R4LnNldEZpbGxDb2xvciguNSwgLjQsIC4zLCAuMiwgLjEpIGlzIHVuZGVmaW5lZAorUEFT
UyBjdHguZmlsbFN0eWxlIGlzICdyZ2JhKDEyOCwgMTAyLCA3NywgMC4yKScKK1BBU1MgY3R4LnNl
dEZpbGxDb2xvcigxLCAuNCwgLjMsIC4yLCAuMSwgMCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5m
aWxsU3R5bGUgaXMgJ3JnYmEoMjU1LCAxMDIsIDc3LCAwLjIpJworUEFTUyBjdHguc2V0RmlsbENv
bG9yKDEuNSwgMTAsIC0wLjEsIC0xMDApIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguZmlsbFN0eWxl
IGlzICdyZ2JhKDI1NSwgMjU1LCAwLCAwKScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFz
LW92ZXJsb2Fkcy1zZXRGaWxsQ29sb3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldEZpbGxDb2xvci5odG1sCShyZXZpc2lvbiAy
NzE2OTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldEZp
bGxDb2xvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC03LDE5ICs3LDY5IEBACiA8c2NyaXB0Pgog
ZGVzY3JpcHRpb24oIlRlc3QgdGhlIGJlaGF2aW9yIG9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5zZXRGaWxsQ29sb3IoKSB3aGVuIGNhbGxlZCB3aXRoIGRpZmZlcmVudCBudW1iZXJzIG9mIGFy
Z3VtZW50cy4iKTsKIAotdmFyIGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycp
LmdldENvbnRleHQoJzJkJyk7CitsZXQgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2Fu
dmFzJykuZ2V0Q29udGV4dCgnMmQnKTsKIAotdmFyIFR5cGVFcnJvciA9ICJUeXBlRXJyb3I6IFR5
cGUgZXJyb3IiOwotdmFyIFR5cGVFcnJvck5vdEVub3VnaEFyZ3VtZW50cyA9ICJUeXBlRXJyb3I6
IE5vdCBlbm91Z2ggYXJndW1lbnRzIjsKK2xldCBUeXBlRXJyb3IgPSAiVHlwZUVycm9yOiBUeXBl
IGVycm9yIjsKK2xldCBUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMgPSAiVHlwZUVycm9yOiBO
b3QgZW5vdWdoIGFyZ3VtZW50cyI7CiAKIHNob3VsZFRocm93KCJjdHguc2V0RmlsbENvbG9yKCki
LCAiVHlwZUVycm9yTm90RW5vdWdoQXJndW1lbnRzIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHls
ZSIsICInIzAwMDAwMCciKTsKKworCitkZWJ1ZygiXG5cbnVuZGVmaW5lZCBzZXRGaWxsQ29sb3Io
RE9NU3RyaW5nIGNvbG9yLCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYWxwaGEpXG4iKQog
c2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoJ3JlZCcpIiwgInVuZGVmaW5lZCIpOwotc2hvdWxk
QmUoImN0eC5zZXRGaWxsQ29sb3IoMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgiY3R4LnNl
dEZpbGxDb2xvcigwLCAwKSIsICJ1bmRlZmluZWQiKTsKLXNob3VsZFRocm93KCJjdHguc2V0Rmls
bENvbG9yKDAsIDAsIDApIiwgIlR5cGVFcnJvciIpOwotc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29s
b3IoMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgiY3R4LnNldEZpbGxDb2xv
cigwLCAwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsKLXNob3VsZEJlKCJjdHguc2V0RmlsbENv
bG9yKDAsIDAsIDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxs
U3R5bGUiLCAiJyNmZjAwMDAnIik7CisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKCdyZWQn
LCAuNSkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIncmdiYSgy
NTUsIDAsIDAsIDAuNSknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKCdyZWQnLCBO
YU4pIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3JnYmEoMjU1
LCAwLCAwLCAwLjUpJyIpOworCisKK2RlYnVnKCJcblxudW5kZWZpbmVkIHNldEZpbGxDb2xvcih1
bnJlc3RyaWN0ZWQgZmxvYXQgZ3JheUxldmVsLCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQg
YWxwaGEgPSAxKVxuIikKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoLjI1KSIsICJ1bmRl
ZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIicjNDA0MDQwJyIpOworCitzaG91
bGRCZSgiY3R4LnNldEZpbGxDb2xvciguMjUsIC41KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJl
KCJjdHguZmlsbFN0eWxlIiwgIidyZ2JhKDY0LCA2NCwgNjQsIDAuNSknIik7CisKK3Nob3VsZEJl
KCJjdHguc2V0RmlsbENvbG9yKE5hTiwgLjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0
eC5maWxsU3R5bGUiLCAiJ3JnYmEoNjQsIDY0LCA2NCwgMC41KSciKTsKKworc2hvdWxkQmUoImN0
eC5zZXRGaWxsQ29sb3IoLjI1LCBOYU4pIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5m
aWxsU3R5bGUiLCAiJ3JnYmEoNjQsIDY0LCA2NCwgMC41KSciKTsKKworCitkZWJ1ZygiXG5cbnVu
ZGVmaW5lZCBzZXRGaWxsQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IHIsIHVucmVzdHJpY3RlZCBm
bG9hdCBnLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYiwgdW5yZXN0cmljdGVkIGZsb2F0IGEpXG4iKQor
CitzaG91bGRUaHJvdygiY3R4LnNldEZpbGxDb2xvciguMSwgLjIsIC4zKSIsICJUeXBlRXJyb3Ii
KTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoLjEsIC4yLCAuMywgLjQpIiwgInVuZGVm
aW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3JnYmEoMjYsIDUxLCA3NywgMC40
KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoTmFOLCAuMiwgLjMsIC40KSIsICJ1
bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIidyZ2JhKDI2LCA1MSwgNzcs
IDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKC4xLCBOYU4sIC4zLCAuNCki
LCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIncmdiYSgyNiwgNTEs
IDc3LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldEZpbGxDb2xvciguMSwgLjIsIE5hTiwg
LjQpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5maWxsU3R5bGUiLCAiJ3JnYmEoMjYs
IDUxLCA3NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRGaWxsQ29sb3IoLjEsIC4yLCAu
MywgTmFOKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguZmlsbFN0eWxlIiwgIidyZ2Jh
KDI2LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENvbG9yKC41LCAu
NCwgLjMsIC4yLCAuMSkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LmZpbGxTdHlsZSIs
ICIncmdiYSgxMjgsIDEwMiwgNzcsIDAuMiknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0RmlsbENv
bG9yKDEsIC40LCAuMywgLjIsIC4xLCAwKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHgu
ZmlsbFN0eWxlIiwgIidyZ2JhKDI1NSwgMTAyLCA3NywgMC4yKSciKTsKKworc2hvdWxkQmUoImN0
eC5zZXRGaWxsQ29sb3IoMS41LCAxMCwgLTAuMSwgLTEwMCkiLCAidW5kZWZpbmVkIik7CitzaG91
bGRCZSgiY3R4LmZpbGxTdHlsZSIsICIncmdiYSgyNTUsIDI1NSwgMCwgMCknIik7CisKIDwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgogPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJs
b2Fkcy1zZXRTaGFkb3ctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0U2hhZG93LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMjcxNjkwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1z
ZXRTaGFkb3ctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02LDE3ICs2LDUyIEBAIE9u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIFBBU1MgY3R4LnNldFNoYWRv
dygpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgogUEFT
UyBjdHguc2V0U2hhZG93KDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2gg
YXJndW1lbnRzLgogUEFTUyBjdHguc2V0U2hhZG93KDAsIDApIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAp
IGlzIHVuZGVmaW5lZAotUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIDApIGlzIHVuZGVmaW5l
ZAotUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDApIGlzIHVuZGVmaW5lZAogUEFTUyBj
dHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDAsIDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IFR5cGUgZXJyb3IuCi1QQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgJ3JlZCcpIGlzIHVu
ZGVmaW5lZAogUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsICdyZWQnLCAwKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgotUEFTUyBjdHguc2V0U2hhZG93KDAsIDAs
IDAsIDAsICdyZWQnLCAwLCAwKSBpcyB1bmRlZmluZWQKIFBBU1MgY3R4LnNldFNoYWRvdygwLCAw
LCAwLCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgotUEFT
UyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDAsIDAsIDApIGlzIHVuZGVmaW5lZAotUEFTUyBj
dHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApIGlzIHVuZGVmaW5lZAotUEFTUyBj
dHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApIGlzIHVuZGVmaW5lZAorCisK
K3VuZGVmaW5lZCBzZXRTaGFkb3codW5yZXN0cmljdGVkIGZsb2F0IHdpZHRoLCB1bnJlc3RyaWN0
ZWQgZmxvYXQgaGVpZ2h0LCB1bnJlc3RyaWN0ZWQgZmxvYXQgYmx1ciwgb3B0aW9uYWwgRE9NU3Ry
aW5nIGNvbG9yLCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYWxwaGEpCisKK1BBU1MgY3R4
LnNldFNoYWRvdygwLCAwLCAwLCAncmVkJykgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zaGFkb3dD
b2xvciBpcyAnI2ZmMDAwMCcKK1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAncmVkJywgLjUp
IGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoMjU1LCAwLCAwLCAw
LjUpJworUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsICdyZWQnLCBOYU4pIGlzIHVuZGVmaW5l
ZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJworCisKK3Vu
ZGVmaW5lZCBzZXRTaGFkb3codW5yZXN0cmljdGVkIGZsb2F0IHdpZHRoLCB1bnJlc3RyaWN0ZWQg
ZmxvYXQgaGVpZ2h0LCB1bnJlc3RyaWN0ZWQgZmxvYXQgYmx1ciwgdW5yZXN0cmljdGVkIGZsb2F0
IGdyYXlMZXZlbCwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhhID0gMSkKKworUEFT
UyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4yNSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zaGFk
b3dDb2xvciBpcyAnIzQwNDA0MCcKK1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMjUsIC41
KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDY0LCA2NCwgNjQs
IDAuNSknCitQQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgTmFOLCAuNSkgaXMgdW5kZWZpbmVk
CitQQVNTIGN0eC5zaGFkb3dDb2xvciBpcyAncmdiYSg2NCwgNjQsIDY0LCAwLjUpJworUEFTUyBj
dHguc2V0U2hhZG93KDAsIDAsIDAsIC4yNSwgTmFOKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnNo
YWRvd0NvbG9yIGlzICdyZ2JhKDY0LCA2NCwgNjQsIDAuNSknCisKKwordW5kZWZpbmVkIHNldFNo
YWRvdyh1bnJlc3RyaWN0ZWQgZmxvYXQgd2lkdGgsIHVucmVzdHJpY3RlZCBmbG9hdCBoZWlnaHQs
IHVucmVzdHJpY3RlZCBmbG9hdCBibHVyLCB1bnJlc3RyaWN0ZWQgZmxvYXQgciwgdW5yZXN0cmlj
dGVkIGZsb2F0IGcsIHVucmVzdHJpY3RlZCBmbG9hdCBiLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYSkK
KworUEFTUyBjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4xLCAuMiwgLjMpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIGN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjEs
IC4yLCAuMywgLjQpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEo
MjYsIDUxLCA3NywgMC40KScKK1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCBOYU4sIC4yLCAu
MywgLjQpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoMjYsIDUx
LCA3NywgMC40KScKK1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMSwgTmFOLCAuMywgLjQp
IGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoMjYsIDUxLCA3Nywg
MC40KScKK1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMSwgLjIsIE5hTiwgLjQpIGlzIHVu
ZGVmaW5lZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoMjYsIDUxLCA3NywgMC40KScK
K1BBU1MgY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMSwgLjIsIC4zLCBOYU4pIGlzIHVuZGVmaW5l
ZAorUEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoMjYsIDUxLCA3NywgMC40KScKK1BBU1Mg
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAuNSwgLjQsIC4zLCAuMiwgLjEpIGlzIHVuZGVmaW5lZAor
UEFTUyBjdHguc2hhZG93Q29sb3IgaXMgJ3JnYmEoMTI4LCAxMDIsIDc3LCAwLjIpJworUEFTUyBj
dHguc2V0U2hhZG93KDAsIDAsIDAsIDEsIC40LCAuMywgLjIsIC4xLCAwKSBpcyB1bmRlZmluZWQK
K1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDI1NSwgMTAyLCA3NywgMC4yKScKK1BBU1Mg
Y3R4LnNldFNoYWRvdygwLCAwLCAwLCAxLjUsIDEwLCAtMC4xLCAtMTAwKSBpcyB1bmRlZmluZWQK
K1BBU1MgY3R4LnNoYWRvd0NvbG9yIGlzICdyZ2JhKDI1NSwgMjU1LCAwLCAwKScKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvY2FudmFzLW92ZXJsb2Fkcy1zZXRTaGFkb3cuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFNoYWRvdy5o
dG1sCShyZXZpc2lvbiAyNzE2OTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMt
b3ZlcmxvYWRzLXNldFNoYWRvdy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNSwxNyArMTUsNjMg
QEAgdmFyIFR5cGVFcnJvck5vdEVub3VnaEFyZ3VtZW50cyA9ICJUeXBlRQogc2hvdWxkVGhyb3co
ImN0eC5zZXRTaGFkb3coKSIsICJUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMiKTsKIHNob3Vs
ZFRocm93KCJjdHguc2V0U2hhZG93KDApIiwgIlR5cGVFcnJvck5vdEVub3VnaEFyZ3VtZW50cyIp
Owogc2hvdWxkVGhyb3coImN0eC5zZXRTaGFkb3coMCwgMCkiLCAiVHlwZUVycm9yTm90RW5vdWdo
QXJndW1lbnRzIik7Ci1zaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwKSIsICJ1bmRlZmlu
ZWQiKTsKLXNob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIp
Owotc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7
CiBzaG91bGRUaHJvdygiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAwLCAwLCAwKSIsICJUeXBlRXJy
b3IiKTsKLXNob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsICdyZWQnKSIsICJ1bmRl
ZmluZWQiKTsKIHNob3VsZFRocm93KCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsICdyZWQnLCAw
KSIsICJUeXBlRXJyb3IiKTsKLXNob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIDAsICdy
ZWQnLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsKIHNob3VsZFRocm93KCJjdHguc2V0U2hhZG93KDAs
IDAsIDAsIDAsIDAsIDApIiwgIlR5cGVFcnJvciIpOwotc2hvdWxkQmUoImN0eC5zZXRTaGFkb3co
MCwgMCwgMCwgMCwgMCwgMCwgMCkiLCAidW5kZWZpbmVkIik7Ci1zaG91bGRCZSgiY3R4LnNldFNo
YWRvdygwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsKLXNob3VsZEJlKCJj
dHguc2V0U2hhZG93KDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIpOwor
CitkZWJ1ZygiXG5cbnVuZGVmaW5lZCBzZXRTaGFkb3codW5yZXN0cmljdGVkIGZsb2F0IHdpZHRo
LCB1bnJlc3RyaWN0ZWQgZmxvYXQgaGVpZ2h0LCB1bnJlc3RyaWN0ZWQgZmxvYXQgYmx1ciwgb3B0
aW9uYWwgRE9NU3RyaW5nIGNvbG9yLCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYWxwaGEp
XG4iKQorc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgJ3JlZCcpIiwgInVuZGVmaW5l
ZCIpOworc2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICInI2ZmMDAwMCciKTsKKworc2hvdWxk
QmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgJ3JlZCcsIC41KSIsICJ1bmRlZmluZWQiKTsKK3No
b3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJyIpOworCitz
aG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAncmVkJywgTmFOKSIsICJ1bmRlZmluZWQi
KTsKK3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJyIp
OworCitkZWJ1ZygiXG5cbnVuZGVmaW5lZCBzZXRTaGFkb3codW5yZXN0cmljdGVkIGZsb2F0IHdp
ZHRoLCB1bnJlc3RyaWN0ZWQgZmxvYXQgaGVpZ2h0LCB1bnJlc3RyaWN0ZWQgZmxvYXQgYmx1ciwg
dW5yZXN0cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwgb3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0
IGFscGhhID0gMSlcbiIpCisKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4yNSki
LCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIicjNDA0MDQwJyIp
OworCitzaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMjUsIC41KSIsICJ1bmRlZmlu
ZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoNjQsIDY0LCA2NCwgMC41
KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgTmFOLCAuNSkiLCAidW5k
ZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnNoYWRvd0NvbG9yIiwgIidyZ2JhKDY0LCA2NCwgNjQs
IDAuNSknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAsIC4yNSwgTmFOKSIs
ICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoNjQsIDY0
LCA2NCwgMC41KSciKTsKKworCitkZWJ1ZygiXG5cbnVuZGVmaW5lZCBzZXRTaGFkb3codW5yZXN0
cmljdGVkIGZsb2F0IHdpZHRoLCB1bnJlc3RyaWN0ZWQgZmxvYXQgaGVpZ2h0LCB1bnJlc3RyaWN0
ZWQgZmxvYXQgYmx1ciwgdW5yZXN0cmljdGVkIGZsb2F0IHIsIHVucmVzdHJpY3RlZCBmbG9hdCBn
LCB1bnJlc3RyaWN0ZWQgZmxvYXQgYiwgdW5yZXN0cmljdGVkIGZsb2F0IGEpXG4iKQorCitzaG91
bGRUaHJvdygiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMSwgLjIsIC4zKSIsICJUeXBlRXJyb3Ii
KTsKKworc2hvdWxkQmUoImN0eC5zZXRTaGFkb3coMCwgMCwgMCwgLjEsIC4yLCAuMywgLjQpIiwg
InVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICIncmdiYSgyNiwgNTEs
IDc3LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCBOYU4sIC4y
LCAuMywgLjQpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICIn
cmdiYSgyNiwgNTEsIDc3LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAw
LCAwLCAuMSwgTmFOLCAuMywgLjQpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zaGFk
b3dDb2xvciIsICIncmdiYSgyNiwgNTEsIDc3LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNl
dFNoYWRvdygwLCAwLCAwLCAuMSwgLjIsIE5hTiwgLjQpIiwgInVuZGVmaW5lZCIpOworc2hvdWxk
QmUoImN0eC5zaGFkb3dDb2xvciIsICIncmdiYSgyNiwgNTEsIDc3LCAwLjQpJyIpOworCitzaG91
bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuMSwgLjIsIC4zLCBOYU4pIiwgInVuZGVmaW5l
ZCIpOworc2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICIncmdiYSgyNiwgNTEsIDc3LCAwLjQp
JyIpOworCitzaG91bGRCZSgiY3R4LnNldFNoYWRvdygwLCAwLCAwLCAuNSwgLjQsIC4zLCAuMiwg
LjEpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zaGFkb3dDb2xvciIsICIncmdiYSgx
MjgsIDEwMiwgNzcsIDAuMiknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U2hhZG93KDAsIDAsIDAs
IDEsIC40LCAuMywgLjIsIC4xLCAwKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc2hh
ZG93Q29sb3IiLCAiJ3JnYmEoMjU1LCAxMDIsIDc3LCAwLjIpJyIpOworCitzaG91bGRCZSgiY3R4
LnNldFNoYWRvdygwLCAwLCAwLCAxLjUsIDEwLCAtMC4xLCAtMTAwKSIsICJ1bmRlZmluZWQiKTsK
K3Nob3VsZEJlKCJjdHguc2hhZG93Q29sb3IiLCAiJ3JnYmEoMjU1LCAyNTUsIDAsIDApJyIpOwor
CiA8L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZh
cy1vdmVybG9hZHMtc2V0U3Ryb2tlQ29sb3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0U3Ryb2tlQ29sb3ItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAyNzE2OTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9j
YW52YXMtb3ZlcmxvYWRzLXNldFN0cm9rZUNvbG9yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNCwxMyArNCw1MCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBCiAKIAogUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICcjMDAw
MDAwJworCisKK3VuZGVmaW5lZCBzZXRTdHJva2VDb2xvcihET01TdHJpbmcgY29sb3IsIG9wdGlv
bmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSkKKwogUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3Io
J3JlZCcpIGlzIHVuZGVmaW5lZAotUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoMCkgaXMgdW5kZWZp
bmVkCi1QQVNTIGN0eC5zZXRTdHJva2VDb2xvcigwLCAwKSBpcyB1bmRlZmluZWQKLVBBU1MgY3R4
LnNldFN0cm9rZUNvbG9yKDAsIDAsIDApIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUg
ZXJyb3IuCi1QQVNTIGN0eC5zZXRTdHJva2VDb2xvcigwLCAwLCAwLCAwKSBpcyB1bmRlZmluZWQK
LVBBU1MgY3R4LnNldFN0cm9rZUNvbG9yKDAsIDAsIDAsIDAsIDApIGlzIHVuZGVmaW5lZAotUEFT
UyBjdHguc2V0U3Ryb2tlQ29sb3IoMCwgMCwgMCwgMCwgMCwgMCkgaXMgdW5kZWZpbmVkCitQQVNT
IGN0eC5zdHJva2VTdHlsZSBpcyAnI2ZmMDAwMCcKK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9yKCdy
ZWQnLCAuNSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSgyNTUs
IDAsIDAsIDAuNSknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvcigncmVkJywgTmFOKSBpcyB1bmRl
ZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDI1NSwgMCwgMCwgMC41KScKKwor
Cit1bmRlZmluZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0IGdyYXlMZXZlbCwg
b3B0aW9uYWwgdW5yZXN0cmljdGVkIGZsb2F0IGFscGhhID0gMSkKKworUEFTUyBjdHguc2V0U3Ry
b2tlQ29sb3IoLjI1KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICcjNDA0
MDQwJworUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoLjI1LCAuNSkgaXMgdW5kZWZpbmVkCitQQVNT
IGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSg2NCwgNjQsIDY0LCAwLjUpJworUEFTUyBjdHguc2V0
U3Ryb2tlQ29sb3IoTmFOLCAuNSkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBp
cyAncmdiYSg2NCwgNjQsIDY0LCAwLjUpJworUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoLjI1LCBO
YU4pIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMgJ3JnYmEoNjQsIDY0LCA2
NCwgMC41KScKKworCit1bmRlZmluZWQgc2V0U3Ryb2tlQ29sb3IodW5yZXN0cmljdGVkIGZsb2F0
IHIsIHVucmVzdHJpY3RlZCBmbG9hdCBnLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYiwgdW5yZXN0cmlj
dGVkIGZsb2F0IGEpCisKK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9yKC4xLCAuMiwgLjMpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIGN0eC5zZXRTdHJva2VDb2xv
ciguMSwgLjIsIC4zLCAuNCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAn
cmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3IoTmFOLCAuMiwg
LjMsIC40KSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDI2LCA1
MSwgNzcsIDAuNCknCitQQVNTIGN0eC5zZXRTdHJva2VDb2xvciguMSwgTmFOLCAuMywgLjQpIGlz
IHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5bGUgaXMgJ3JnYmEoMjYsIDUxLCA3NywgMC40
KScKK1BBU1MgY3R4LnNldFN0cm9rZUNvbG9yKC4xLCAuMiwgTmFOLCAuNCkgaXMgdW5kZWZpbmVk
CitQQVNTIGN0eC5zdHJva2VTdHlsZSBpcyAncmdiYSgyNiwgNTEsIDc3LCAwLjQpJworUEFTUyBj
dHguc2V0U3Ryb2tlQ29sb3IoLjEsIC4yLCAuMywgTmFOKSBpcyB1bmRlZmluZWQKK1BBU1MgY3R4
LnN0cm9rZVN0eWxlIGlzICdyZ2JhKDI2LCA1MSwgNzcsIDAuNCknCitQQVNTIGN0eC5zZXRTdHJv
a2VDb2xvciguNSwgLjQsIC4zLCAuMiwgLjEpIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tl
U3R5bGUgaXMgJ3JnYmEoMTI4LCAxMDIsIDc3LCAwLjIpJworUEFTUyBjdHguc2V0U3Ryb2tlQ29s
b3IoMSwgLjQsIC4zLCAuMiwgLjEsIDApIGlzIHVuZGVmaW5lZAorUEFTUyBjdHguc3Ryb2tlU3R5
bGUgaXMgJ3JnYmEoMjU1LCAxMDIsIDc3LCAwLjIpJworUEFTUyBjdHguc2V0U3Ryb2tlQ29sb3Io
MS41LCAxMCwgLTAuMSwgLTEwMCkgaXMgdW5kZWZpbmVkCitQQVNTIGN0eC5zdHJva2VTdHlsZSBp
cyAncmdiYSgyNTUsIDI1NSwgMCwgMCknCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1v
dmVybG9hZHMtc2V0U3Ryb2tlQ29sb3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy9jYW52YXMtb3ZlcmxvYWRzLXNldFN0cm9rZUNvbG9yLmh0bWwJKHJldmlzaW9u
IDI3MTY5MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1vdmVybG9hZHMtc2V0
U3Ryb2tlQ29sb3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNywxOSArNyw2OSBAQAogPHNjcmlw
dD4KIGRlc2NyaXB0aW9uKCJUZXN0IHRoZSBiZWhhdmlvciBvZiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuc2V0U3Ryb2tlQ29sb3IoKSB3aGVuIGNhbGxlZCB3aXRoIGRpZmZlcmVudCBudW1iZXJz
IG9mIGFyZ3VtZW50cy4iKTsKIAotdmFyIGN0eCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Nh
bnZhcycpLmdldENvbnRleHQoJzJkJyk7CitsZXQgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTsKIAotdmFyIFR5cGVFcnJvciA9ICJUeXBlRXJy
b3I6IFR5cGUgZXJyb3IiOwotdmFyIFR5cGVFcnJvck5vdEVub3VnaEFyZ3VtZW50cyA9ICJUeXBl
RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzIjsKK2xldCBUeXBlRXJyb3IgPSAiVHlwZUVycm9y
OiBUeXBlIGVycm9yIjsKK2xldCBUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMgPSAiVHlwZUVy
cm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyI7CiAKIHNob3VsZFRocm93KCJjdHguc2V0U3Ryb2tl
Q29sb3IoKSIsICJUeXBlRXJyb3JOb3RFbm91Z2hBcmd1bWVudHMiKTsKK3Nob3VsZEJlKCJjdHgu
c3Ryb2tlU3R5bGUiLCAiJyMwMDAwMDAnIik7CisKKworZGVidWcoIlxuXG51bmRlZmluZWQgc2V0
U3Ryb2tlQ29sb3IoRE9NU3RyaW5nIGNvbG9yLCBvcHRpb25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQg
YWxwaGEpXG4iKQogc2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigncmVkJykiLCAidW5kZWZp
bmVkIik7Ci1zaG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKDApIiwgInVuZGVmaW5lZCIpOwot
c2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigwLCAwKSIsICJ1bmRlZmluZWQiKTsKLXNob3Vs
ZFRocm93KCJjdHguc2V0U3Ryb2tlQ29sb3IoMCwgMCwgMCkiLCAiVHlwZUVycm9yIik7Ci1zaG91
bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKDAsIDAsIDAsIDApIiwgInVuZGVmaW5lZCIpOwotc2hv
dWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigwLCAwLCAwLCAwLCAwKSIsICJ1bmRlZmluZWQiKTsK
LXNob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoMCwgMCwgMCwgMCwgMCwgMCkiLCAidW5kZWZp
bmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIicjZmYwMDAwJyIpOworCitzaG91
bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKCdyZWQnLCAuNSkiLCAidW5kZWZpbmVkIik7CitzaG91
bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDI1NSwgMCwgMCwgMC41KSciKTsKKworc2hv
dWxkQmUoImN0eC5zZXRTdHJva2VDb2xvcigncmVkJywgTmFOKSIsICJ1bmRlZmluZWQiKTsKK3No
b3VsZEJlKCJjdHguc3Ryb2tlU3R5bGUiLCAiJ3JnYmEoMjU1LCAwLCAwLCAwLjUpJyIpOworCisK
K2RlYnVnKCJcblxudW5kZWZpbmVkIHNldFN0cm9rZUNvbG9yKHVucmVzdHJpY3RlZCBmbG9hdCBn
cmF5TGV2ZWwsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhbHBoYSA9IDEpXG4iKQorCitz
aG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKC4yNSkiLCAidW5kZWZpbmVkIik7CitzaG91bGRC
ZSgiY3R4LnN0cm9rZVN0eWxlIiwgIicjNDA0MDQwJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0
cm9rZUNvbG9yKC4yNSwgLjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VT
dHlsZSIsICIncmdiYSg2NCwgNjQsIDY0LCAwLjUpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0
cm9rZUNvbG9yKE5hTiwgLjUpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VT
dHlsZSIsICIncmdiYSg2NCwgNjQsIDY0LCAwLjUpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0
cm9rZUNvbG9yKC4yNSwgTmFOKSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tl
U3R5bGUiLCAiJ3JnYmEoNjQsIDY0LCA2NCwgMC41KSciKTsKKworCitkZWJ1ZygiXG5cbnVuZGVm
aW5lZCBzZXRTdHJva2VDb2xvcih1bnJlc3RyaWN0ZWQgZmxvYXQgciwgdW5yZXN0cmljdGVkIGZs
b2F0IGcsIHVucmVzdHJpY3RlZCBmbG9hdCBiLCB1bnJlc3RyaWN0ZWQgZmxvYXQgYSlcbiIpCisK
K3Nob3VsZFRocm93KCJjdHguc2V0U3Ryb2tlQ29sb3IoLjEsIC4yLCAuMykiLCAiVHlwZUVycm9y
Iik7CisKK3Nob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoLjEsIC4yLCAuMywgLjQpIiwgInVu
ZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICIncmdiYSgyNiwgNTEsIDc3
LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKE5hTiwgLjIsIC4zLCAu
NCkiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDI2
LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJlKCJjdHguc2V0U3Ryb2tlQ29sb3IoLjEsIE5h
TiwgLjMsIC40KSIsICJ1bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tlU3R5bGUiLCAi
J3JnYmEoMjYsIDUxLCA3NywgMC40KSciKTsKKworc2hvdWxkQmUoImN0eC5zZXRTdHJva2VDb2xv
ciguMSwgLjIsIE5hTiwgLjQpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VT
dHlsZSIsICIncmdiYSgyNiwgNTEsIDc3LCAwLjQpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0
cm9rZUNvbG9yKC4xLCAuMiwgLjMsIE5hTikiLCAidW5kZWZpbmVkIik7CitzaG91bGRCZSgiY3R4
LnN0cm9rZVN0eWxlIiwgIidyZ2JhKDI2LCA1MSwgNzcsIDAuNCknIik7CisKK3Nob3VsZEJlKCJj
dHguc2V0U3Ryb2tlQ29sb3IoLjUsIC40LCAuMywgLjIsIC4xKSIsICJ1bmRlZmluZWQiKTsKK3No
b3VsZEJlKCJjdHguc3Ryb2tlU3R5bGUiLCAiJ3JnYmEoMTI4LCAxMDIsIDc3LCAwLjIpJyIpOwor
CitzaG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKDEsIC40LCAuMywgLjIsIC4xLCAwKSIsICJ1
bmRlZmluZWQiKTsKK3Nob3VsZEJlKCJjdHguc3Ryb2tlU3R5bGUiLCAiJ3JnYmEoMjU1LCAxMDIs
IDc3LCAwLjIpJyIpOworCitzaG91bGRCZSgiY3R4LnNldFN0cm9rZUNvbG9yKDEuNSwgMTAsIC0w
LjEsIC0xMDApIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImN0eC5zdHJva2VTdHlsZSIsICIn
cmdiYSgyNTUsIDI1NSwgMCwgMCknIik7CisKIDwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogPC9ib2R5Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>