<?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>212446</bug_id>
          
          <creation_ts>2020-05-27 17:10:54 -0700</creation_ts>
          <short_desc>Extended Color: Refactor FloatComponents and ColorComponents into a single templatized ColorComponents class</short_desc>
          <delta_ts>2020-05-27 20:33:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>ryuan.choi</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>1656687</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 17:10:54 -0700</bug_when>
    <thetext>Extended Color: Refactor FloatComponents and ColorComponents into a single templatized ColorComponents class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656694</commentid>
    <comment_count>1</comment_count>
      <attachid>400409</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 17:36:29 -0700</bug_when>
    <thetext>Created attachment 400409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656698</commentid>
    <comment_count>2</comment_count>
      <attachid>400410</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 17:45:40 -0700</bug_when>
    <thetext>Created attachment 400410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656712</commentid>
    <comment_count>3</comment_count>
      <attachid>400410</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-05-27 18:10:56 -0700</bug_when>
    <thetext>Comment on attachment 400410
Patch

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

&gt; Source/WebCore/platform/graphics/ColorComponents.h:48
&gt; +        components[0] = values[0];
&gt; +        components[1] = values[1];
&gt; +        components[2] = values[2];
&gt; +        components[3] = values[3];

Can this just be one assignment?

&gt; Source/WebCore/platform/graphics/ColorComponents.h:175
&gt; +inline unsigned byteOffsetOfPixel(unsigned x, unsigned y, unsigned rowBytes)
&gt; +{
&gt; +    const unsigned bytesPerPixel = 4;
&gt; +    return x * bytesPerPixel + y * rowBytes;
&gt; +}

Seems like an odd thing to be here, particularly as it assumes 4 bpp which is also baked into rowBytes.

&gt; Source/WebCore/platform/graphics/ColorComponents.h:192
&gt; +float contrastRatio(const FloatComponents&amp;, const FloatComponents&amp;);

Are the arguments assumed to be sRGB?

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:46
&gt; +ColorComponents&lt;float&gt; rgbToLinearComponents(const ColorComponents&lt;float&gt;&amp;);
&gt; +ColorComponents&lt;float&gt; linearToRGBComponents(const ColorComponents&lt;float&gt;&amp;);
&gt; +
&gt; +ColorComponents&lt;float&gt; p3ToSRGB(const ColorComponents&lt;float&gt;&amp;);
&gt; +ColorComponents&lt;float&gt; sRGBToP3(const ColorComponents&lt;float&gt;&amp;);
&gt; +
&gt; +WEBCORE_EXPORT ColorComponents&lt;float&gt; sRGBToHSL(const ColorComponents&lt;float&gt;&amp;);
&gt; +WEBCORE_EXPORT ColorComponents&lt;float&gt; hslToSRGB(const ColorComponents&lt;float&gt;&amp;);

Sucks to have all these in two places. Don&apos;t like.

&gt; Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp:93
&gt; +static inline unsigned byteOffsetOfPixel(unsigned x, unsigned y, unsigned rowBytes)
&gt; +{
&gt; +    const unsigned bytesPerPixel = 4;
&gt; +    return x * bytesPerPixel + y * rowBytes;
&gt; +}

Ohai.

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:94
&gt; +inline ColorComponents&lt;uint8_t&gt; makeColorComponentsfromPixelValue(unsigned pixel)
&gt; +{
&gt; +    return ColorComponents&lt;uint8_t&gt;((pixel &gt;&gt; 24) &amp; 0xFF, (pixel &gt;&gt; 16) &amp; 0xFF, (pixel &gt;&gt; 8) &amp; 0xFF, pixel &amp; 0xFF);
&gt; +}

This looks just like ColorComponents fromRGBA(unsigned pixel)

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:100
&gt; +inline unsigned makePixelValueFromColorComponents(const ColorComponents&lt;uint8_t&gt;&amp; components)
&gt; +{
&gt; +    auto [r, g, b, a] = components;
&gt; +    return r &lt;&lt; 24 | g &lt;&lt; 16 | b &lt;&lt; 8 | a;
&gt; +}

Share this too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656721</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 18:36:30 -0700</bug_when>
    <thetext>All those things aren’t really in ColorComponents.h, it’s just the patch showing it being copied. Then below you will see them being removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656723</commentid>
    <comment_count>5</comment_count>
      <attachid>400415</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 18:41:38 -0700</bug_when>
    <thetext>Created attachment 400415
ColorComponents.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656724</commentid>
    <comment_count>6</comment_count>
      <attachid>400416</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 18:41:57 -0700</bug_when>
    <thetext>Created attachment 400416
ColorUtilities.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656725</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 18:44:57 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #3)
&gt; Comment on attachment 400410 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=400410&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorComponents.h:48
&gt; &gt; +        components[0] = values[0];
&gt; &gt; +        components[1] = values[1];
&gt; &gt; +        components[2] = values[2];
&gt; &gt; +        components[3] = values[3];
&gt; 
&gt; Can this just be one assignment?

It is in the patch. This is the initial copy the diff has. See later in the patch for this real version.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorComponents.h:175
&gt; &gt; +inline unsigned byteOffsetOfPixel(unsigned x, unsigned y, unsigned rowBytes)
&gt; &gt; +{
&gt; &gt; +    const unsigned bytesPerPixel = 4;
&gt; &gt; +    return x * bytesPerPixel + y * rowBytes;
&gt; &gt; +}
&gt; 
&gt; Seems like an odd thing to be here, particularly as it assumes 4 bpp which
&gt; is also baked into rowBytes.

In the patch it is moved to FEDisplacementMap.cpp

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorComponents.h:192
&gt; &gt; +float contrastRatio(const FloatComponents&amp;, const FloatComponents&amp;);
&gt; 
&gt; Are the arguments assumed to be sRGB?

Later in the patch you can see it was updated to:

float contrastRatio(const ColorComponents&lt;float&gt;&amp; sRGBCompontentsA, const ColorComponents&lt;float&gt;&amp; sRGBCompontentsB);

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:46
&gt; &gt; +ColorComponents&lt;float&gt; rgbToLinearComponents(const ColorComponents&lt;float&gt;&amp;);
&gt; &gt; +ColorComponents&lt;float&gt; linearToRGBComponents(const ColorComponents&lt;float&gt;&amp;);
&gt; &gt; +
&gt; &gt; +ColorComponents&lt;float&gt; p3ToSRGB(const ColorComponents&lt;float&gt;&amp;);
&gt; &gt; +ColorComponents&lt;float&gt; sRGBToP3(const ColorComponents&lt;float&gt;&amp;);
&gt; &gt; +
&gt; &gt; +WEBCORE_EXPORT ColorComponents&lt;float&gt; sRGBToHSL(const ColorComponents&lt;float&gt;&amp;);
&gt; &gt; +WEBCORE_EXPORT ColorComponents&lt;float&gt; hslToSRGB(const ColorComponents&lt;float&gt;&amp;);
&gt; 
&gt; Sucks to have all these in two places. Don&apos;t like.

Not duplicated. Just weird diff.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp:93
&gt; &gt; +static inline unsigned byteOffsetOfPixel(unsigned x, unsigned y, unsigned rowBytes)
&gt; &gt; +{
&gt; &gt; +    const unsigned bytesPerPixel = 4;
&gt; &gt; +    return x * bytesPerPixel + y * rowBytes;
&gt; &gt; +}
&gt; 
&gt; Ohai.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:94
&gt; &gt; +inline ColorComponents&lt;uint8_t&gt; makeColorComponentsfromPixelValue(unsigned pixel)
&gt; &gt; +{
&gt; &gt; +    return ColorComponents&lt;uint8_t&gt;((pixel &gt;&gt; 24) &amp; 0xFF, (pixel &gt;&gt; 16) &amp; 0xFF, (pixel &gt;&gt; 8) &amp; 0xFF, pixel &amp; 0xFF);
&gt; &gt; +}
&gt; 
&gt; This looks just like ColorComponents fromRGBA(unsigned pixel)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:100
&gt; &gt; +inline unsigned makePixelValueFromColorComponents(const ColorComponents&lt;uint8_t&gt;&amp; components)
&gt; &gt; +{
&gt; &gt; +    auto [r, g, b, a] = components;
&gt; &gt; +    return r &lt;&lt; 24 | g &lt;&lt; 16 | b &lt;&lt; 8 | a;
&gt; &gt; +}
&gt; 
&gt; Share this too?

These both only exist in FEMorphology.cpp now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656726</commentid>
    <comment_count>8</comment_count>
      <attachid>400417</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-27 18:49:23 -0700</bug_when>
    <thetext>Created attachment 400417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656738</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-27 19:30:42 -0700</bug_when>
    <thetext>Committed r262232: &lt;https://trac.webkit.org/changeset/262232&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400417.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656739</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-27 19:31:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/63701108&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656755</commentid>
    <comment_count>11</comment_count>
      <attachid>400417</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-27 20:33:51 -0700</bug_when>
    <thetext>Comment on attachment 400417
Patch

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

&gt; Source/WebCore/platform/graphics/ColorComponents.h:96
&gt; +        result.components[0] = fabs(components[0]);
&gt; +        result.components[1] = fabs(components[1]);
&gt; +        result.components[2] = fabs(components[2]);
&gt; +        result.components[3] = fabs(components[3]);

std::abs?

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:33
&gt; +template&lt;typename T&gt; struct ColorComponents;

Take out the &quot;T&quot;?

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:71
&gt; +inline uint16_t fastDivideBy255(uint16_t value)

constexpr

&gt; Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp:89
&gt; +static inline unsigned byteOffsetOfPixel(unsigned x, unsigned y, unsigned rowBytes)

constexpr

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:91
&gt; +inline ColorComponents&lt;uint8_t&gt; makeColorComponentsfromPixelValue(unsigned pixel)

constexpr?

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:96
&gt; +inline unsigned makePixelValueFromColorComponents(const ColorComponents&lt;uint8_t&gt;&amp; components)

constexpr?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400409</attachid>
            <date>2020-05-27 17:36:29 -0700</date>
            <delta_ts>2020-05-27 17:45:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212446-20200527173628.patch</filename>
            <type>text/plain</type>
            <size>62324</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjIyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAyMC0wNS0yNyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlZmFj
dG9yIEZsb2F0Q29tcG9uZW50cyBhbmQgQ29sb3JDb21wb25lbnRzIGludG8gYSBzaW5nbGUgdGVt
cGxhdGl6ZWQgQ29sb3JDb21wb25lbnRzIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNZXJnZSBGbG9hdENvbXBvbmVudHMgYW5kIENvbG9yQ29t
cG9uZW50cyBpbnRvIENvbG9yQ29tcG9uZW50czxUPiBhbmQgbW92ZSB0aGVtIHRvIHRoZWlyIG93
bgorICAgICAgICBoZWFkZXIuIFRoaXMgYXZvaWRzIGR1cGxpY2F0ZSBjb2RlIGFuZCBwYXZlcyB0
aGUgd2F5IGZvciBmdXJ0aGVyIGdlbmVyYWxpemF0aW9uIGRvd24gdGhlIGxpbmUuCisgICAgICAg
IAorICAgICAgICBBbHNvIG1vdmVzIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gQ29sb3JVdGls
aXRpZXMuaCBmcm9tIFNpbXBsZUNvbG9yLmggYXMgdGhleSBtYWtlIG1vcmUgc2Vuc2UKKyAgICAg
ICAgaW4gdGhlIGZvcm1lci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgQ29sb3JDb21w
b25lbnRzLmgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oLgorICAgICAgICBNb3ZlZCBDb2xvckNvbXBvbmVudHMgdG8gaXRzIG93biBoZWFkZXIg
YW5kIHRlbXBsYXRpemVkIGl0IHRvIGFsbG93IGl0IHRvIHNlcnZlIHRoZQorICAgICAgICBuZWVk
cyBvZiBib3RoIHRoZSBvbGQgQ29sb3JDb21wb25lbnRzIGFuZCBvbGQgRmxvYXRDb21wb25lbnRz
IGNsYXNzZXMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5o
OgorICAgICAgICBSZW1vdmVkIENvbG9yQ29tcG9uZW50cy9GbG9hdENvbXBvbmVudHMgYW5kIHVw
ZGF0ZSBleGlzdGluZyB1c2FnZXMgdG8gdGhlaXIgbmV3IG5hbWVzLgorICAgICAgICBBbHNvIG1v
dmVkIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwsIGZhc3RNdWx0aXBseUJ5MjU1LCBmYXN0RGl2
aWRlQnkyNTUgCisgICAgICAgIGFuZCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUgaGVyZSBm
cm9tIFNpbXBsZUNvbG9yIHRvIG1ha2UgaXQgY2xlYXIgd2hlcmUKKyAgICAgICAgZ2VuZXJhbCBo
ZWxwZXIgZnVuY3Rpb25zIGNhbiBnby4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3kgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNoYW5uZWxzIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIGZv
ciByZW5hbWUgb2YgRmxvYXRDb21wb25lbnRzIHRvIENvbG9yQ29tcG9uZW50czxmbG9hdD4uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tSFNMQSk6CisgICAgICAgIFVzZSBzdHJ1Y3R1cmVk
IGJpbmRpbmdzIGFuZCBzaW1wbGlmeSBjb2RlLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhc3RNdWx0aXBseUJ5MjU1KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhc3REaXZpZGVCeTI1NSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUpOiBEZWxldGVkLgor
ICAgICAgICBBcyBub3RlZCBhYm92ZSwgbW92ZWQgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCwg
ZmFzdE11bHRpcGx5QnkyNTUsIGZhc3REaXZpZGVCeTI1NSAKKyAgICAgICAgYW5kIGNvbG9yRmxv
YXRUb1NpbXBsZUNvbG9yQnl0ZSB0byBDb2xvclV0aWxpdGllcy5oCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICBVcGRhdGUg
Zm9yIHJlbmFtZSBvZiBGbG9hdENvbXBvbmVudHMgdG8gQ29sb3JDb21wb25lbnRzPGZsb2F0Pi4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Ynl0ZU9mZnNldE9mUGl4ZWwpOgorICAgICAgICBNb3Zl
ZCBieXRlT2Zmc2V0T2ZQaXhlbCBoZXJlIGZyb20gQ29sb3JVdGlsaXRpZXMuIFRoaXMgZmlsZSBp
cyB0aGUgb25seSB1c2VyCisgICAgICAgIGFuZCBpdCB3YXNuJ3QgZ2VuZXJhbCBpbiBhIHdheSB0
aGF0IHdhcyBjbGVhciBmb3Igb3RoZXIgdXNlcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUgb2YgRmxvYXRDb21w
b25lbnRzIHRvIENvbG9yQ29tcG9uZW50czxmbG9hdD4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOgorICAgICAgICBBZGRlZC4gVXNlZCB0byBi
ZSBDb2xvckNvbXBvbmVudHM6OmZyb21SR0JBKCksIGJ1dCB3YXMgb25seSB1c2VkIGhlcmUKKyAg
ICAgICAgYW5kIGRpZG4ndCBzZWVtIGdlbmVyYWxseSB1c2VmdWwuCisKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIEFkZGVkLiBV
c2VkIHRvIGJlIENvbG9yQ29tcG9uZW50czo6dG9SR0JBKCksIGJ1dCB3YXMgb25seSB1c2VkIGhl
cmUKKyAgICAgICAgYW5kIGRpZG4ndCBzZWVtIGdlbmVyYWxseSB1c2VmdWwuCisgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6bWluT3JNYXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uRXh0
cmVtdW0pOgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgIFVwZGF0
ZSBmb3IgcmVuYW1lIG9mIEZsb2F0Q29tcG9uZW50cyB0byBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
IGFuZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgdG8gQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Q+
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpub2lzZTJEIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24gY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAg
IFVwZGF0ZSBmb3IgcmVuYW1lIG9mIEZsb2F0Q29tcG9uZW50cyB0byBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+IGFuZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgdG8gQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3Q+LiBBbHNvIHJlbmFtZXMgdG9Db2xvckNvbXBvbmVudHMgdG8gdG9JbnRCYXNlZENvbG9y
Q29tcG9uZW50cworICAgICAgICBhcyB0aGUgZm9ybWVyIHdhcyBubyBsb25nZXIgc3BlY2lmaWMg
ZW5vdWdoLiBVcGRhdGVkIHRvIHVzZSBzdGQ6OmNsYW1wLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNz
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvciBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3Ig
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNm
b3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0
cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
OjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBVcGRhdGUgZm9yIHJlbmFt
ZSBvZiBGbG9hdENvbXBvbmVudHMgdG8gQ29sb3JDb21wb25lbnRzPGZsb2F0Pi4KKwogMjAyMC0w
NS0yNyAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAgICAgICAg
RW1wdHkgYWx0IGF0dHJpYnV0ZSBkb2VzIG5vdCBpZ25vcmUgdGhlIGltYWdlIGZvciBhY2Nlc3Np
YmlsaXR5IGNsaWVudHMgaW4gU2FmYXJpLgpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lv
biAyNjIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDc5LDYgKzEwNzksNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQXVkaW9UcmFja1ByaXZhdGUuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTAxNjUsNiArMTAxNjUsNyBAQAogCQk3QzlEQkZFQzFBOUM0OUIx
MDAwRDZCMjUgLyogSlNIVE1MQXR0YWNobWVudEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNIVE1MQXR0YWNobWVudEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0NBQzZBRTYyNDdGMDgxRjAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yTWF0cml4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NBQzZBRTgyNDdGMDgyMDAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvbG9yTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdDQUM2QUVDMjQ3RjFDNTEwMEU2MUQ1OSAvKiBDb2xvckNvbXBvbmVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JDb21wb25lbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDQjVDQTNEMUU1MjVDNkMwMEZBRUYxMyAvKiBNZWRpYVF1ZXJ5RXhw
cmVzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1
ZXJ5RXhwcmVzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjVDQTNF
MUU1MjVDNkMwMEZBRUYxMyAvKiBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0JBNUJBNjFGMEI0QkRFMDAzNEQ3NDUgLyogSlNET01Db252ZXJ0
V2ViR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01Db252ZXJ0V2ViR0wuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU0MjIsNiArMjU0MjMsNyBAQAogCQkJCUE4OTk0
MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovLAogCQkJCUIyNzUzNTM4MEIw
NTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1MzkwQjA1MzgxNDAwMkNF
NjRGIC8qIENvbG9yLmggKi8sCisJCQkJN0NBQzZBRUMyNDdGMUM1MTAwRTYxRDU5IC8qIENvbG9y
Q29tcG9uZW50cy5oICovLAogCQkJCTMxMDNCN0RFMURCMDE1NTYwMDhCQjg5MCAvKiBDb2xvckhh
c2guaCAqLywKIAkJCQk3Q0FDNkFFNjI0N0YwODFGMDBFNjFENTkgLyogQ29sb3JNYXRyaXguY3Bw
ICovLAogCQkJCTdDQUM2QUU4MjQ3RjA4MjAwMEU2MUQ1OSAvKiBDb2xvck1hdHJpeC5oICovLApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNp
b24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGlj
Q29sb3IoKSBjb25zdAogICAgIHJldHVybiB7IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCksIFNl
bWFudGljIH07CiB9CiAKLXN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IENv
bG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CitzdGQ6OnBhaXI8Q29sb3JTcGFj
ZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRz
KCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CiAgICAgICAgIGF1dG8mIGV4dGVu
ZGVkQ29sb3IgPSBhc0V4dGVuZGVkKCk7CkBAIC0zMTQsNyArMzE0LDcgQEAgc3RkOjpwYWlyPENv
bG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gQwogICAgIH0KIAogICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gYXNTaW1wbGVDb2xvcigpOwotICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0IsIEZs
b2F0Q29tcG9uZW50cyB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYsIGIgLyAyNTUuMGYsICBhIC8g
MjU1LjBmIH0gfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpTUkdCLCBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+IHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4wZiwgIGEgLyAyNTUu
MGYgfSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KSBjb25zdApAQCAtMzI3LDcgKzMyNyw3IEBAIFNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2lt
cGxlQ29sb3JMb3MKICAgICByZXR1cm4gYXNTaW1wbGVDb2xvcigpOwogfQogCi1GbG9hdENvbXBv
bmVudHMgQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBjb25zdAorQ29sb3JDb21wb25l
bnRzPGZsb2F0PiBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0CiB7CiAgICAg
YXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygp
OwogICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw2IEBA
IHR5cGVkZWYgc3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RydWN0IEZsb2F0Q29tcG9uZW50czsKLQogY2xhc3MgQ29sb3IgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTUwLDEzICsxNDgsMTMgQEAgcHVibGljOgog
CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpw
YWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JD
b21wb25lbnRzPGZsb2F0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKIAogICAg
IC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JH
Qi4KICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFj
ZSBjb2xvcnMgaW50byBzUkdCLgotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CiAKICAgICBD
b2xvciBsaWdodCgpIGNvbnN0OwogICAgIENvbG9yIGRhcmsoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCShy
ZXZpc2lvbiAyNjIyMTkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmg6MjYyMjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JDb21wb25lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PGFycmF5PgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1
Y3QgRmxvYXRDb21wb25lbnRzIHsKKyAgICBGbG9hdENvbXBvbmVudHMoZmxvYXQgYSA9IDAsIGZs
b2F0IGIgPSAwLCBmbG9hdCBjID0gMCwgZmxvYXQgZCA9IDApCisgICAgeworICAgICAgICBjb21w
b25lbnRzWzBdID0gYTsKKyAgICAgICAgY29tcG9uZW50c1sxXSA9IGI7CisgICAgICAgIGNvbXBv
bmVudHNbMl0gPSBjOworICAgICAgICBjb21wb25lbnRzWzNdID0gZDsKKyAgICB9CisKKyAgICBG
bG9hdENvbXBvbmVudHMoY29uc3Qgc3RkOjphcnJheTxmbG9hdCwgND4mIHZhbHVlcykKKyAgICB7
CisgICAgICAgIGNvbXBvbmVudHNbMF0gPSB2YWx1ZXNbMF07CisgICAgICAgIGNvbXBvbmVudHNb
MV0gPSB2YWx1ZXNbMV07CisgICAgICAgIGNvbXBvbmVudHNbMl0gPSB2YWx1ZXNbMl07CisgICAg
ICAgIGNvbXBvbmVudHNbM10gPSB2YWx1ZXNbM107CisgICAgfQorCisgICAgRmxvYXRDb21wb25l
bnRzJiBvcGVyYXRvcis9KGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgcmhzKQorICAgIHsKKyAgICAg
ICAgY29tcG9uZW50c1swXSArPSByaHMuY29tcG9uZW50c1swXTsKKyAgICAgICAgY29tcG9uZW50
c1sxXSArPSByaHMuY29tcG9uZW50c1sxXTsKKyAgICAgICAgY29tcG9uZW50c1syXSArPSByaHMu
Y29tcG9uZW50c1syXTsKKyAgICAgICAgY29tcG9uZW50c1szXSArPSByaHMuY29tcG9uZW50c1sz
XTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEZsb2F0Q29tcG9uZW50cyBv
cGVyYXRvcisoZmxvYXQgcmhzKSBjb25zdAorICAgIHsKKyAgICAgICAgRmxvYXRDb21wb25lbnRz
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0gPSBjb21wb25lbnRzWzBdICsg
cmhzOworICAgICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9IGNvbXBvbmVudHNbMV0gKyByaHM7
CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gY29tcG9uZW50c1syXSArIHJoczsKKyAg
ICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBjb21wb25lbnRzWzNdICsgcmhzOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEZsb2F0Q29tcG9uZW50cyBvcGVyYXRvci8o
ZmxvYXQgZGVub21pbmF0b3IpIGNvbnN0CisgICAgeworICAgICAgICBGbG9hdENvbXBvbmVudHMg
cmVzdWx0OworICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyBk
ZW5vbWluYXRvcjsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMV0gPSBjb21wb25lbnRzWzFd
IC8gZGVub21pbmF0b3I7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gY29tcG9uZW50
c1syXSAvIGRlbm9taW5hdG9yOworICAgICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9IGNvbXBv
bmVudHNbM10gLyBkZW5vbWluYXRvcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBGbG9hdENvbXBvbmVudHMgb3BlcmF0b3IqKGZsb2F0IGZhY3RvcikgY29uc3QKKyAgICB7
CisgICAgICAgIEZsb2F0Q29tcG9uZW50cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5jb21wb25l
bnRzWzBdID0gY29tcG9uZW50c1swXSAqIGZhY3RvcjsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVu
dHNbMV0gPSBjb21wb25lbnRzWzFdICogZmFjdG9yOworICAgICAgICByZXN1bHQuY29tcG9uZW50
c1syXSA9IGNvbXBvbmVudHNbMl0gKiBmYWN0b3I7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRz
WzNdID0gY29tcG9uZW50c1szXSAqIGZhY3RvcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBGbG9hdENvbXBvbmVudHMgYWJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEZs
b2F0Q29tcG9uZW50cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzBdID0gZmFi
cyhjb21wb25lbnRzWzBdKTsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMV0gPSBmYWJzKGNv
bXBvbmVudHNbMV0pOworICAgICAgICByZXN1bHQuY29tcG9uZW50c1syXSA9IGZhYnMoY29tcG9u
ZW50c1syXSk7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzNdID0gZmFicyhjb21wb25lbnRz
WzNdKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxzdGQ6
OnNpemVfdCBOPgorICAgIGZsb2F0IGdldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Y29tcG9uZW50c1tOXTsKKyAgICB9CisKKyAgICBzdGQ6OmFycmF5PGZsb2F0LCA0PiBjb21wb25l
bnRzOworfTsKKworYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IEZsb2F0Q29tcG9uZW50
cyYsIGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOworCitzdHJ1Y3QgQ29sb3JDb21wb25lbnRzIHsK
KyAgICBDb2xvckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7CisgICAgCisgICAg
c3RhdGljIENvbG9yQ29tcG9uZW50cyBmcm9tUkdCQSh1bnNpZ25lZCBwaXhlbCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBDb2xvckNvbXBvbmVudHMoKHBpeGVsID4+IDI0KSAmIDB4RkYsIChwaXhl
bCA+PiAxNikgJiAweEZGLCAocGl4ZWwgPj4gOCkgJiAweEZGLCBwaXhlbCAmIDB4RkYpOworICAg
IH0KKyAgICAKKyAgICBDb2xvckNvbXBvbmVudHModWludDhfdCBhID0gMCwgdWludDhfdCBiID0g
MCwgdWludDhfdCBjID0gMCwgdWludDhfdCBkID0gMCkKKyAgICB7CisgICAgICAgIGNvbXBvbmVu
dHNbMF0gPSBhOworICAgICAgICBjb21wb25lbnRzWzFdID0gYjsKKyAgICAgICAgY29tcG9uZW50
c1syXSA9IGM7CisgICAgICAgIGNvbXBvbmVudHNbM10gPSBkOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCB0b1JHQkEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNb
MF0gPDwgMjQgfCBjb21wb25lbnRzWzFdIDw8IDE2IHwgY29tcG9uZW50c1syXSA8PCA4IHwgY29t
cG9uZW50c1szXTsKKyAgICB9CisKKyAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDQ+IGNvbXBvbmVu
dHM7Cit9OworCitpbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1heChjb25zdCBD
b2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK3sKKyAgICByZXR1
cm4geworICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9uZW50c1swXSks
CisgICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1sxXSwgYi5jb21wb25lbnRzWzFdKSwKKyAg
ICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzJdLCBiLmNvbXBvbmVudHNbMl0pLAorICAgICAg
ICBzdGQ6Om1heChhLmNvbXBvbmVudHNbM10sIGIuY29tcG9uZW50c1szXSkKKyAgICB9OworfQor
CitpbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1pbihjb25zdCBDb2xvckNvbXBv
bmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK3sKKyAgICByZXR1cm4geworICAg
ICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9uZW50c1swXSksCisgICAgICAg
IHN0ZDo6bWluKGEuY29tcG9uZW50c1sxXSwgYi5jb21wb25lbnRzWzFdKSwKKyAgICAgICAgc3Rk
OjptaW4oYS5jb21wb25lbnRzWzJdLCBiLmNvbXBvbmVudHNbMl0pLAorICAgICAgICBzdGQ6Om1p
bihhLmNvbXBvbmVudHNbM10sIGIuY29tcG9uZW50c1szXSkKKyAgICB9OworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29uc3QgQ29sb3JDb21w
b25lbnRzJiBiKQoreworICAgIHJldHVybiBhLmNvbXBvbmVudHMgPT0gYi5jb21wb25lbnRzOwor
fQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29u
c3QgQ29sb3JDb21wb25lbnRzJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK2lu
bGluZSB1aW50OF90IGNsYW1wZWRDb2xvckNvbXBvbmVudChmbG9hdCBmKQoreworICAgIC8vIFNl
ZSBhbHNvIGNvbG9yRmxvYXRUb1JHQkFCeXRlKCkuCisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3Rh
dGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKK30KKworaW5saW5l
IHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2ln
bmVkIHJvd0J5dGVzKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0Owor
ICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKK30KKworLy8gMC0x
IGNvbXBvbmVudHMsIHJlc3VsdCBpcyBjbGFtcGVkLgorZmxvYXQgbGluZWFyVG9SR0JDb2xvckNv
bXBvbmVudChmbG9hdCk7CitmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0KTsK
KworRmxvYXRDb21wb25lbnRzIHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBv
bmVudHMmKTsKK0Zsb2F0Q29tcG9uZW50cyBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29uc3QgRmxv
YXRDb21wb25lbnRzJik7CisKK0Zsb2F0Q29tcG9uZW50cyBwM1RvU1JHQihjb25zdCBGbG9hdENv
bXBvbmVudHMmKTsKK0Zsb2F0Q29tcG9uZW50cyBzUkdCVG9QMyhjb25zdCBGbG9hdENvbXBvbmVu
dHMmKTsKKworV0VCQ09SRV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIHNSR0JUb0hTTChjb25zdCBG
bG9hdENvbXBvbmVudHMmKTsKK1dFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyBoc2xUb1NS
R0IoY29uc3QgRmxvYXRDb21wb25lbnRzJik7CisKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBGbG9h
dENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50cyk7CitmbG9hdCBsdW1pbmFuY2UoY29uc3QgRmxv
YXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVudHMpOworZmxvYXQgY29udHJhc3RSYXRpbyhjb25z
dCBGbG9hdENvbXBvbmVudHMmLCBjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKKworRmxvYXRDb21w
b25lbnRzIHByZW11bHRpcGxpZWQoY29uc3QgRmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVu
dHMpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBzdGQgeworCit0ZW1w
bGF0ZTw+CitjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50cz4gOiBwdWJs
aWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4geworfTsKKwordGVtcGxh
dGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2ViQ29yZTo6RmxvYXRD
b21wb25lbnRzPiB7CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9IGZsb2F0OworfTsKKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21w
b25lbnRzLmgJKHJldmlzaW9uIDI2MjIxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyNyArMjgsMjMg
QEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bWF0
aC5oPgorI2luY2x1ZGUgPHR1cGxlPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBG
bG9hdENvbXBvbmVudHMgewotICAgIEZsb2F0Q29tcG9uZW50cyhmbG9hdCBhID0gMCwgZmxvYXQg
YiA9IDAsIGZsb2F0IGMgPSAwLCBmbG9hdCBkID0gMCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgQ29sb3JDb21wb25lbnRzIHsKKyAgICBDb2xvckNvbXBvbmVudHMoVCBhID0gMCwgVCBi
ID0gMCwgVCBjID0gMCwgVCBkID0gMCkKKyAgICAgICAgOiBjb21wb25lbnRzIHsgYSwgYiwgYywg
ZCB9CiAgICAgewotICAgICAgICBjb21wb25lbnRzWzBdID0gYTsKLSAgICAgICAgY29tcG9uZW50
c1sxXSA9IGI7Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSBjOwotICAgICAgICBjb21wb25lbnRz
WzNdID0gZDsKICAgICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMoY29uc3Qgc3RkOjphcnJheTxm
bG9hdCwgND4mIHZhbHVlcykKKyAgICBDb2xvckNvbXBvbmVudHMoY29uc3Qgc3RkOjphcnJheTxU
LCA0PiYgdmFsdWVzKQorICAgICAgICA6IGNvbXBvbmVudHMgeyB2YWx1ZXMgfQogICAgIHsKLSAg
ICAgICAgY29tcG9uZW50c1swXSA9IHZhbHVlc1swXTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9
IHZhbHVlc1sxXTsKLSAgICAgICAgY29tcG9uZW50c1syXSA9IHZhbHVlc1syXTsKLSAgICAgICAg
Y29tcG9uZW50c1szXSA9IHZhbHVlc1szXTsKICAgICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMm
IG9wZXJhdG9yKz0oY29uc3QgRmxvYXRDb21wb25lbnRzJiByaHMpCisgICAgQ29sb3JDb21wb25l
bnRzJiBvcGVyYXRvcis9KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgcmhzKQogICAgIHsKICAgICAg
ICAgY29tcG9uZW50c1swXSArPSByaHMuY29tcG9uZW50c1swXTsKICAgICAgICAgY29tcG9uZW50
c1sxXSArPSByaHMuY29tcG9uZW50c1sxXTsKQEAgLTU3LDgyICs1Myw1OCBAQCBzdHJ1Y3QgRmxv
YXRDb21wb25lbnRzIHsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIEZsb2F0
Q29tcG9uZW50cyBvcGVyYXRvcisoZmxvYXQgcmhzKSBjb25zdAorICAgIENvbG9yQ29tcG9uZW50
cyBvcGVyYXRvcisoVCByaHMpIGNvbnN0CiAgICAgewotICAgICAgICBGbG9hdENvbXBvbmVudHMg
cmVzdWx0OwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gKyBy
aHM7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFdID0gY29tcG9uZW50c1sxXSArIHJoczsK
LSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMl0gPSBjb21wb25lbnRzWzJdICsgcmhzOwotICAg
ICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9IGNvbXBvbmVudHNbM10gKyByaHM7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjb21wb25lbnRz
WzBdICsgcmhzLAorICAgICAgICAgICAgY29tcG9uZW50c1sxXSArIHJocywKKyAgICAgICAgICAg
IGNvbXBvbmVudHNbMl0gKyByaHMsCisgICAgICAgICAgICBjb21wb25lbnRzWzNdICsgcmhzCisg
ICAgICAgIH07CiAgICAgfQogCi0gICAgRmxvYXRDb21wb25lbnRzIG9wZXJhdG9yLyhmbG9hdCBk
ZW5vbWluYXRvcikgY29uc3QKKyAgICBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IvKFQgZGVub21p
bmF0b3IpIGNvbnN0CiAgICAgewotICAgICAgICBGbG9hdENvbXBvbmVudHMgcmVzdWx0OwotICAg
ICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gLyBkZW5vbWluYXRvcjsK
LSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMV0gPSBjb21wb25lbnRzWzFdIC8gZGVub21pbmF0
b3I7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gY29tcG9uZW50c1syXSAvIGRlbm9t
aW5hdG9yOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9IGNvbXBvbmVudHNbM10gLyBk
ZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIGNvbXBvbmVudHNbMF0gLyBkZW5vbWluYXRvciwKKyAgICAgICAgICAgIGNvbXBv
bmVudHNbMV0gLyBkZW5vbWluYXRvciwKKyAgICAgICAgICAgIGNvbXBvbmVudHNbMl0gLyBkZW5v
bWluYXRvciwKKyAgICAgICAgICAgIGNvbXBvbmVudHNbM10gLyBkZW5vbWluYXRvcgorICAgICAg
ICB9OwogICAgIH0KIAotICAgIEZsb2F0Q29tcG9uZW50cyBvcGVyYXRvciooZmxvYXQgZmFjdG9y
KSBjb25zdAorICAgIENvbG9yQ29tcG9uZW50cyBvcGVyYXRvciooVCBmYWN0b3IpIGNvbnN0CiAg
ICAgewotICAgICAgICBGbG9hdENvbXBvbmVudHMgcmVzdWx0OwotICAgICAgICByZXN1bHQuY29t
cG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gKiBmYWN0b3I7Ci0gICAgICAgIHJlc3VsdC5jb21w
b25lbnRzWzFdID0gY29tcG9uZW50c1sxXSAqIGZhY3RvcjsKLSAgICAgICAgcmVzdWx0LmNvbXBv
bmVudHNbMl0gPSBjb21wb25lbnRzWzJdICogZmFjdG9yOwotICAgICAgICByZXN1bHQuY29tcG9u
ZW50c1szXSA9IGNvbXBvbmVudHNbM10gKiBmYWN0b3I7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjb21wb25lbnRzWzBdICogZmFjdG9yLAor
ICAgICAgICAgICAgY29tcG9uZW50c1sxXSAqIGZhY3RvciwKKyAgICAgICAgICAgIGNvbXBvbmVu
dHNbMl0gKiBmYWN0b3IsCisgICAgICAgICAgICBjb21wb25lbnRzWzNdICogZmFjdG9yCisgICAg
ICAgIH07CiAgICAgfQogCi0gICAgRmxvYXRDb21wb25lbnRzIGFicygpIGNvbnN0CisgICAgQ29s
b3JDb21wb25lbnRzIGFicygpIGNvbnN0CiAgICAgewotICAgICAgICBGbG9hdENvbXBvbmVudHMg
cmVzdWx0OwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGZhYnMoY29tcG9uZW50c1sw
XSk7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFdID0gZmFicyhjb21wb25lbnRzWzFdKTsK
LSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMl0gPSBmYWJzKGNvbXBvbmVudHNbMl0pOwotICAg
ICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9IGZhYnMoY29tcG9uZW50c1szXSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzdGQ6OmFicyhj
b21wb25lbnRzWzBdKSwKKyAgICAgICAgICAgIHN0ZDo6YWJzKGNvbXBvbmVudHNbMV0pLAorICAg
ICAgICAgICAgc3RkOjphYnMoY29tcG9uZW50c1syXSksCisgICAgICAgICAgICBzdGQ6OmFicyhj
b21wb25lbnRzWzNdKQorICAgICAgICB9OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6
ZV90IE4+Ci0gICAgZmxvYXQgZ2V0KCkgY29uc3QKKyAgICBUIGdldCgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gY29tcG9uZW50c1tOXTsKICAgICB9CiAKLSAgICBzdGQ6OmFycmF5PGZs
b2F0LCA0PiBjb21wb25lbnRzOworICAgIHN0ZDo6YXJyYXk8VCwgND4gY29tcG9uZW50czsKIH07
CiAKLWJvb2wgYXJlRXNzZW50aWFsbHlFcXVhbChjb25zdCBGbG9hdENvbXBvbmVudHMmLCBjb25z
dCBGbG9hdENvbXBvbmVudHMmKTsKLQotc3RydWN0IENvbG9yQ29tcG9uZW50cyB7Ci0gICAgQ29s
b3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotICAgIAotICAgIHN0YXRpYyBD
b2xvckNvbXBvbmVudHMgZnJvbVJHQkEodW5zaWduZWQgcGl4ZWwpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQ29sb3JDb21wb25lbnRzKChwaXhlbCA+PiAyNCkgJiAweEZGLCAocGl4ZWwgPj4gMTYp
ICYgMHhGRiwgKHBpeGVsID4+IDgpICYgMHhGRiwgcGl4ZWwgJiAweEZGKTsKLSAgICB9Ci0gICAg
Ci0gICAgQ29sb3JDb21wb25lbnRzKHVpbnQ4X3QgYSA9IDAsIHVpbnQ4X3QgYiA9IDAsIHVpbnQ4
X3QgYyA9IDAsIHVpbnQ4X3QgZCA9IDApCi0gICAgewotICAgICAgICBjb21wb25lbnRzWzBdID0g
YTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9IGI7Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSBj
OwotICAgICAgICBjb21wb25lbnRzWzNdID0gZDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQg
dG9SR0JBKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wb25lbnRzWzBdIDw8IDI0
IHwgY29tcG9uZW50c1sxXSA8PCAxNiB8IGNvbXBvbmVudHNbMl0gPDwgOCB8IGNvbXBvbmVudHNb
M107Ci0gICAgfQotCi0gICAgc3RkOjphcnJheTx1aW50OF90LCA0PiBjb21wb25lbnRzOwotfTsK
IAotaW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21wb25lbnRNYXgoY29uc3QgQ29sb3JDb21w
b25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgoraW5saW5lIENvbG9yQ29tcG9uZW50czxUPiBwZXJDb21wb25lbnRNYXgoY29uc3QgQ29sb3JD
b21wb25lbnRzPFQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGIpCiB7CiAgICAgcmV0
dXJuIHsKICAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzBdLCBiLmNvbXBvbmVudHNbMF0p
LApAQCAtMTQyLDcgKzExNCw4IEBAIGlubGluZSBDb2xvckNvbXBvbmVudHMgcGVyQ29tcG9uZW50
TWF4KGMKICAgICB9OwogfQogCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1p
bihjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgQ29sb3JDb21wb25lbnRzPFQ+IHBlckNvbXBvbmVu
dE1pbihjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czxU
PiYgYikKIHsKICAgICByZXR1cm4gewogICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbMF0s
IGIuY29tcG9uZW50c1swXSksCkBAIC0xNTIsNTkgKzEyNSwzMCBAQCBpbmxpbmUgQ29sb3JDb21w
b25lbnRzIHBlckNvbXBvbmVudE1pbihjCiAgICAgfTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9y
Q29tcG9uZW50czxUPiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBiKQogewogICAgIHJl
dHVybiBhLmNvbXBvbmVudHMgPT0gYi5jb21wb25lbnRzOwogfQogCi1pbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzJiBi
KQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29s
b3JDb21wb25lbnRzPFQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGIpCiB7CiAgICAg
cmV0dXJuICEoYSA9PSBiKTsKIH0KIAotaW5saW5lIHVpbnQ4X3QgY2xhbXBlZENvbG9yQ29tcG9u
ZW50KGZsb2F0IGYpCi17Ci0gICAgLy8gU2VlIGFsc28gY29sb3JGbG9hdFRvUkdCQUJ5dGUoKS4K
LSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoMjU1LjBmICog
ZikpLCAwLCAyNTUpOwotfQotCi1pbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5z
aWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7Ci0gICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsg
eSAqIHJvd0J5dGVzOwotfQotCi0vLyAwLTEgY29tcG9uZW50cywgcmVzdWx0IGlzIGNsYW1wZWQu
Ci1mbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLWZsb2F0IHJnYlRvTGlu
ZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwotCi1GbG9hdENvbXBvbmVudHMgcmdiVG9MaW5lYXJD
b21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotRmxvYXRDb21wb25lbnRzIGxpbmVh
clRvUkdCQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLQotRmxvYXRDb21wb25l
bnRzIHAzVG9TUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotRmxvYXRDb21wb25lbnRzIHNS
R0JUb1AzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotCi1XRUJDT1JFX0VYUE9SVCBGbG9hdENv
bXBvbmVudHMgc1JHQlRvSFNMKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotV0VCQ09SRV9FWFBP
UlQgRmxvYXRDb21wb25lbnRzIGhzbFRvU1JHQihjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLQot
ZmxvYXQgbGlnaHRuZXNzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKTsK
LWZsb2F0IGx1bWluYW5jZShjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50cyk7
Ci1mbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYsIGNvbnN0IEZsb2F0
Q29tcG9uZW50cyYpOwotCi1GbG9hdENvbXBvbmVudHMgcHJlbXVsdGlwbGllZChjb25zdCBGbG9h
dENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50cyk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogbmFtZXNwYWNlIHN0ZCB7CiAKLXRlbXBsYXRlPD4KLWNsYXNzIHR1cGxlX3NpemU8V2ViQ29y
ZTo6RmxvYXRDb21wb25lbnRzPiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PHN0ZDo6
c2l6ZV90LCA0PiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJD
b3JlOjpDb2xvckNvbXBvbmVudHM8VD4+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8
c3RkOjpzaXplX3QsIDQ+IHsKIH07CiAKLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+Ci1jbGFzcyB0
dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50cz4gewordGVtcGxhdGU8c3Rk
OjpzaXplX3QgTiwgdHlwZW5hbWUgVD4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8TiwgV2ViQ29yZTo6
Q29sb3JDb21wb25lbnRzPFQ+PiB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgdHlwZSA9IGZsb2F0Owor
ICAgIHVzaW5nIHR5cGUgPSBUOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Q29sb3JNYXRyaXguaCIKIAorI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE1OCw3ICsxNTks
NyBAQCBDb2xvck1hdHJpeCBDb2xvck1hdHJpeDo6c2VwaWFNYXRyaXgoZmxvCiAgICAgcmV0dXJu
IG1hdHJpeDsKIH0KIAotdm9pZCBDb2xvck1hdHJpeDo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRz
KEZsb2F0Q29tcG9uZW50cyYgY29sb3JDb21wb25lbnRzKSBjb25zdAordm9pZCBDb2xvck1hdHJp
eDo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGNvbG9y
Q29tcG9uZW50cykgY29uc3QKIHsKICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBhbHBoYV0g
PSBjb2xvckNvbXBvbmVudHM7CiAKQEAgLTE2OCw3ICsxNjksNyBAQCB2b2lkIENvbG9yTWF0cml4
Ojp0cmFuc2Zvcm1Db2xvckNvbXBvbmVuCiAgICAgY29sb3JDb21wb25lbnRzLmNvbXBvbmVudHNb
M10gPSBtX21hdHJpeFszXVswXSAqIHJlZCArIG1fbWF0cml4WzNdWzFdICogZ3JlZW4gKyBtX21h
dHJpeFszXVsyXSAqIGJsdWUgKyBtX21hdHJpeFszXVszXSAqIGFscGhhICsgbV9tYXRyaXhbM11b
NF07CiB9CiAKLUZsb2F0Q29tcG9uZW50cyBDb2xvck1hdHJpeDo6dHJhbnNmb3JtZWRDb2xvckNv
bXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBjb2xvckNvbXBvbmVudHMpIGNvbnN0CitD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IENvbG9yTWF0cml4Ojp0cmFuc2Zvcm1lZENvbG9yQ29tcG9u
ZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xvckNvbXBvbmVudHMpIGNvbnN0
CiB7CiAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3JDb21wb25lbnRz
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1hdHJpeC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0
cml4LmgJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgRmxvYXRDb21wb25lbnRzOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbG9yQ29tcG9uZW50czsKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGxpa2VseSBiZSByZXBsYWNlZCBieSBhIGdlbmVyaWMgbWF0cml4IGNsYXNzLiBPdGhlciB0aGFu
CiAvLyB0aGUgc3BlY2lmaWMgbWF0cml4IGNvbnN0dWN0b3JzLCB0aGVyZSBpcyBub3RoaW5nIGNv
bG9yIHNwZWNpZmljIGFib3V0IHRoaXMuCkBAIC00Myw4ICs0Myw4IEBAIHB1YmxpYzoKICAgICBD
b2xvck1hdHJpeCgpOwogICAgIENvbG9yTWF0cml4KGNvbnN0IGZsb2F0WzIwXSk7CiAgICAgCi0g
ICAgdm9pZCB0cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoRmxvYXRDb21wb25lbnRzJikgY29uc3Q7
Ci0gICAgRmxvYXRDb21wb25lbnRzIHRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGNvbnN0IEZs
b2F0Q29tcG9uZW50cyYpIGNvbnN0OworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JDb21wb25lbnRz
KENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdDsKKyAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IHRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIG1ha2VJZGVudGl0eSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyMCArMjYsMTIgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogCisjaW5j
bHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JNYXRyaXguaCIKLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbG9yQ29t
cG9uZW50czo6Q29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgZmxvYXRDb21w
b25lbnRzKQotewotICAgIGNvbXBvbmVudHNbMF0gPSBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxv
YXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0pOwotICAgIGNvbXBvbmVudHNbMV0gPSBjbGFtcGVk
Q29sb3JDb21wb25lbnQoZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMV0pOwotICAgIGNvbXBv
bmVudHNbMl0gPSBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxvYXRDb21wb25lbnRzLmNvbXBvbmVu
dHNbMl0pOwotICAgIGNvbXBvbmVudHNbM10gPSBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxvYXRD
b21wb25lbnRzLmNvbXBvbmVudHNbM10pOwotfQotCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwo
Y29uc3QgRmxvYXRDb21wb25lbnRzJiBhLCBjb25zdCBGbG9hdENvbXBvbmVudHMmIGIpCitib29s
IGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYSwgY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYikKIHsKICAgICByZXR1cm4gV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKGEuY29tcG9uZW50c1swXSwgYi5jb21wb25lbnRzWzBdKQogICAgICAgICAm
JiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYS5jb21wb25lbnRzWzFdLCBiLmNvbXBvbmVudHNb
MV0pCkBAIC02NCw3ICs1Niw3IEBAIGZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxv
YXQgYykKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RkOjpwb3coKGMgKyAwLjA1NWYpIC8g
MS4wNTVmLCAyLjRmKSwgMCwgMSk7CiB9CiAKLUZsb2F0Q29tcG9uZW50cyByZ2JUb0xpbmVhckNv
bXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBSR0JDb2xvcikKK0NvbG9yQ29tcG9uZW50
czxmbG9hdD4gcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIFJHQkNvbG9yKQogewogICAgIHJldHVybiB7CiAgICAgICAgIHJnYlRvTGluZWFyQ29sb3JD
b21wb25lbnQoUkdCQ29sb3IuY29tcG9uZW50c1swXSksCkBAIC03NCw3ICs2Niw3IEBAIEZsb2F0
Q29tcG9uZW50cyByZ2JUb0xpbmVhckNvbXBvbmVudHMoY28KICAgICB9OwogfQogCi1GbG9hdENv
bXBvbmVudHMgbGluZWFyVG9SR0JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgbGlu
ZWFyUkdCKQorQ29sb3JDb21wb25lbnRzPGZsb2F0PiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgbGluZWFyUkdCKQogewogICAgIHJldHVybiB7CiAg
ICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFyUkdCLmNvbXBvbmVudHNbMF0p
LApAQCAtODQsNyArNzYsNyBAQCBGbG9hdENvbXBvbmVudHMgbGluZWFyVG9SR0JDb21wb25lbnRz
KGNvCiAgICAgfTsKIH0KIAotc3RhdGljIEZsb2F0Q29tcG9uZW50cyB4eXpUb0xpbmVhclNSR0Io
Y29uc3QgRmxvYXRDb21wb25lbnRzJiBYWVpDb21wb25lbnRzKQorc3RhdGljIENvbG9yQ29tcG9u
ZW50czxmbG9hdD4geHl6VG9MaW5lYXJTUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
IFhZWkNvbXBvbmVudHMpCiB7CiAgICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv
U1JHQgogICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFu
X1JHQl9YWVpfTWF0cml4Lmh0bWwKQEAgLTk4LDcgKzkwLDcgQEAgc3RhdGljIEZsb2F0Q29tcG9u
ZW50cyB4eXpUb0xpbmVhclNSR0IoYwogICAgIHJldHVybiB4eXpUb0xpbmVhclNSR0JNYXRyaXgu
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CiB9CiAKLXN0YXRpYyBG
bG9hdENvbXBvbmVudHMgbGluZWFyU1JHQlRvWFlaKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgWFla
Q29tcG9uZW50cykKK3N0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVhclNSR0JUb1hZ
Wihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQogewogICAgIC8v
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKICAgICAvLyBodHRwOi8vd3d3LmJy
dWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCkBAIC0x
MTIsNyArMTA0LDcgQEAgc3RhdGljIEZsb2F0Q29tcG9uZW50cyBsaW5lYXJTUkdCVG9YWVooYwog
ICAgIHJldHVybiBsaW5lYXJTUkdCVG9YWVpNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVu
dHMoWFlaQ29tcG9uZW50cyk7CiB9CiAKLXN0YXRpYyBGbG9hdENvbXBvbmVudHMgWFlaVG9MaW5l
YXJQMyhjb25zdCBGbG9hdENvbXBvbmVudHMmIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiBYWVpUb0xpbmVhclAzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIFhZWkNvbXBvbmVudHMpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2RlCiAgICAgY29uc3QgZmxvYXQgdmFsdWVzW10g
PSB7CkBAIC0xMjUsNyArMTE3LDcgQEAgc3RhdGljIEZsb2F0Q29tcG9uZW50cyBYWVpUb0xpbmVh
clAzKGNvbgogICAgIHJldHVybiB4eXpUb0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRDb2xv
ckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CiB9CiAKLXN0YXRpYyBGbG9hdENvbXBvbmVudHMg
bGluZWFyUDNUb1hZWihjb25zdCBGbG9hdENvbXBvbmVudHMmIFhZWkNvbXBvbmVudHMpCitzdGF0
aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBsaW5lYXJQM1RvWFlaKGNvbnN0IENvbG9yQ29tcG9u
ZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCiB7CiAgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2RlCiAgICAgY29uc3QgZmxvYXQg
dmFsdWVzW10gPSB7CkBAIC0xMzgsNyArMTMwLDcgQEAgc3RhdGljIEZsb2F0Q29tcG9uZW50cyBs
aW5lYXJQM1RvWFlaKGNvbgogICAgIHJldHVybiBsaW5lYXJQM1RvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKFhZWkNvbXBvbmVudHMpOwogfQogCi1GbG9hdENvbXBvbmVudHMg
cDNUb1NSR0IoY29uc3QgRmxvYXRDb21wb25lbnRzJiBwMykKK0NvbG9yQ29tcG9uZW50czxmbG9h
dD4gcDNUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgcDMpCiB7CiAgICAgYXV0
byBsaW5lYXJQMyA9IHJnYlRvTGluZWFyQ29tcG9uZW50cyhwMyk7CiAgICAgYXV0byB4eXogPSBs
aW5lYXJQM1RvWFlaKGxpbmVhclAzKTsKQEAgLTE0Niw3ICsxMzgsNyBAQCBGbG9hdENvbXBvbmVu
dHMgcDNUb1NSR0IoY29uc3QgRmxvYXRDb21wCiAgICAgcmV0dXJuIGxpbmVhclRvUkdCQ29tcG9u
ZW50cyhsaW5lYXJTUkdCKTsKIH0KIAotRmxvYXRDb21wb25lbnRzIHNSR0JUb1AzKGNvbnN0IEZs
b2F0Q29tcG9uZW50cyYgc1JHQikKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRvUDMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQikKIHsKICAgICBhdXRvIGxpbmVhclNSR0Ig
PSByZ2JUb0xpbmVhckNvbXBvbmVudHMoc1JHQik7CiAgICAgYXV0byB4eXogPSBsaW5lYXJTUkdC
VG9YWVoobGluZWFyU1JHQik7CkBAIC0xNTQsNyArMTQ2LDcgQEAgRmxvYXRDb21wb25lbnRzIHNS
R0JUb1AzKGNvbnN0IEZsb2F0Q29tcAogICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMo
bGluZWFyUDMpOwogfQogCi1mbG9hdCBsaWdodG5lc3MoY29uc3QgRmxvYXRDb21wb25lbnRzJiBz
UkdCQ29tcG9udGVudHMpCitmbG9hdCBsaWdodG5lc3MoY29uc3QgQ29sb3JDb21wb25lbnRzPGZs
b2F0PiYgc1JHQkNvbXBvbnRlbnRzKQogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNv
bXBvbnRlbnRzOwogCkBAIC0xNzUsNyArMTY3LDcgQEAgc3RhdGljIGZsb2F0IHNSR0JUb0xpbmVh
ckNvbG9yQ29tcG9uZW50RgogICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihzdGQ6OnBvdygoYyAr
IDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0KIAotZmxvYXQgbHVtaW5hbmNlKGNv
bnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbmVudHMpCitmbG9hdCBsdW1pbmFuY2UoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbmVudHMpCiB7CiAgICAgLy8gVmFs
dWVzIGZyb20gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8j
cmVsYXRpdmVsdW1pbmFuY2VkZWYKICAgICByZXR1cm4gMC4yMTI2ZiAqIHNSR0JUb0xpbmVhckNv
bG9yQ29tcG9uZW50Rm9yTHVtaW5hbmNlKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbMF0pCkBA
IC0xODMsNyArMTc1LDcgQEAgZmxvYXQgbHVtaW5hbmNlKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYg
cwogICAgICAgICArIDAuMDcyMmYgKiBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudEZvckx1bWlu
YW5jZShzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzJdKTsKIH0KIAotZmxvYXQgY29udHJhc3RS
YXRpbyhjb25zdCBGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHNBLCBjb25zdCBGbG9hdENvbXBv
bmVudHMmIGNvbXBvbmVudHNCKQorZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzQSwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYg
Y29tcG9uZW50c0IpCiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBvZiBj
b250cmFzdCByYXRpby4KICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyNjb250
cmFzdC1yYXRpb2RlZgpAQCAtMTk2LDcgKzE4OCw3IEBAIGZsb2F0IGNvbnRyYXN0UmF0aW8oY29u
c3QgRmxvYXRDb21wb25lbnQKICAgICByZXR1cm4gKGxpZ2h0ZXJMdW1pbmFuY2UgKyAwLjA1KSAv
IChkYXJrZXJMdW1pbmFuY2UgKyAwLjA1KTsKIH0KIAotRmxvYXRDb21wb25lbnRzIHNSR0JUb0hT
TChjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50cykKK0NvbG9yQ29tcG9uZW50
czxmbG9hdD4gc1JHQlRvSFNMKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21w
b250ZW50cykKIHsKICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xv
cl9zcGFjZS4KICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBzUkdCQ29tcG9udGVudHM7CkBA
IC0yNTYsNyArMjQ4LDcgQEAgc3RhdGljIGZsb2F0IGNhbGNIdWUoZmxvYXQgdGVtcDEsIGZsb2F0
IAogLy8gRXhwbGFuYXRpb24gb2YgdGhpcyBhbGdvcml0aG0gY2FuIGJlIGZvdW5kIGluIHRoZSBD
U1MgQ29sb3IgNCBNb2R1bGUKIC8vIHNwZWNpZmljYXRpb24gYXQgaHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiIHdpdGgKIC8vIGZ1cnRoZXIgZXhwbGFuYXRp
b24gYXZhaWxhYmxlIGF0IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2NvbG9yX3Nw
YWNlCi1GbG9hdENvbXBvbmVudHMgaHNsVG9TUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgaHNs
Q29sb3IpCitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGhzbFRvU1JHQihjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+JiBoc2xDb2xvcikKIHsKICAgICBmbG9hdCBodWUgPSBoc2xDb2xvci5jb21w
b25lbnRzWzBdOwogICAgIGZsb2F0IHNhdHVyYXRpb24gPSBoc2xDb2xvci5jb21wb25lbnRzWzFd
OwpAQCAtMjg0LDcgKzI3Niw3IEBAIEZsb2F0Q29tcG9uZW50cyBoc2xUb1NSR0IoY29uc3QgRmxv
YXRDb20KICAgICB9OwogfQogCi1GbG9hdENvbXBvbmVudHMgcHJlbXVsdGlwbGllZChjb25zdCBG
bG9hdENvbXBvbmVudHMmIHNSR0JDb21wb25lbnRzKQorQ29sb3JDb21wb25lbnRzPGZsb2F0PiBw
cmVtdWx0aXBsaWVkKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRz
KQogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBvbmVudHM7CiAgICAgcmV0dXJu
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuaAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTg1ICsyNiw2
MCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8YXJy
YXk+CiAjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBG
bG9hdENvbXBvbmVudHMgewotICAgIEZsb2F0Q29tcG9uZW50cyhmbG9hdCBhID0gMCwgZmxvYXQg
YiA9IDAsIGZsb2F0IGMgPSAwLCBmbG9hdCBkID0gMCkKLSAgICB7Ci0gICAgICAgIGNvbXBvbmVu
dHNbMF0gPSBhOwotICAgICAgICBjb21wb25lbnRzWzFdID0gYjsKLSAgICAgICAgY29tcG9uZW50
c1syXSA9IGM7Ci0gICAgICAgIGNvbXBvbmVudHNbM10gPSBkOwotICAgIH0KLQotICAgIEZsb2F0
Q29tcG9uZW50cyhjb25zdCBzdGQ6OmFycmF5PGZsb2F0LCA0PiYgdmFsdWVzKQotICAgIHsKLSAg
ICAgICAgY29tcG9uZW50c1swXSA9IHZhbHVlc1swXTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9
IHZhbHVlc1sxXTsKLSAgICAgICAgY29tcG9uZW50c1syXSA9IHZhbHVlc1syXTsKLSAgICAgICAg
Y29tcG9uZW50c1szXSA9IHZhbHVlc1szXTsKLSAgICB9Ci0KLSAgICBGbG9hdENvbXBvbmVudHMm
IG9wZXJhdG9yKz0oY29uc3QgRmxvYXRDb21wb25lbnRzJiByaHMpCi0gICAgewotICAgICAgICBj
b21wb25lbnRzWzBdICs9IHJocy5jb21wb25lbnRzWzBdOwotICAgICAgICBjb21wb25lbnRzWzFd
ICs9IHJocy5jb21wb25lbnRzWzFdOwotICAgICAgICBjb21wb25lbnRzWzJdICs9IHJocy5jb21w
b25lbnRzWzJdOwotICAgICAgICBjb21wb25lbnRzWzNdICs9IHJocy5jb21wb25lbnRzWzNdOwot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgRmxvYXRDb21wb25lbnRzIG9wZXJh
dG9yKyhmbG9hdCByaHMpIGNvbnN0Ci0gICAgewotICAgICAgICBGbG9hdENvbXBvbmVudHMgcmVz
dWx0OwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gKyByaHM7
Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFdID0gY29tcG9uZW50c1sxXSArIHJoczsKLSAg
ICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMl0gPSBjb21wb25lbnRzWzJdICsgcmhzOwotICAgICAg
ICByZXN1bHQuY29tcG9uZW50c1szXSA9IGNvbXBvbmVudHNbM10gKyByaHM7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgRmxvYXRDb21wb25lbnRzIG9wZXJhdG9yLyhmbG9h
dCBkZW5vbWluYXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEZsb2F0Q29tcG9uZW50cyByZXN1
bHQ7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzBdID0gY29tcG9uZW50c1swXSAvIGRlbm9t
aW5hdG9yOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9IGNvbXBvbmVudHNbMV0gLyBk
ZW5vbWluYXRvcjsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMl0gPSBjb21wb25lbnRzWzJd
IC8gZGVub21pbmF0b3I7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzNdID0gY29tcG9uZW50
c1szXSAvIGRlbm9taW5hdG9yOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAg
IEZsb2F0Q29tcG9uZW50cyBvcGVyYXRvciooZmxvYXQgZmFjdG9yKSBjb25zdAotICAgIHsKLSAg
ICAgICAgRmxvYXRDb21wb25lbnRzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNb
MF0gPSBjb21wb25lbnRzWzBdICogZmFjdG9yOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1sx
XSA9IGNvbXBvbmVudHNbMV0gKiBmYWN0b3I7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJd
ID0gY29tcG9uZW50c1syXSAqIGZhY3RvcjsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10g
PSBjb21wb25lbnRzWzNdICogZmFjdG9yOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LQotICAgIEZsb2F0Q29tcG9uZW50cyBhYnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgRmxvYXRD
b21wb25lbnRzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0gPSBmYWJzKGNv
bXBvbmVudHNbMF0pOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9IGZhYnMoY29tcG9u
ZW50c1sxXSk7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gZmFicyhjb21wb25lbnRz
WzJdKTsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBmYWJzKGNvbXBvbmVudHNbM10p
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHN0ZDo6c2l6
ZV90IE4+Ci0gICAgZmxvYXQgZ2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21w
b25lbnRzW05dOwotICAgIH0KLQotICAgIHN0ZDo6YXJyYXk8ZmxvYXQsIDQ+IGNvbXBvbmVudHM7
Ci19OwotCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgRmxvYXRDb21wb25lbnRzJiwg
Y29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci0KLXN0cnVjdCBDb2xvckNvbXBvbmVudHMgewotICAg
IENvbG9yQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLSAgICAKLSAgICBzdGF0
aWMgQ29sb3JDb21wb25lbnRzIGZyb21SR0JBKHVuc2lnbmVkIHBpeGVsKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIENvbG9yQ29tcG9uZW50cygocGl4ZWwgPj4gMjQpICYgMHhGRiwgKHBpeGVsID4+
IDE2KSAmIDB4RkYsIChwaXhlbCA+PiA4KSAmIDB4RkYsIHBpeGVsICYgMHhGRik7Ci0gICAgfQot
ICAgIAotICAgIENvbG9yQ29tcG9uZW50cyh1aW50OF90IGEgPSAwLCB1aW50OF90IGIgPSAwLCB1
aW50OF90IGMgPSAwLCB1aW50OF90IGQgPSAwKQotICAgIHsKLSAgICAgICAgY29tcG9uZW50c1sw
XSA9IGE7Ci0gICAgICAgIGNvbXBvbmVudHNbMV0gPSBiOwotICAgICAgICBjb21wb25lbnRzWzJd
ID0gYzsKLSAgICAgICAgY29tcG9uZW50c1szXSA9IGQ7Ci0gICAgfQotICAgIAotICAgIHVuc2ln
bmVkIHRvUkdCQSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gY29tcG9uZW50c1swXSA8
PCAyNCB8IGNvbXBvbmVudHNbMV0gPDwgMTYgfCBjb21wb25lbnRzWzJdIDw8IDggfCBjb21wb25l
bnRzWzNdOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvckNvbXBvbmVu
dHM7CiAKLSAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDQ+IGNvbXBvbmVudHM7Ci19OworLy8gMC0x
IGNvbXBvbmVudHMsIHJlc3VsdCBpcyBjbGFtcGVkLgorZmxvYXQgbGluZWFyVG9SR0JDb2xvckNv
bXBvbmVudChmbG9hdCk7CitmbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0KTsK
IAotaW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21wb25lbnRNYXgoY29uc3QgQ29sb3JDb21w
b25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCi17Ci0gICAgcmV0dXJuIHsKLSAg
ICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzBdLCBiLmNvbXBvbmVudHNbMF0pLAotICAgICAg
ICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMV0sIGIuY29tcG9uZW50c1sxXSksCi0gICAgICAgIHN0
ZDo6bWF4KGEuY29tcG9uZW50c1syXSwgYi5jb21wb25lbnRzWzJdKSwKLSAgICAgICAgc3RkOjpt
YXgoYS5jb21wb25lbnRzWzNdLCBiLmNvbXBvbmVudHNbM10pCi0gICAgfTsKLX0KK0NvbG9yQ29t
cG9uZW50czxmbG9hdD4gcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdD4mKTsKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyVG9SR0JDb21wb25lbnRz
KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKKworQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7CitDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+IHNSR0JUb1AzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKKworV0VC
Q09SRV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdCVG9IU0woY29uc3QgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBoc2xUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOwogCi1pbmxpbmUgQ29s
b3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1pbihjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNv
bnN0IENvbG9yQ29tcG9uZW50cyYgYikKK2Zsb2F0IGxpZ2h0bmVzcyhjb25zdCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOworZmxvYXQgbHVtaW5hbmNlKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cyk7CitmbG9hdCBjb250cmFzdFJh
dGlvKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50c0EsIGNvbnN0
IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50c0IpOworCitDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYg
c1JHQkNvbXBvbnRlbnRzKTsKKworYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IENvbG9y
Q29tcG9uZW50czxmbG9hdD4mLCBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7CisKK2lu
bGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQogewotICAg
IHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1swXSwgYi5jb21wb25lbnRz
WzBdKSwKLSAgICAgICAgc3RkOjptaW4oYS5jb21wb25lbnRzWzFdLCBiLmNvbXBvbmVudHNbMV0p
LAotICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbMl0sIGIuY29tcG9uZW50c1syXSksCi0g
ICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1szXSwgYi5jb21wb25lbnRzWzNdKQotICAgIH07
CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7CiB9CiAKLWlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVu
dHMmIGIpCitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZh
bHVlKQogewotICAgIHJldHVybiBhLmNvbXBvbmVudHMgPT0gYi5jb21wb25lbnRzOworICAgIHJl
dHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmQodmFsdWUpLCAwLmYsIDI1NS5mKTsKIH0KIAotaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9y
Q29tcG9uZW50cyYgYikKK2lubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZf
dCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gIShhID09IGIpOworICAgIHJldHVybiAodmFsdWUgPDwg
OCkgLSB2YWx1ZTsKIH0KIAotaW5saW5lIHVpbnQ4X3QgY2xhbXBlZENvbG9yQ29tcG9uZW50KGZs
b2F0IGYpCitpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQog
ewotICAgIC8vIFNlZSBhbHNvIGNvbG9yRmxvYXRUb1JHQkFCeXRlKCkuCi0gICAgcmV0dXJuIHN0
ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsK
KyAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRlIGFsZ29yaXRobSBmb3IgZGl2aXNp
b24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJhdGUgcmVzdWx0cyBmb3IgMTYtYml0
IHZhbHVlcy4KKyAgICAvLyBGSVhNRTogU2luY2UgdGhpcyBnaXZlcyBhY2N1cmF0ZSByZXN1bHRz
IGZvciAxNi1iaXQgdmFsdWVzLCB3ZSBzaG91bGQgZ2V0IHRoaXMgb3B0aW1pemF0aW9uIGludG8g
Y29tcGlsZXJzIGxpa2UgY2xhbmcuCisgICAgdWludDE2X3QgYXBwcm94aW1hdGlvbiA9IHZhbHVl
ID4+IDg7CisgICAgdWludDE2X3QgcmVtYWluZGVyID0gdmFsdWUgLSAoYXBwcm94aW1hdGlvbiAq
IDI1NSkgKyAxOworICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsK
IH0KIAotaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2ln
bmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQoraW5saW5lIHVpbnQ4X3QgY29sb3JGbG9hdFRvU2lt
cGxlQ29sb3JCeXRlKGZsb2F0IGYpCiB7Ci0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhl
bCA9IDQ7Ci0gICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOworICAg
IHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSks
IDAsIDI1NSk7CiB9CiAKLS8vIDAtMSBjb21wb25lbnRzLCByZXN1bHQgaXMgY2xhbXBlZC4KLWZs
b2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOwotZmxvYXQgcmdiVG9MaW5lYXJD
b2xvckNvbXBvbmVudChmbG9hdCk7Ci0KLUZsb2F0Q29tcG9uZW50cyByZ2JUb0xpbmVhckNvbXBv
bmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci1GbG9hdENvbXBvbmVudHMgbGluZWFyVG9S
R0JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotCi1GbG9hdENvbXBvbmVudHMg
cDNUb1NSR0IoY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci1GbG9hdENvbXBvbmVudHMgc1JHQlRv
UDMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci0KLVdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9u
ZW50cyBzUkdCVG9IU0woY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci1XRUJDT1JFX0VYUE9SVCBG
bG9hdENvbXBvbmVudHMgaHNsVG9TUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotCi1mbG9h
dCBsaWdodG5lc3MoY29uc3QgRmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVudHMpOwotZmxv
YXQgbHVtaW5hbmNlKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKTsKLWZs
b2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgRmxvYXRDb21wb25lbnRzJiwgY29uc3QgRmxvYXRDb21w
b25lbnRzJik7Ci0KLUZsb2F0Q29tcG9uZW50cyBwcmVtdWx0aXBsaWVkKGNvbnN0IEZsb2F0Q29t
cG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1u
YW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8PgotY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpG
bG9hdENvbXBvbmVudHM+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXpl
X3QsIDQ+IHsKLX07Ci0KLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+Ci1jbGFzcyB0dXBsZV9lbGVt
ZW50PE4sIFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50cz4gewotcHVibGljOgotICAgIHVzaW5nIHR5
cGUgPSBmbG9hdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsOCArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yQ29tcG9u
ZW50cy5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJDb2xvclV0aWxpdGll
cy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6
CiAKICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbHMuY29tcG9uZW50
c1szXTsgfQogCi0gICAgY29uc3QgRmxvYXRDb21wb25lbnRzJiBjaGFubmVscygpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhbm5lbHM7IH0KKyAgICBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBj
aGFubmVscygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbHM7IH0KICAgICBDb2xvclNwYWNlIGNv
bG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KIAogICAgIFdFQkNPUkVf
RVhQT1JUIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKICAgICB7IH0KIAotICAgIEZsb2F0
Q29tcG9uZW50cyBtX2NoYW5uZWxzOworICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbV9jaGFu
bmVsczsKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlNSR0IgfTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTMgKzc0LDkg
QEAgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhmbAogCiBTaW1wbGVDb2xv
ciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBodWUsIGZsb2F0IHNhdHVyYXRpb24sIGZs
b2F0IGxpZ2h0bmVzcywgZmxvYXQgYWxwaGEpCiB7Ci0gICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0
b3IgPSAyNTUuMDsKLSAgICBGbG9hdENvbXBvbmVudHMgZmxvYXRSZXN1bHQgPSBoc2xUb1NSR0Io
eyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7Ci0gICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcigKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1swXSAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1sxXSAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1syXSAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1szXSAqIHNj
YWxlRmFjdG9yKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBoc2xUb1NSR0IoeyBodWUsIHNh
dHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7CisgICAgLy8gRklYTUU6IERldGVybWluZSB3
aHkgdGhpcyBpc24ndCBjYWxsaW5nIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMgYW5kIGlmIGl0
IGNhbi4KKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJvdW5kKHIgKiAyNTUuMCksIHJvdW5k
KGcgKiAyNTUuMCksIHJvdW5kKGIgKiAyNTUuMCksIHJvdW5kKGEgKiAyNTUuMCkpOwogfQogCiBT
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsMTMgKzg3LDYgQEAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbAog
V0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQg
aCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7
CiAKLXVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQpOwotdWludDhfdCByb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0KTsKLQotdWludDE2X3QgZmFzdE11bHRpcGx5Qnky
NTUodWludDE2X3QgdmFsdWUpOwotdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsK
LQotdWludDhfdCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUoZmxvYXQpOwogCiBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIpCiB7CkBAIC0xMDUs
MzcgKzk4LDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaQogICAg
IHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoaW50IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAy
NTUpOwotfQotCi1pbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0
IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmQodmFsdWUpLCAwLmYs
IDI1NS5mKTsKLX0KLQotaW5saW5lIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90
IHZhbHVlKQotewotICAgIHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKLX0KLQotaW5saW5l
IHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICAvLyBXaGls
ZSB0aGlzIGlzIGFuIGFwcHJveGltYXRlIGFsZ29yaXRobSBmb3IgZGl2aXNpb24gYnkgMjU1LCBp
dCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJhdGUgcmVzdWx0cyBmb3IgMTYtYml0IHZhbHVlcy4KLSAg
ICAvLyBGSVhNRTogU2luY2UgdGhpcyBnaXZlcyBhY2N1cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQg
dmFsdWVzLCB3ZSBzaG91bGQgZ2V0IHRoaXMgb3B0aW1pemF0aW9uIGludG8gY29tcGlsZXJzIGxp
a2UgY2xhbmcuCi0gICAgdWludDE2X3QgYXBwcm94aW1hdGlvbiA9IHZhbHVlID4+IDg7Ci0gICAg
dWludDE2X3QgcmVtYWluZGVyID0gdmFsdWUgLSAoYXBwcm94aW1hdGlvbiAqIDI1NSkgKyAxOwot
ICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsKLX0KLQotaW5saW5l
IHVpbnQ4X3QgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGZsb2F0IGYpCi17Ci0gICAgLy8g
RklYTUU6IENvbnNvbGlkYXRlIHdpdGggY2xhbXBlZENvbG9yQ29tcG9uZW50KCkuCi0gICAgLy8g
V2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBt
YXRjaCBDRydzIHJvdW5kaW5nCi0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50
Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKLX0KLQogY29uc3RleHByIFNpbXBsZUNv
bG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IociwgZywgYiwgMHhGRik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJ
KHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAg
aW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIAogICAgIGJsdWUgICAgPSBy
ICogY29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07
CiB9CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgbHVtaW5hbmNlKGNvbnN0IEZsb2F0Q29t
cG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKS4KKy8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgbHVt
aW5hbmNlKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cykuCiBp
bmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1
ZSwgZmxvYXQmIGFscGhhKQogewogICAgIGFscGhhID0gMC4yMTI1ICogcmVkICsgMC43MTU0ICog
Z3JlZW4gKyAwLjA3MjEgKiBibHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJ
KHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niwx
MiBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDCiAgICAgICAgIGlu
LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiB9CiAK
K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5z
aWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCit7CisgICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQ
ZXJQaXhlbCA9IDQ7CisgICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVz
OworfQorCiB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDcgKzQwNCw3
IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXAKICAgICBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRC
eU9uZSA9IGhlaWdodCAtIDE7CiAgICAgCi0gICAgRmxvYXRDb21wb25lbnRzIGxpZ2h0Q29sb3Ig
PSAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgPyByZ2JU
b0xpbmVhckNvbXBvbmVudHMobV9saWdodGluZ0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KSkgOiBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOworICAgIGF1dG8g
bGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xvclNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50cyhtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpKSA6IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7
CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9h
dFBvaW50M0QobGlnaHRDb2xvci5jb21wb25lbnRzWzBdLCBsaWdodENvbG9yLmNvbXBvbmVudHNb
MV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1syXSk7CiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBh
aW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCwxOSBA
QCBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsCiAgICAgcmV0dXJuICh5
ICogd2lkdGggKyB4KSAqIDQ7CiB9CiAKK2lubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdD4g
bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKHVuc2lnbmVkIHBpeGVsKQoreworICAg
IHJldHVybiBDb2xvckNvbXBvbmVudHM8dWludDhfdD4oKHBpeGVsID4+IDI0KSAmIDB4RkYsIChw
aXhlbCA+PiAxNikgJiAweEZGLCAocGl4ZWwgPj4gOCkgJiAweEZGLCBwaXhlbCAmIDB4RkYpOwor
fQorCitpbmxpbmUgdW5zaWduZWQgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgY29tcG9uZW50cykKK3sKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgcmV0dXJuIHIgPDwgMjQgfCBnIDw8IDE2IHwg
YiA8PCA4IHwgYTsKK30KKwogdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgot
QUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHMgbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25l
bnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCitBTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50czx1aW50OF90PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdD4m
IGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgYikKIHsKICAgICBpZiAodHlwZSA9
PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCiAgICAgICAgIHJldHVybiBwZXJDb21wb25l
bnRNaW4oYSwgYik7CkBAIC05OCwxOCArMTA5LDE4IEBAIEFMV0FZU19JTkxJTkUgQ29sb3JDb21w
b25lbnRzIG1pbk9yTWF4KGMKIH0KIAogdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0
eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHMgY29sdW1uRXh0cmVtdW0oY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQg
eUVuZCwgaW50IHdpZHRoKQorQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdD4g
Y29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGlu
dCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQogewotICAgIGF1dG8gZXh0cmVt
dW0gPSBDb2xvckNvbXBvbmVudHM6OmZyb21SR0JBKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0
LCB3aWR0aCkpKTsKKyAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21Q
aXhlbFZhbHVlKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJh
eS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpKTsKIAogICAgIGZv
ciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7Ci0gICAgICAgIGF1dG8gcGl4
ZWwgPSBDb2xvckNvbXBvbmVudHM6OmZyb21SR0JBKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lk
dGgpKSk7CisgICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRh
dGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpKTsKICAgICAgICAgZXh0cmVtdW0g
PSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwpOwogICAgIH0KICAgICByZXR1cm4gZXh0
cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzIGNvbHVtbkV4dHJlbXVt
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFy
dCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQorQUxX
QVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdD4gY29sdW1uRXh0cmVtdW0oY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQg
eUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiB7CiAgICAgaWYg
KHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQogICAgICAgICByZXR1cm4gY29s
dW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihzcmNQaXhlbEFycmF5LCB4
LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKQEAgLTExNywxMCArMTI4LDEwIEBAIEFMV0FZU19JTkxJ
TkUgQ29sb3JDb21wb25lbnRzIGNvbHVtbkV4dHIKICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5
RW5kLCB3aWR0aCk7CiB9CiAKLXVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21w
b25lbnRzLCAxNj47Cit1c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50
czx1aW50OF90PiwgMTY+OwogCiB0ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+
Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50cyBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1
bW5FeHRyZW1hJiBrZXJuZWwpCitBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90
PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCiB7CiAgICAgYXV0
byBleHRyZW11bSA9IGtlcm5lbFswXTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5l
bC5zaXplKCk7ICsraSkKQEAgLTEyOSw3ICsxNDAsNyBAQCBBTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50cyBrZXJuZWxFeHRyCiAgICAgcmV0dXJuIGV4dHJlbXVtOwogfQogCi1BTFdBWVNfSU5M
SU5FIENvbG9yQ29tcG9uZW50cyBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBr
ZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK0FMV0FZU19JTkxJTkUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3Q+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtl
cm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGlmICh0eXBlID09IEZF
TU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKICAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVt
PEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKQEAgLTE3NCw3ICsxODUsNyBA
QCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoCiAgICAgICAgICAgICAg
ICAgZXh0cmVtYS5yZW1vdmUoMCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhl
bEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKLSAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBrZXJu
ZWxFeHRyZW11bShleHRyZW1hLCBtX3R5cGUpLnRvUkdCQSgpOworICAgICAgICAgICAgKmRlc3RQ
aXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShl
eHRyZW1hLCBtX3R5cGUpKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIx
Nyw3IEBAIEZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmMKIH0KIAogLy8g
VGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZH
MTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1GbG9hdENvbXBvbmVudHMgRkVU
dXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25z
dCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3Rvcikg
Y29uc3QKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0
IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRh
LCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKIHsKICAgICBzdHJ1Y3QgTm9p
c2VQb3NpdGlvbiB7CiAgICAgICAgIGludCBpbmRleDsgLy8gYngwLCBieTAgaW4gdGhlIHNwZWMg
dGV4dC4KQEAgLTMyMiwxOSArMzIyLDE5IEBAIEZsb2F0Q29tcG9uZW50cyBGRVR1cmJ1bGVuY2U6
Om5vaXNlMkQoY28KIH0KIAogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0
bWwjZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9y
IGNvbXBvbmVudHMuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50cyB0b0NvbG9yQ29tcG9u
ZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmIGZsb2F0Q29tcG9uZW50cykKK3N0YXRpYyBpbmxp
bmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Q+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgZmxvYXRDb21wb25lbnRzKQogewogICAgIHJldHVy
biB7Ci0gICAgICAgIHN0ZDo6bWF4PHVpbnQ4X3Q+KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGlu
dD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKiAyNTUpLCAyNTUpKSwKLSAgICAgICAg
c3RkOjptYXg8dWludDhfdD4oMCwgc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBv
bmVudHMuY29tcG9uZW50c1sxXSAqIDI1NSksIDI1NSkpLAotICAgICAgICBzdGQ6Om1heDx1aW50
OF90PigwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50cy5jb21wb25l
bnRzWzJdICogMjU1KSwgMjU1KSksCi0gICAgICAgIHN0ZDo6bWF4PHVpbnQ4X3Q+KDAsIHN0ZDo6
bWluKHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbM10gKiAyNTUp
LCAyNTUpKQorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxv
YXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6
OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVu
dHNbMV0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRp
Y19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMl0gKiAyNTUpLCAwLCAyNTUp
LAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21w
b25lbnRzLmNvbXBvbmVudHNbM10gKiAyNTUpLCAwLCAyNTUpLAogICAgIH07CiB9CiAKLUNvbG9y
Q29tcG9uZW50cyBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Q+
IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgRmxvYXRDb21wb25lbnRzIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdDsKKyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdDsKICAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50
aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVx
dWVuY3lZKTsKICAgICBmbG9hdCByYXRpbyA9IDE7CiAgICAgZm9yIChpbnQgb2N0YXZlID0gMDsg
b2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewpAQCAtMzYyLDcgKzM2Miw3IEBAIENv
bG9yQ29tcG9uZW50cyBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVQKICAgICBpZiAobV90eXBlID09
IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCiAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwogCi0gICAg
cmV0dXJuIHRvQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CisgICAg
cmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
KTsKIH0KIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oVWludDhDbGFtcGVkQXJyYXkm
IHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRh
IHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdApAQCAtMzgxLDcgKzM4MSw3
IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXAKICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsgKyt4KSB7CiAgICAgICAgICAg
ICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwogICAgICAgICAgICAgRmxvYXRQb2ludCBsb2Nh
bFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2ludCk7Ci0gICAgICAgICAgICBD
b2xvckNvbXBvbmVudHMgdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQo
cGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIGF1dG8g
dmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBz
dGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0UmFuZ2Uo
dmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4ZWxDaGFubmVsKTsKICAgICAg
ICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNs
dWRlICJGaWx0ZXIuaCIKIApAQCAtMTE2LDggKzExNiw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAgICBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hp
bmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZy
ZXF1ZW5jeVkpIGNvbnN0OwotICAgIEZsb2F0Q29tcG9uZW50cyBub2lzZTJEKGNvbnN0IFBhaW50
aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0g
ICAgQ29sb3JDb21wb25lbnRzIGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0
IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29u
c3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBDb2xvckNvbXBv
bmVudHM8dWludDhfdD4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFp
bnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZv
aWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0
aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsKIAogICAgIHN0YXRpYyB2b2lk
IGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAko
cmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBA
IFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29sb3JNYXRyaXgKICAgICByZXR1cm4gQmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdlYkNvcmU6OmJsZW5kKGZyb21B
bW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9CiAKLWJvb2wgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJiBj
b2xvckNvbXBvbmVudHMpIGNvbnN0Citib29sIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRp
b246OnRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGNvbG9yQ29tcG9uZW50
cykgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgR1JBWVNDQUxFOiB7
CkBAIC0xNTIsNyArMTUyLDcgQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gQmFzaWNDb21wb25l
bnRUcgogICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpj
cmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91bnQsIHByb2dyZXNzKSwgbV90
eXBlKTsKIH0KIAotYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjp0
cmFuc2Zvcm1Db2xvcihGbG9hdENvbXBvbmVudHMmIGNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jv
b2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3Io
Q29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29sb3JDb21wb25lbnRzKSBjb25zdAogewogICAgIHN3
aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBPUEFDSVRZOgpAQCAtMjI2LDkgKzIyNiw5IEBAIFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEludmVydExpZ2h0bmVzc0YKICAgICByZXR1cm4gSW52ZXJ0
TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKIH0KIAotYm9vbCBJbnZlcnRMaWdo
dG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50cyYgc1JH
QkNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uOjp0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29sb3JDb21w
b25lbnRzKSBjb25zdAogewotICAgIEZsb2F0Q29tcG9uZW50cyBoc2xDb21wb25lbnRzID0gc1JH
QlRvSFNMKHNSR0JDb2xvckNvbXBvbmVudHMpOworICAgIGF1dG8gaHNsQ29tcG9uZW50cyA9IHNS
R0JUb0hTTChzUkdCQ29sb3JDb21wb25lbnRzKTsKICAgICAKICAgICAvLyBSb3RhdGUgdGhlIGh1
ZSAxODBkZWcuCiAgICAgaHNsQ29tcG9uZW50cy5jb21wb25lbnRzWzBdID0gZm1vZChoc2xDb21w
b25lbnRzLmNvbXBvbmVudHNbMF0gKyAwLjVmLCAxLjBmKTsKQEAgLTI0OSw5ICsyNDksMTAgQEAg
Ym9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5z
Zm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jv
b2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3Io
Q29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbG9yQ29tcG9uZW50cykgY29uc3QKIHsKLSAg
ICBGbG9hdENvbXBvbmVudHMgcmdiQ29tcG9uZW50cyA9IHNSR0JDb2xvckNvbXBvbmVudHM7Cisg
ICAgYXV0byByZ2JDb21wb25lbnRzID0gc1JHQkNvbG9yQ29tcG9uZW50czsKKwogICAgIC8vIEFw
cGx5IHRoZSBtYXRyaXguCiAgICAgY29uc3QgZmxvYXQgbWF0cml4VmFsdWVzWzIwXSA9IHsKICAg
ICAgICAgLTEuMzAwLCAtMC4wOTcsICAwLjE0NywgMCwgMS4yNSwKQEAgLTI2Myw3ICsyNjQsNyBA
QCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6aW52CiAgICAgdG9MaWdodE1v
ZGVNYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKHJnYkNvbXBvbmVudHMpOwogCiAgICAg
Ly8gQ29udmVydCB0byBIU0wuCi0gICAgRmxvYXRDb21wb25lbnRzIGhzbENvbXBvbmVudHMgPSBz
UkdCVG9IU0wocmdiQ29tcG9uZW50cyk7CisgICAgYXV0byBoc2xDb21wb25lbnRzID0gc1JHQlRv
SFNMKHJnYkNvbXBvbmVudHMpOwogICAgIC8vIEh1ZSByb3RhdGUgYnkgMTgwZGVnLgogICAgIGhz
bENvbXBvbmVudHMuY29tcG9uZW50c1swXSA9IGZtb2QoaHNsQ29tcG9uZW50cy5jb21wb25lbnRz
WzBdICsgMC41ZiwgMS4wZik7CiAgICAgLy8gQW5kIHJldHVybiBSR0IuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9uLmgJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDggKzQ0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI7CiBjbGFzcyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTsKIGNsYXNzIEZpbHRlckVmZmVj
dDsKLXN0cnVjdCBGbG9hdENvbXBvbmVudHM7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRpb25z
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yQ29tcG9uZW50czsKIAogY2xhc3Mg
RmlsdGVyT3BlcmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZpbHRlck9wZXJh
dGlvbj4gewogcHVibGljOgpAQCAtNzksOCArNzksOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgdHJhbnNmb3JtQ29sb3Io
RmxvYXRDb21wb25lbnRzJikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaW52ZXJzZVRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50cyYpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50
czxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpbnZl
cnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICBPcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KIApAQCAtMjI4LDcgKzIyOCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAg
IGJvb2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAtMjYzLDcgKzI2Myw3IEBAIHBy
aXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21w
b25lbnRzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBkb3VibGUgbV9hbW91bnQ7
CiB9OwpAQCAtMjkwLDggKzI5MCw4IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIGJv
b2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYpIGNvbnN0IGZpbmFsOwogfTsKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgQmx1ckZpbHRlck9w
ZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsMTQgKzExMSwxNSBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENv
CiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAg
ICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKGNvbXBvbmVudHMpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGNvbG9yID0gQ29sb3IoY29tcG9uZW50cy5j
b21wb25lbnRzWzBdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbMV0sIGNvbXBvbmVudHMuY29tcG9u
ZW50c1syXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzNdKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGNvbXBvbmVudHM7CisgICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIs
IGcsIGIsIGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzAsMTQgKzEzMSwxNSBAQCBi
b29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlz
U2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRDb21wb25lbnRz
IGNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBj
b21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZm9yIChh
dXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24t
PmludmVyc2VUcmFuc2Zvcm1Db2xvcihjb21wb25lbnRzKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBjb2xvciA9IENvbG9yKGNvbXBvbmVudHMuY29tcG9uZW50c1sw
XSwgY29tcG9uZW50cy5jb21wb25lbnRzWzFdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbMl0sIGNv
bXBvbmVudHMuY29tcG9uZW50c1szXSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25l
bnRzOworICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400410</attachid>
            <date>2020-05-27 17:45:40 -0700</date>
            <delta_ts>2020-05-27 18:49:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212446-20200527174540.patch</filename>
            <type>text/plain</type>
            <size>64052</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjIyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAyMC0wNS0yNyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlZmFj
dG9yIEZsb2F0Q29tcG9uZW50cyBhbmQgQ29sb3JDb21wb25lbnRzIGludG8gYSBzaW5nbGUgdGVt
cGxhdGl6ZWQgQ29sb3JDb21wb25lbnRzIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNZXJnZSBGbG9hdENvbXBvbmVudHMgYW5kIENvbG9yQ29t
cG9uZW50cyBpbnRvIENvbG9yQ29tcG9uZW50czxUPiBhbmQgbW92ZSB0aGVtIHRvIHRoZWlyIG93
bgorICAgICAgICBoZWFkZXIuIFRoaXMgYXZvaWRzIGR1cGxpY2F0ZSBjb2RlIGFuZCBwYXZlcyB0
aGUgd2F5IGZvciBmdXJ0aGVyIGdlbmVyYWxpemF0aW9uIGRvd24gdGhlIGxpbmUuCisgICAgICAg
IAorICAgICAgICBBbHNvIG1vdmVzIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gQ29sb3JVdGls
aXRpZXMuaCBmcm9tIFNpbXBsZUNvbG9yLmggYXMgdGhleSBtYWtlIG1vcmUgc2Vuc2UKKyAgICAg
ICAgaW4gdGhlIGZvcm1lci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGQgQ29sb3JDb21w
b25lbnRzLmgKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5oLgorICAgICAgICBNb3ZlZCBDb2xvckNvbXBvbmVudHMgdG8gaXRzIG93biBoZWFkZXIg
YW5kIHRlbXBsYXRpemVkIGl0IHRvIGFsbG93IGl0IHRvIHNlcnZlIHRoZQorICAgICAgICBuZWVk
cyBvZiBib3RoIHRoZSBvbGQgQ29sb3JDb21wb25lbnRzIGFuZCBvbGQgRmxvYXRDb21wb25lbnRz
IGNsYXNzZXMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5o
OgorICAgICAgICBSZW1vdmVkIENvbG9yQ29tcG9uZW50cy9GbG9hdENvbXBvbmVudHMgYW5kIHVw
ZGF0ZSBleGlzdGluZyB1c2FnZXMgdG8gdGhlaXIgbmV3IG5hbWVzLgorICAgICAgICBBbHNvIG1v
dmVkIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwsIGZhc3RNdWx0aXBseUJ5MjU1LCBmYXN0RGl2
aWRlQnkyNTUgCisgICAgICAgIGFuZCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUgaGVyZSBm
cm9tIFNpbXBsZUNvbG9yIHRvIG1ha2UgaXQgY2xlYXIgd2hlcmUKKyAgICAgICAgZ2VuZXJhbCBo
ZWxwZXIgZnVuY3Rpb25zIGNhbiBnby4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3kgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuZGVkQ29sb3I6OmNoYW5uZWxzIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIGZv
ciByZW5hbWUgb2YgRmxvYXRDb21wb25lbnRzIHRvIENvbG9yQ29tcG9uZW50czxmbG9hdD4uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tSFNMQSk6CisgICAgICAgIFVzZSBzdHJ1Y3R1cmVk
IGJpbmRpbmdzIGFuZCBzaW1wbGlmeSBjb2RlLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhc3RNdWx0aXBseUJ5MjU1KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhc3REaXZpZGVCeTI1NSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUpOiBEZWxldGVkLgor
ICAgICAgICBBcyBub3RlZCBhYm92ZSwgbW92ZWQgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbCwg
ZmFzdE11bHRpcGx5QnkyNTUsIGZhc3REaXZpZGVCeTI1NSAKKyAgICAgICAgYW5kIGNvbG9yRmxv
YXRUb1NpbXBsZUNvbG9yQnl0ZSB0byBDb2xvclV0aWxpdGllcy5oCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICBVcGRhdGUg
Zm9yIHJlbmFtZSBvZiBGbG9hdENvbXBvbmVudHMgdG8gQ29sb3JDb21wb25lbnRzPGZsb2F0Pi4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Ynl0ZU9mZnNldE9mUGl4ZWwpOgorICAgICAgICBNb3Zl
ZCBieXRlT2Zmc2V0T2ZQaXhlbCBoZXJlIGZyb20gQ29sb3JVdGlsaXRpZXMuIFRoaXMgZmlsZSBp
cyB0aGUgb25seSB1c2VyCisgICAgICAgIGFuZCBpdCB3YXNuJ3QgZ2VuZXJhbCBpbiBhIHdheSB0
aGF0IHdhcyBjbGVhciBmb3Igb3RoZXIgdXNlcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUgb2YgRmxvYXRDb21w
b25lbnRzIHRvIENvbG9yQ29tcG9uZW50czxmbG9hdD4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOgorICAgICAgICBBZGRlZC4gVXNlZCB0byBi
ZSBDb2xvckNvbXBvbmVudHM6OmZyb21SR0JBKCksIGJ1dCB3YXMgb25seSB1c2VkIGhlcmUKKyAg
ICAgICAgYW5kIGRpZG4ndCBzZWVtIGdlbmVyYWxseSB1c2VmdWwuCisKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIEFkZGVkLiBV
c2VkIHRvIGJlIENvbG9yQ29tcG9uZW50czo6dG9SR0JBKCksIGJ1dCB3YXMgb25seSB1c2VkIGhl
cmUKKyAgICAgICAgYW5kIGRpZG4ndCBzZWVtIGdlbmVyYWxseSB1c2VmdWwuCisgICAgICAgIAor
ICAgICAgICAoV2ViQ29yZTo6bWluT3JNYXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uRXh0
cmVtdW0pOgorICAgICAgICAoV2ViQ29yZTo6a2VybmVsRXh0cmVtdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgIFVwZGF0
ZSBmb3IgcmVuYW1lIG9mIEZsb2F0Q29tcG9uZW50cyB0byBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
IGFuZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgdG8gQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Q+
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpub2lzZTJEIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24gY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAg
IFVwZGF0ZSBmb3IgcmVuYW1lIG9mIEZsb2F0Q29tcG9uZW50cyB0byBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+IGFuZCBDb2xvckNvbXBvbmVudHMKKyAgICAgICAgdG8gQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3Q+LiBBbHNvIHJlbmFtZXMgdG9Db2xvckNvbXBvbmVudHMgdG8gdG9JbnRCYXNlZENvbG9y
Q29tcG9uZW50cworICAgICAgICBhcyB0aGUgZm9ybWVyIHdhcyBubyBsb25nZXIgc3BlY2lmaWMg
ZW5vdWdoLiBVcGRhdGVkIHRvIHVzZSBzdGQ6OmNsYW1wLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW52ZXJ0TGlnaHRuZXNz
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OmludmVyc2VUcmFuc2Zvcm1Db2xvciBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3Ig
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNm
b3JtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0
cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
OjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICBVcGRhdGUgZm9yIHJlbmFt
ZSBvZiBGbG9hdENvbXBvbmVudHMgdG8gQ29sb3JDb21wb25lbnRzPGZsb2F0Pi4KKwogMjAyMC0w
NS0yNyAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAgICAgICAg
RW1wdHkgYWx0IGF0dHJpYnV0ZSBkb2VzIG5vdCBpZ25vcmUgdGhlIGltYWdlIGZvciBhY2Nlc3Np
YmlsaXR5IGNsaWVudHMgaW4gU2FmYXJpLgpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lv
biAyNjIyMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDc5LDYgKzEwNzksNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQXVkaW9UcmFja1ByaXZhdGUuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MjIy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjMzOSw2ICsyMzM5LDcgQEAKIAkJN0M5QUNBQzIxRjNDRjFBRjAw
RjNBQTA5IC8qIEpTQ3J5cHRvUnNhS2V5QWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlBQ0FCMzFGM0NEQzAxMDBGM0FBMDkgLyogSlND
cnlwdG9Sc2FLZXlBbGdvcml0aG0uaCAqLzsgfTsKIAkJN0M5REJGRUUxQTlDNDlCMTAwMEQ2QjI1
IC8qIEpTSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzlEQkZFQzFBOUM0OUIxMDAwRDZCMjUgLyogSlNIVE1MQXR0
YWNobWVudEVsZW1lbnQuaCAqLzsgfTsKIAkJN0NBQzZBRTkyNDdGMDgyRjAwRTYxRDU5IC8qIENv
bG9yTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0FDNkFFODI0N0YwODIwMDBFNjFENTkgLyogQ29sb3JNYXRyaXguaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3Q0FDNkFGMDI0N0Y0MTEwMDBF
NjFENTkgLyogQ29sb3JDb21wb25lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Q0FDNkFFQzI0N0YxQzUxMDBFNjFENTkgLyogQ29sb3JDb21wb25l
bnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0NCNUNBNDAxRTUyNUM3MzAwRkFFRjEzIC8qIE1lZGlhUXVlcnlFeHByZXNzaW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0I1Q0EzRTFFNTI1QzZD
MDBGQUVGMTMgLyogTWVkaWFRdWVyeUV4cHJlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Q0JCQkNDNzFGNTYwNTgxMDA1RUZBQUMgLyog
RE9NTWF0cml4MkRJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Q0JCQkNDNjFGNTYwNTY4MDA1RUZBQUMgLyogRE9NTWF0cml4MkRJbml0LmggKi87
IH07CiAJCTdDQkJCQ0NBMUY1NjE3QzUwMDVFRkFBQyAvKiBKU0RPTU1hdHJpeDJESW5pdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCQkJDQzkxRjU2
MTdDMDAwNUVGQUFDIC8qIEpTRE9NTWF0cml4MkRJbml0LmggKi87IH07CkBAIC0xMDE2NSw2ICsx
MDE2Niw3IEBACiAJCTdDOURCRkVDMUE5QzQ5QjEwMDBENkIyNSAvKiBKU0hUTUxBdHRhY2htZW50
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxBdHRhY2ht
ZW50RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0FDNkFFNjI0N0Yw
ODFGMDBFNjFENTkgLyogQ29sb3JNYXRyaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3JN
YXRyaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0FDNkFFODI0N0YwODIw
MDBFNjFENTkgLyogQ29sb3JNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JNYXRyaXguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NBQzZBRUMyNDdGMUM1MTAwRTYxRDU5IC8q
IENvbG9yQ29tcG9uZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xv
ckNvbXBvbmVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCNUNBM0QxRTUy
NUM2QzAwRkFFRjEzIC8qIE1lZGlhUXVlcnlFeHByZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlFeHByZXNzaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCNUNBM0UxRTUyNUM2QzAwRkFFRjEzIC8qIE1lZGlhUXVl
cnlFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVl
cnlFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkE1QkE2MUYw
QjRCREUwMDM0RDc0NSAvKiBKU0RPTUNvbnZlcnRXZWJHTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0RPTUNvbnZlcnRXZWJHTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTQyMiw2ICsyNTQyNCw3IEBACiAJCQkJQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1h
cEltYWdlLmggKi8sCiAJCQkJQjI3NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAq
LywKIAkJCQlCMjc1MzUzOTBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCAqLywKKwkJCQk3Q0FD
NkFFQzI0N0YxQzUxMDBFNjFENTkgLyogQ29sb3JDb21wb25lbnRzLmggKi8sCiAJCQkJMzEwM0I3
REUxREIwMTU1NjAwOEJCODkwIC8qIENvbG9ySGFzaC5oICovLAogCQkJCTdDQUM2QUU2MjQ3RjA4
MUYwMEU2MUQ1OSAvKiBDb2xvck1hdHJpeC5jcHAgKi8sCiAJCQkJN0NBQzZBRTgyNDdGMDgyMDAw
RTYxRDU5IC8qIENvbG9yTWF0cml4LmggKi8sCkBAIC0zMjc5Nyw2ICszMjgwMCw3IEBACiAJCQkJ
QTUwNzFFODcxQzU2RDBFMTAwOTk1MUJFIC8qIFJlc291cmNlVXNhZ2VUaHJlYWQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQxODkzOEIyMjQyOUY5QjQwMDdGREM0MSAvKiBSZXRyaWV2ZVJlY29yZHNP
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjBBNTEyQjAyNkY3MDBDMUEzNTkgLyog
UmV2ZXJiLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Q0FDNkFGMDI0N0Y0MTEwMDBFNjFENTkgLyog
Q29sb3JDb21wb25lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjBBNzEyQjAyNkY3MDBD
MUEzNTkgLyogUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDMxNjBBOTEyQjAyNkY3MDBDMUEzNTkgLyogUmV2ZXJiQ29udm9sdmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRDMxNjBBQjEyQjAyNkY3MDBDMUEzNTkgLyogUmV2ZXJiQ29udm9sdmVyU3RhZ2Uu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAgQ29s
b3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBjb25zdAogICAgIHJldHVybiB7IHRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07CiB9CiAKLXN0ZDo6cGFpcjxDb2xvclNwYWNlLCBG
bG9hdENvbXBvbmVudHM+IENvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0Citz
dGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9y
U3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CiAg
ICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBhc0V4dGVuZGVkKCk7CkBAIC0zMTQsNyArMzE0
LDcgQEAgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gQwogICAgIH0KIAog
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYXNTaW1wbGVDb2xvcigpOwotICAgIHJldHVybiB7IENv
bG9yU3BhY2U6OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYs
IGIgLyAyNTUuMGYsICBhIC8gMjU1LjBmIH0gfTsKKyAgICByZXR1cm4geyBDb2xvclNwYWNlOjpT
UkdCLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAv
IDI1NS4wZiwgIGEgLyAyNTUuMGYgfSB9OwogfQogCiBTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdApAQCAtMzI3LDcgKzMyNyw3IEBAIFNpbXBsZUNvbG9y
IENvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3MKICAgICByZXR1cm4gYXNTaW1wbGVDb2xvcigp
OwogfQogCi1GbG9hdENvbXBvbmVudHMgQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSBj
b25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpIGNvbnN0CiB7CiAgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOwogICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjIyMjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw4ICs1MSw2IEBAIHR5cGVkZWYgc3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZsb2F0Q29tcG9uZW50czsKLQogY2xhc3MgQ29s
b3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTUwLDEzICsx
NDgsMTMgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gY29sb3JT
cGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8
Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gY29sb3JTcGFjZUFuZENvbXBvbmVu
dHMoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3Bh
Y2UgY29sb3JzIGludG8gc1JHQi4KICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xvciB0b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQg
bm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB0b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCkgY29uc3Q7CiAKICAgICBDb2xvciBsaWdodCgpIGNvbnN0OwogICAgIENvbG9yIGRhcmsoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9u
ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29tcG9uZW50cy5oCShyZXZpc2lvbiAyNjIyMTkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6MjYyMjE5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKKyAgICBGbG9hdENvbXBvbmVu
dHMoZmxvYXQgYSA9IDAsIGZsb2F0IGIgPSAwLCBmbG9hdCBjID0gMCwgZmxvYXQgZCA9IDApCisg
ICAgeworICAgICAgICBjb21wb25lbnRzWzBdID0gYTsKKyAgICAgICAgY29tcG9uZW50c1sxXSA9
IGI7CisgICAgICAgIGNvbXBvbmVudHNbMl0gPSBjOworICAgICAgICBjb21wb25lbnRzWzNdID0g
ZDsKKyAgICB9CisKKyAgICBGbG9hdENvbXBvbmVudHMoY29uc3Qgc3RkOjphcnJheTxmbG9hdCwg
ND4mIHZhbHVlcykKKyAgICB7CisgICAgICAgIGNvbXBvbmVudHNbMF0gPSB2YWx1ZXNbMF07Cisg
ICAgICAgIGNvbXBvbmVudHNbMV0gPSB2YWx1ZXNbMV07CisgICAgICAgIGNvbXBvbmVudHNbMl0g
PSB2YWx1ZXNbMl07CisgICAgICAgIGNvbXBvbmVudHNbM10gPSB2YWx1ZXNbM107CisgICAgfQor
CisgICAgRmxvYXRDb21wb25lbnRzJiBvcGVyYXRvcis9KGNvbnN0IEZsb2F0Q29tcG9uZW50cyYg
cmhzKQorICAgIHsKKyAgICAgICAgY29tcG9uZW50c1swXSArPSByaHMuY29tcG9uZW50c1swXTsK
KyAgICAgICAgY29tcG9uZW50c1sxXSArPSByaHMuY29tcG9uZW50c1sxXTsKKyAgICAgICAgY29t
cG9uZW50c1syXSArPSByaHMuY29tcG9uZW50c1syXTsKKyAgICAgICAgY29tcG9uZW50c1szXSAr
PSByaHMuY29tcG9uZW50c1szXTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAg
IEZsb2F0Q29tcG9uZW50cyBvcGVyYXRvcisoZmxvYXQgcmhzKSBjb25zdAorICAgIHsKKyAgICAg
ICAgRmxvYXRDb21wb25lbnRzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0g
PSBjb21wb25lbnRzWzBdICsgcmhzOworICAgICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9IGNv
bXBvbmVudHNbMV0gKyByaHM7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gY29tcG9u
ZW50c1syXSArIHJoczsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBjb21wb25lbnRz
WzNdICsgcmhzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEZsb2F0Q29t
cG9uZW50cyBvcGVyYXRvci8oZmxvYXQgZGVub21pbmF0b3IpIGNvbnN0CisgICAgeworICAgICAg
ICBGbG9hdENvbXBvbmVudHMgcmVzdWx0OworICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9
IGNvbXBvbmVudHNbMF0gLyBkZW5vbWluYXRvcjsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNb
MV0gPSBjb21wb25lbnRzWzFdIC8gZGVub21pbmF0b3I7CisgICAgICAgIHJlc3VsdC5jb21wb25l
bnRzWzJdID0gY29tcG9uZW50c1syXSAvIGRlbm9taW5hdG9yOworICAgICAgICByZXN1bHQuY29t
cG9uZW50c1szXSA9IGNvbXBvbmVudHNbM10gLyBkZW5vbWluYXRvcjsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBGbG9hdENvbXBvbmVudHMgb3BlcmF0b3IqKGZsb2F0IGZh
Y3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIEZsb2F0Q29tcG9uZW50cyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5jb21wb25lbnRzWzBdID0gY29tcG9uZW50c1swXSAqIGZhY3RvcjsKKyAgICAg
ICAgcmVzdWx0LmNvbXBvbmVudHNbMV0gPSBjb21wb25lbnRzWzFdICogZmFjdG9yOworICAgICAg
ICByZXN1bHQuY29tcG9uZW50c1syXSA9IGNvbXBvbmVudHNbMl0gKiBmYWN0b3I7CisgICAgICAg
IHJlc3VsdC5jb21wb25lbnRzWzNdID0gY29tcG9uZW50c1szXSAqIGZhY3RvcjsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBGbG9hdENvbXBvbmVudHMgYWJzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEZsb2F0Q29tcG9uZW50cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5j
b21wb25lbnRzWzBdID0gZmFicyhjb21wb25lbnRzWzBdKTsKKyAgICAgICAgcmVzdWx0LmNvbXBv
bmVudHNbMV0gPSBmYWJzKGNvbXBvbmVudHNbMV0pOworICAgICAgICByZXN1bHQuY29tcG9uZW50
c1syXSA9IGZhYnMoY29tcG9uZW50c1syXSk7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzNd
ID0gZmFicyhjb21wb25lbnRzWzNdKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAgIGZsb2F0IGdldCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gY29tcG9uZW50c1tOXTsKKyAgICB9CisKKyAgICBzdGQ6OmFycmF5
PGZsb2F0LCA0PiBjb21wb25lbnRzOworfTsKKworYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNv
bnN0IEZsb2F0Q29tcG9uZW50cyYsIGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOworCitzdHJ1Y3Qg
Q29sb3JDb21wb25lbnRzIHsKKyAgICBDb2xvckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25l
bnRzJik7CisgICAgCisgICAgc3RhdGljIENvbG9yQ29tcG9uZW50cyBmcm9tUkdCQSh1bnNpZ25l
ZCBwaXhlbCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2xvckNvbXBvbmVudHMoKHBpeGVsID4+
IDI0KSAmIDB4RkYsIChwaXhlbCA+PiAxNikgJiAweEZGLCAocGl4ZWwgPj4gOCkgJiAweEZGLCBw
aXhlbCAmIDB4RkYpOworICAgIH0KKyAgICAKKyAgICBDb2xvckNvbXBvbmVudHModWludDhfdCBh
ID0gMCwgdWludDhfdCBiID0gMCwgdWludDhfdCBjID0gMCwgdWludDhfdCBkID0gMCkKKyAgICB7
CisgICAgICAgIGNvbXBvbmVudHNbMF0gPSBhOworICAgICAgICBjb21wb25lbnRzWzFdID0gYjsK
KyAgICAgICAgY29tcG9uZW50c1syXSA9IGM7CisgICAgICAgIGNvbXBvbmVudHNbM10gPSBkOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0b1JHQkEoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbXBvbmVudHNbMF0gPDwgMjQgfCBjb21wb25lbnRzWzFdIDw8IDE2IHwgY29tcG9u
ZW50c1syXSA8PCA4IHwgY29tcG9uZW50c1szXTsKKyAgICB9CisKKyAgICBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDQ+IGNvbXBvbmVudHM7Cit9OworCitpbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNv
bXBvbmVudE1heChjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50
cyYgYikKK3sKKyAgICByZXR1cm4geworICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMF0s
IGIuY29tcG9uZW50c1swXSksCisgICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1sxXSwgYi5j
b21wb25lbnRzWzFdKSwKKyAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzJdLCBiLmNvbXBv
bmVudHNbMl0pLAorICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbM10sIGIuY29tcG9uZW50
c1szXSkKKyAgICB9OworfQorCitpbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1p
bihjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK3sK
KyAgICByZXR1cm4geworICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9u
ZW50c1swXSksCisgICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1sxXSwgYi5jb21wb25lbnRz
WzFdKSwKKyAgICAgICAgc3RkOjptaW4oYS5jb21wb25lbnRzWzJdLCBiLmNvbXBvbmVudHNbMl0p
LAorICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbM10sIGIuY29tcG9uZW50c1szXSkKKyAg
ICB9OworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yQ29tcG9uZW50cyYg
YSwgY29uc3QgQ29sb3JDb21wb25lbnRzJiBiKQoreworICAgIHJldHVybiBhLmNvbXBvbmVudHMg
PT0gYi5jb21wb25lbnRzOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9y
Q29tcG9uZW50cyYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzJiBiKQoreworICAgIHJldHVybiAh
KGEgPT0gYik7Cit9CisKK2lubGluZSB1aW50OF90IGNsYW1wZWRDb2xvckNvbXBvbmVudChmbG9h
dCBmKQoreworICAgIC8vIFNlZSBhbHNvIGNvbG9yRmxvYXRUb1JHQkFCeXRlKCkuCisgICAgcmV0
dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwg
MjU1KTsKK30KKworaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgs
IHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGJ5
dGVzUGVyUGl4ZWwgPSA0OworICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dC
eXRlczsKK30KKworLy8gMC0xIGNvbXBvbmVudHMsIHJlc3VsdCBpcyBjbGFtcGVkLgorZmxvYXQg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7CitmbG9hdCByZ2JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGZsb2F0KTsKKworRmxvYXRDb21wb25lbnRzIHJnYlRvTGluZWFyQ29tcG9uZW50
cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKK0Zsb2F0Q29tcG9uZW50cyBsaW5lYXJUb1JHQkNv
bXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7CisKK0Zsb2F0Q29tcG9uZW50cyBwM1Rv
U1JHQihjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKK0Zsb2F0Q29tcG9uZW50cyBzUkdCVG9QMyhj
b25zdCBGbG9hdENvbXBvbmVudHMmKTsKKworV0VCQ09SRV9FWFBPUlQgRmxvYXRDb21wb25lbnRz
IHNSR0JUb0hTTChjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKK1dFQkNPUkVfRVhQT1JUIEZsb2F0
Q29tcG9uZW50cyBoc2xUb1NSR0IoY29uc3QgRmxvYXRDb21wb25lbnRzJik7CisKK2Zsb2F0IGxp
Z2h0bmVzcyhjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50cyk7CitmbG9hdCBs
dW1pbmFuY2UoY29uc3QgRmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVudHMpOworZmxvYXQg
Y29udHJhc3RSYXRpbyhjb25zdCBGbG9hdENvbXBvbmVudHMmLCBjb25zdCBGbG9hdENvbXBvbmVu
dHMmKTsKKworRmxvYXRDb21wb25lbnRzIHByZW11bHRpcGxpZWQoY29uc3QgRmxvYXRDb21wb25l
bnRzJiBzUkdCQ29tcG9udGVudHMpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVz
cGFjZSBzdGQgeworCit0ZW1wbGF0ZTw+CitjbGFzcyB0dXBsZV9zaXplPFdlYkNvcmU6OkZsb2F0
Q29tcG9uZW50cz4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwg
ND4geworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8
TiwgV2ViQ29yZTo6RmxvYXRDb21wb25lbnRzPiB7CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9
IGZsb2F0OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JDb21wb25lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3JDb21wb25lbnRzLmgJKHJldmlzaW9uIDI2MjIxOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwyNyArMjgsMjMgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8YXJy
YXk+CiAjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHR1cGxlPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0cnVjdCBGbG9hdENvbXBvbmVudHMgewotICAgIEZsb2F0Q29tcG9uZW50cyhm
bG9hdCBhID0gMCwgZmxvYXQgYiA9IDAsIGZsb2F0IGMgPSAwLCBmbG9hdCBkID0gMCkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29sb3JDb21wb25lbnRzIHsKKyAgICBDb2xvckNvbXBv
bmVudHMoVCBhID0gMCwgVCBiID0gMCwgVCBjID0gMCwgVCBkID0gMCkKKyAgICAgICAgOiBjb21w
b25lbnRzIHsgYSwgYiwgYywgZCB9CiAgICAgewotICAgICAgICBjb21wb25lbnRzWzBdID0gYTsK
LSAgICAgICAgY29tcG9uZW50c1sxXSA9IGI7Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSBjOwot
ICAgICAgICBjb21wb25lbnRzWzNdID0gZDsKICAgICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMo
Y29uc3Qgc3RkOjphcnJheTxmbG9hdCwgND4mIHZhbHVlcykKKyAgICBDb2xvckNvbXBvbmVudHMo
Y29uc3Qgc3RkOjphcnJheTxULCA0PiYgdmFsdWVzKQorICAgICAgICA6IGNvbXBvbmVudHMgeyB2
YWx1ZXMgfQogICAgIHsKLSAgICAgICAgY29tcG9uZW50c1swXSA9IHZhbHVlc1swXTsKLSAgICAg
ICAgY29tcG9uZW50c1sxXSA9IHZhbHVlc1sxXTsKLSAgICAgICAgY29tcG9uZW50c1syXSA9IHZh
bHVlc1syXTsKLSAgICAgICAgY29tcG9uZW50c1szXSA9IHZhbHVlc1szXTsKICAgICB9CiAKLSAg
ICBGbG9hdENvbXBvbmVudHMmIG9wZXJhdG9yKz0oY29uc3QgRmxvYXRDb21wb25lbnRzJiByaHMp
CisgICAgQ29sb3JDb21wb25lbnRzJiBvcGVyYXRvcis9KGNvbnN0IENvbG9yQ29tcG9uZW50cyYg
cmhzKQogICAgIHsKICAgICAgICAgY29tcG9uZW50c1swXSArPSByaHMuY29tcG9uZW50c1swXTsK
ICAgICAgICAgY29tcG9uZW50c1sxXSArPSByaHMuY29tcG9uZW50c1sxXTsKQEAgLTU3LDgyICs1
Myw1OCBAQCBzdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIEZsb2F0Q29tcG9uZW50cyBvcGVyYXRvcisoZmxvYXQgcmhzKSBjb25zdAor
ICAgIENvbG9yQ29tcG9uZW50cyBvcGVyYXRvcisoVCByaHMpIGNvbnN0CiAgICAgewotICAgICAg
ICBGbG9hdENvbXBvbmVudHMgcmVzdWx0OwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9
IGNvbXBvbmVudHNbMF0gKyByaHM7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFdID0gY29t
cG9uZW50c1sxXSArIHJoczsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMl0gPSBjb21wb25l
bnRzWzJdICsgcmhzOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9IGNvbXBvbmVudHNb
M10gKyByaHM7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICBjb21wb25lbnRzWzBdICsgcmhzLAorICAgICAgICAgICAgY29tcG9uZW50c1sxXSAr
IHJocywKKyAgICAgICAgICAgIGNvbXBvbmVudHNbMl0gKyByaHMsCisgICAgICAgICAgICBjb21w
b25lbnRzWzNdICsgcmhzCisgICAgICAgIH07CiAgICAgfQogCi0gICAgRmxvYXRDb21wb25lbnRz
IG9wZXJhdG9yLyhmbG9hdCBkZW5vbWluYXRvcikgY29uc3QKKyAgICBDb2xvckNvbXBvbmVudHMg
b3BlcmF0b3IvKFQgZGVub21pbmF0b3IpIGNvbnN0CiAgICAgewotICAgICAgICBGbG9hdENvbXBv
bmVudHMgcmVzdWx0OwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNb
MF0gLyBkZW5vbWluYXRvcjsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMV0gPSBjb21wb25l
bnRzWzFdIC8gZGVub21pbmF0b3I7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gY29t
cG9uZW50c1syXSAvIGRlbm9taW5hdG9yOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9
IGNvbXBvbmVudHNbM10gLyBkZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGNvbXBvbmVudHNbMF0gLyBkZW5vbWluYXRvciwK
KyAgICAgICAgICAgIGNvbXBvbmVudHNbMV0gLyBkZW5vbWluYXRvciwKKyAgICAgICAgICAgIGNv
bXBvbmVudHNbMl0gLyBkZW5vbWluYXRvciwKKyAgICAgICAgICAgIGNvbXBvbmVudHNbM10gLyBk
ZW5vbWluYXRvcgorICAgICAgICB9OwogICAgIH0KIAotICAgIEZsb2F0Q29tcG9uZW50cyBvcGVy
YXRvciooZmxvYXQgZmFjdG9yKSBjb25zdAorICAgIENvbG9yQ29tcG9uZW50cyBvcGVyYXRvcioo
VCBmYWN0b3IpIGNvbnN0CiAgICAgewotICAgICAgICBGbG9hdENvbXBvbmVudHMgcmVzdWx0Owot
ICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gKiBmYWN0b3I7Ci0g
ICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFdID0gY29tcG9uZW50c1sxXSAqIGZhY3RvcjsKLSAg
ICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMl0gPSBjb21wb25lbnRzWzJdICogZmFjdG9yOwotICAg
ICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9IGNvbXBvbmVudHNbM10gKiBmYWN0b3I7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBjb21wb25l
bnRzWzBdICogZmFjdG9yLAorICAgICAgICAgICAgY29tcG9uZW50c1sxXSAqIGZhY3RvciwKKyAg
ICAgICAgICAgIGNvbXBvbmVudHNbMl0gKiBmYWN0b3IsCisgICAgICAgICAgICBjb21wb25lbnRz
WzNdICogZmFjdG9yCisgICAgICAgIH07CiAgICAgfQogCi0gICAgRmxvYXRDb21wb25lbnRzIGFi
cygpIGNvbnN0CisgICAgQ29sb3JDb21wb25lbnRzIGFicygpIGNvbnN0CiAgICAgewotICAgICAg
ICBGbG9hdENvbXBvbmVudHMgcmVzdWx0OwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9
IGZhYnMoY29tcG9uZW50c1swXSk7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFdID0gZmFi
cyhjb21wb25lbnRzWzFdKTsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMl0gPSBmYWJzKGNv
bXBvbmVudHNbMl0pOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9IGZhYnMoY29tcG9u
ZW50c1szXSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICBzdGQ6OmFicyhjb21wb25lbnRzWzBdKSwKKyAgICAgICAgICAgIHN0ZDo6YWJzKGNv
bXBvbmVudHNbMV0pLAorICAgICAgICAgICAgc3RkOjphYnMoY29tcG9uZW50c1syXSksCisgICAg
ICAgICAgICBzdGQ6OmFicyhjb21wb25lbnRzWzNdKQorICAgICAgICB9OwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+Ci0gICAgZmxvYXQgZ2V0KCkgY29uc3QKKyAgICBUIGdl
dCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gY29tcG9uZW50c1tOXTsKICAgICB9CiAK
LSAgICBzdGQ6OmFycmF5PGZsb2F0LCA0PiBjb21wb25lbnRzOworICAgIHN0ZDo6YXJyYXk8VCwg
ND4gY29tcG9uZW50czsKIH07CiAKLWJvb2wgYXJlRXNzZW50aWFsbHlFcXVhbChjb25zdCBGbG9h
dENvbXBvbmVudHMmLCBjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLQotc3RydWN0IENvbG9yQ29t
cG9uZW50cyB7Ci0gICAgQ29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwot
ICAgIAotICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHMgZnJvbVJHQkEodW5zaWduZWQgcGl4ZWwp
Ci0gICAgewotICAgICAgICByZXR1cm4gQ29sb3JDb21wb25lbnRzKChwaXhlbCA+PiAyNCkgJiAw
eEZGLCAocGl4ZWwgPj4gMTYpICYgMHhGRiwgKHBpeGVsID4+IDgpICYgMHhGRiwgcGl4ZWwgJiAw
eEZGKTsKLSAgICB9Ci0gICAgCi0gICAgQ29sb3JDb21wb25lbnRzKHVpbnQ4X3QgYSA9IDAsIHVp
bnQ4X3QgYiA9IDAsIHVpbnQ4X3QgYyA9IDAsIHVpbnQ4X3QgZCA9IDApCi0gICAgewotICAgICAg
ICBjb21wb25lbnRzWzBdID0gYTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9IGI7Ci0gICAgICAg
IGNvbXBvbmVudHNbMl0gPSBjOwotICAgICAgICBjb21wb25lbnRzWzNdID0gZDsKLSAgICB9Ci0g
ICAgCi0gICAgdW5zaWduZWQgdG9SR0JBKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
b21wb25lbnRzWzBdIDw8IDI0IHwgY29tcG9uZW50c1sxXSA8PCAxNiB8IGNvbXBvbmVudHNbMl0g
PDwgOCB8IGNvbXBvbmVudHNbM107Ci0gICAgfQotCi0gICAgc3RkOjphcnJheTx1aW50OF90LCA0
PiBjb21wb25lbnRzOwotfTsKIAotaW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21wb25lbnRN
YXgoY29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIENvbG9yQ29tcG9uZW50czxUPiBwZXJDb21wb25l
bnRNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8
VD4mIGIpCiB7CiAgICAgcmV0dXJuIHsKICAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzBd
LCBiLmNvbXBvbmVudHNbMF0pLApAQCAtMTQyLDcgKzExNCw4IEBAIGlubGluZSBDb2xvckNvbXBv
bmVudHMgcGVyQ29tcG9uZW50TWF4KGMKICAgICB9OwogfQogCi1pbmxpbmUgQ29sb3JDb21wb25l
bnRzIHBlckNvbXBvbmVudE1pbihjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9y
Q29tcG9uZW50cyYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgQ29sb3JDb21wb25l
bnRzPFQ+IHBlckNvbXBvbmVudE1pbihjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGEsIGNvbnN0
IENvbG9yQ29tcG9uZW50czxUPiYgYikKIHsKICAgICByZXR1cm4gewogICAgICAgICBzdGQ6Om1p
bihhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9uZW50c1swXSksCkBAIC0xNTIsNTkgKzEyNSwzMCBA
QCBpbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1pbihjCiAgICAgfTsKIH0KIAot
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENv
bG9yQ29tcG9uZW50cyYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRz
PFQ+JiBiKQogewogICAgIHJldHVybiBhLmNvbXBvbmVudHMgPT0gYi5jb21wb25lbnRzOwogfQog
Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29uc3Qg
Q29sb3JDb21wb25lbnRzJiBiKQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVu
dHM8VD4mIGIpCiB7CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotaW5saW5lIHVpbnQ4X3Qg
Y2xhbXBlZENvbG9yQ29tcG9uZW50KGZsb2F0IGYpCi17Ci0gICAgLy8gU2VlIGFsc28gY29sb3JG
bG9hdFRvUkdCQUJ5dGUoKS4KLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+
KGxyb3VuZGYoMjU1LjBmICogZikpLCAwLCAyNTUpOwotfQotCi1pbmxpbmUgdW5zaWduZWQgYnl0
ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMp
Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7Ci0gICAgcmV0dXJuIHgg
KiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOwotfQotCi0vLyAwLTEgY29tcG9uZW50cywg
cmVzdWx0IGlzIGNsYW1wZWQuCi1mbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0
KTsKLWZsb2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwotCi1GbG9hdENvbXBv
bmVudHMgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotRmxv
YXRDb21wb25lbnRzIGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMm
KTsKLQotRmxvYXRDb21wb25lbnRzIHAzVG9TUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwot
RmxvYXRDb21wb25lbnRzIHNSR0JUb1AzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotCi1XRUJD
T1JFX0VYUE9SVCBGbG9hdENvbXBvbmVudHMgc1JHQlRvSFNMKGNvbnN0IEZsb2F0Q29tcG9uZW50
cyYpOwotV0VCQ09SRV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIGhzbFRvU1JHQihjb25zdCBGbG9h
dENvbXBvbmVudHMmKTsKLQotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYg
c1JHQkNvbXBvbnRlbnRzKTsKLWZsb2F0IGx1bWluYW5jZShjb25zdCBGbG9hdENvbXBvbmVudHMm
IHNSR0JDb21wb250ZW50cyk7Ci1mbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IEZsb2F0Q29tcG9u
ZW50cyYsIGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotCi1GbG9hdENvbXBvbmVudHMgcHJlbXVs
dGlwbGllZChjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50cyk7Ci0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIHN0ZCB7CiAKLXRlbXBsYXRlPD4KLWNsYXNz
IHR1cGxlX3NpemU8V2ViQ29yZTo6RmxvYXRDb21wb25lbnRzPiA6IHB1YmxpYyBzdGQ6OmludGVn
cmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCA0PiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpDb2xvckNvbXBvbmVudHM8VD4+IDogcHVibGljIHN0ZDo6
aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDQ+IHsKIH07CiAKLXRlbXBsYXRlPHN0ZDo6
c2l6ZV90IE4+Ci1jbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50
cz4gewordGVtcGxhdGU8c3RkOjpzaXplX3QgTiwgdHlwZW5hbWUgVD4KK2NsYXNzIHR1cGxlX2Vs
ZW1lbnQ8TiwgV2ViQ29yZTo6Q29sb3JDb21wb25lbnRzPFQ+PiB7CiBwdWJsaWM6Ci0gICAgdXNp
bmcgdHlwZSA9IGZsb2F0OworICAgIHVzaW5nIHR5cGUgPSBUOwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmNwcAkocmV2
aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JN
YXRyaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3JNYXRyaXguaCIKIAorI2luY2x1ZGUgIkNvbG9yQ29tcG9u
ZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTE1OCw3ICsxNTksNyBAQCBDb2xvck1hdHJpeCBDb2xvck1hdHJpeDo6c2VwaWFNYXRy
aXgoZmxvCiAgICAgcmV0dXJuIG1hdHJpeDsKIH0KIAotdm9pZCBDb2xvck1hdHJpeDo6dHJhbnNm
b3JtQ29sb3JDb21wb25lbnRzKEZsb2F0Q29tcG9uZW50cyYgY29sb3JDb21wb25lbnRzKSBjb25z
dAordm9pZCBDb2xvck1hdHJpeDo6dHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9u
ZW50czxmbG9hdD4mIGNvbG9yQ29tcG9uZW50cykgY29uc3QKIHsKICAgICBhdXRvIFtyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvckNvbXBvbmVudHM7CiAKQEAgLTE2OCw3ICsxNjksNyBA
QCB2b2lkIENvbG9yTWF0cml4Ojp0cmFuc2Zvcm1Db2xvckNvbXBvbmVuCiAgICAgY29sb3JDb21w
b25lbnRzLmNvbXBvbmVudHNbM10gPSBtX21hdHJpeFszXVswXSAqIHJlZCArIG1fbWF0cml4WzNd
WzFdICogZ3JlZW4gKyBtX21hdHJpeFszXVsyXSAqIGJsdWUgKyBtX21hdHJpeFszXVszXSAqIGFs
cGhhICsgbV9tYXRyaXhbM11bNF07CiB9CiAKLUZsb2F0Q29tcG9uZW50cyBDb2xvck1hdHJpeDo6
dHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBjb2xvckNv
bXBvbmVudHMpIGNvbnN0CitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IENvbG9yTWF0cml4Ojp0cmFu
c2Zvcm1lZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb2xv
ckNvbXBvbmVudHMpIGNvbnN0CiB7CiAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFd
ID0gY29sb3JDb21wb25lbnRzOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvck1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yTWF0cml4LmgJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgRmxvYXRDb21wb25l
bnRzOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yQ29tcG9uZW50czsKIAogLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGxpa2VseSBiZSByZXBsYWNlZCBieSBhIGdlbmVyaWMgbWF0cml4
IGNsYXNzLiBPdGhlciB0aGFuCiAvLyB0aGUgc3BlY2lmaWMgbWF0cml4IGNvbnN0dWN0b3JzLCB0
aGVyZSBpcyBub3RoaW5nIGNvbG9yIHNwZWNpZmljIGFib3V0IHRoaXMuCkBAIC00Myw4ICs0Myw4
IEBAIHB1YmxpYzoKICAgICBDb2xvck1hdHJpeCgpOwogICAgIENvbG9yTWF0cml4KGNvbnN0IGZs
b2F0WzIwXSk7CiAgICAgCi0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvckNvbXBvbmVudHMoRmxvYXRD
b21wb25lbnRzJikgY29uc3Q7Ci0gICAgRmxvYXRDb21wb25lbnRzIHRyYW5zZm9ybWVkQ29sb3JD
b21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpIGNvbnN0OworICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdDsKKyAgICBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IHRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIG1ha2VJ
ZGVudGl0eSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JV
dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwyMCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb2xvclV0
aWxpdGllcy5oIgogCisjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29s
b3JNYXRyaXguaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNvbG9yQ29tcG9uZW50czo6Q29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29t
cG9uZW50cyYgZmxvYXRDb21wb25lbnRzKQotewotICAgIGNvbXBvbmVudHNbMF0gPSBjbGFtcGVk
Q29sb3JDb21wb25lbnQoZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0pOwotICAgIGNvbXBv
bmVudHNbMV0gPSBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxvYXRDb21wb25lbnRzLmNvbXBvbmVu
dHNbMV0pOwotICAgIGNvbXBvbmVudHNbMl0gPSBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxvYXRD
b21wb25lbnRzLmNvbXBvbmVudHNbMl0pOwotICAgIGNvbXBvbmVudHNbM10gPSBjbGFtcGVkQ29s
b3JDb21wb25lbnQoZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbM10pOwotfQotCi1ib29sIGFy
ZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgRmxvYXRDb21wb25lbnRzJiBhLCBjb25zdCBGbG9hdENv
bXBvbmVudHMmIGIpCitib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgYikKIHsKICAgICBy
ZXR1cm4gV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGEuY29tcG9uZW50c1swXSwgYi5jb21wb25l
bnRzWzBdKQogICAgICAgICAmJiBXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoYS5jb21wb25lbnRz
WzFdLCBiLmNvbXBvbmVudHNbMV0pCkBAIC02NCw3ICs1Niw3IEBAIGZsb2F0IHJnYlRvTGluZWFy
Q29sb3JDb21wb25lbnQoZmxvYXQgYykKICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oc3RkOjpw
b3coKGMgKyAwLjA1NWYpIC8gMS4wNTVmLCAyLjRmKSwgMCwgMSk7CiB9CiAKLUZsb2F0Q29tcG9u
ZW50cyByZ2JUb0xpbmVhckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBSR0JDb2xv
cikKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIFJHQkNvbG9yKQogewogICAgIHJldHVybiB7CiAgICAgICAg
IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoUkdCQ29sb3IuY29tcG9uZW50c1swXSksCkBAIC03
NCw3ICs2Niw3IEBAIEZsb2F0Q29tcG9uZW50cyByZ2JUb0xpbmVhckNvbXBvbmVudHMoY28KICAg
ICB9OwogfQogCi1GbG9hdENvbXBvbmVudHMgbGluZWFyVG9SR0JDb21wb25lbnRzKGNvbnN0IEZs
b2F0Q29tcG9uZW50cyYgbGluZWFyUkdCKQorQ29sb3JDb21wb25lbnRzPGZsb2F0PiBsaW5lYXJU
b1JHQkNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgbGluZWFyUkdCKQog
ewogICAgIHJldHVybiB7CiAgICAgICAgIGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQobGluZWFy
UkdCLmNvbXBvbmVudHNbMF0pLApAQCAtODQsNyArNzYsNyBAQCBGbG9hdENvbXBvbmVudHMgbGlu
ZWFyVG9SR0JDb21wb25lbnRzKGNvCiAgICAgfTsKIH0KIAotc3RhdGljIEZsb2F0Q29tcG9uZW50
cyB4eXpUb0xpbmVhclNSR0IoY29uc3QgRmxvYXRDb21wb25lbnRzJiBYWVpDb21wb25lbnRzKQor
c3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4geHl6VG9MaW5lYXJTUkdCKGNvbnN0IENvbG9y
Q29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCiB7CiAgICAgLy8gaHR0cHM6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvU1JHQgogICAgIC8vIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20u
Y29tL2luZGV4Lmh0bWw/RXFuX1JHQl9YWVpfTWF0cml4Lmh0bWwKQEAgLTk4LDcgKzkwLDcgQEAg
c3RhdGljIEZsb2F0Q29tcG9uZW50cyB4eXpUb0xpbmVhclNSR0IoYwogICAgIHJldHVybiB4eXpU
b0xpbmVhclNSR0JNYXRyaXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50
cyk7CiB9CiAKLXN0YXRpYyBGbG9hdENvbXBvbmVudHMgbGluZWFyU1JHQlRvWFlaKGNvbnN0IEZs
b2F0Q29tcG9uZW50cyYgWFlaQ29tcG9uZW50cykKK3N0YXRpYyBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IGxpbmVhclNSR0JUb1hZWihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21w
b25lbnRzKQogewogICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NSR0IKICAg
ICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9SR0JfWFla
X01hdHJpeC5odG1sCkBAIC0xMTIsNyArMTA0LDcgQEAgc3RhdGljIEZsb2F0Q29tcG9uZW50cyBs
aW5lYXJTUkdCVG9YWVooYwogICAgIHJldHVybiBsaW5lYXJTUkdCVG9YWVpNYXRyaXgudHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CiB9CiAKLXN0YXRpYyBGbG9hdENv
bXBvbmVudHMgWFlaVG9MaW5lYXJQMyhjb25zdCBGbG9hdENvbXBvbmVudHMmIFhZWkNvbXBvbmVu
dHMpCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBYWVpUb0xpbmVhclAzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCiB7CiAgICAgLy8gaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2RlCiAgICAgY29u
c3QgZmxvYXQgdmFsdWVzW10gPSB7CkBAIC0xMjUsNyArMTE3LDcgQEAgc3RhdGljIEZsb2F0Q29t
cG9uZW50cyBYWVpUb0xpbmVhclAzKGNvbgogICAgIHJldHVybiB4eXpUb0xpbmVhclNSR0JNYXRy
aXgudHJhbnNmb3JtZWRDb2xvckNvbXBvbmVudHMoWFlaQ29tcG9uZW50cyk7CiB9CiAKLXN0YXRp
YyBGbG9hdENvbXBvbmVudHMgbGluZWFyUDNUb1hZWihjb25zdCBGbG9hdENvbXBvbmVudHMmIFhZ
WkNvbXBvbmVudHMpCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBsaW5lYXJQM1RvWFla
KGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIFhZWkNvbXBvbmVudHMpCiB7CiAgICAgLy8g
aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci8jY29sb3ItY29udmVyc2lvbi1jb2Rl
CiAgICAgY29uc3QgZmxvYXQgdmFsdWVzW10gPSB7CkBAIC0xMzgsNyArMTMwLDcgQEAgc3RhdGlj
IEZsb2F0Q29tcG9uZW50cyBsaW5lYXJQM1RvWFlaKGNvbgogICAgIHJldHVybiBsaW5lYXJQM1Rv
WFlaTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKFhZWkNvbXBvbmVudHMpOwogfQog
Ci1GbG9hdENvbXBvbmVudHMgcDNUb1NSR0IoY29uc3QgRmxvYXRDb21wb25lbnRzJiBwMykKK0Nv
bG9yQ29tcG9uZW50czxmbG9hdD4gcDNUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYgcDMpCiB7CiAgICAgYXV0byBsaW5lYXJQMyA9IHJnYlRvTGluZWFyQ29tcG9uZW50cyhwMyk7
CiAgICAgYXV0byB4eXogPSBsaW5lYXJQM1RvWFlaKGxpbmVhclAzKTsKQEAgLTE0Niw3ICsxMzgs
NyBAQCBGbG9hdENvbXBvbmVudHMgcDNUb1NSR0IoY29uc3QgRmxvYXRDb21wCiAgICAgcmV0dXJu
IGxpbmVhclRvUkdCQ29tcG9uZW50cyhsaW5lYXJTUkdCKTsKIH0KIAotRmxvYXRDb21wb25lbnRz
IHNSR0JUb1AzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQikKK0NvbG9yQ29tcG9uZW50czxm
bG9hdD4gc1JHQlRvUDMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQikKIHsKICAg
ICBhdXRvIGxpbmVhclNSR0IgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMoc1JHQik7CiAgICAgYXV0
byB4eXogPSBsaW5lYXJTUkdCVG9YWVoobGluZWFyU1JHQik7CkBAIC0xNTQsNyArMTQ2LDcgQEAg
RmxvYXRDb21wb25lbnRzIHNSR0JUb1AzKGNvbnN0IEZsb2F0Q29tcAogICAgIHJldHVybiBsaW5l
YXJUb1JHQkNvbXBvbmVudHMobGluZWFyUDMpOwogfQogCi1mbG9hdCBsaWdodG5lc3MoY29uc3Qg
RmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVudHMpCitmbG9hdCBsaWdodG5lc3MoY29uc3Qg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKQogewogICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gc1JHQkNvbXBvbnRlbnRzOwogCkBAIC0xNzUsNyArMTY3LDcgQEAgc3RhdGlj
IGZsb2F0IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50RgogICAgIHJldHVybiBjbGFtcFRvPGZs
b2F0PihzdGQ6OnBvdygoYyArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpLCAwLCAxKTsKIH0KIAot
ZmxvYXQgbHVtaW5hbmNlKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbmVudHMpCitm
bG9hdCBsdW1pbmFuY2UoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbmVu
dHMpCiB7CiAgICAgLy8gVmFsdWVzIGZyb20gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVD
LVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWYKICAgICByZXR1cm4gMC4yMTI2
ZiAqIHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50Rm9yTHVtaW5hbmNlKHNSR0JDb21wb25lbnRz
LmNvbXBvbmVudHNbMF0pCkBAIC0xODMsNyArMTc1LDcgQEAgZmxvYXQgbHVtaW5hbmNlKGNvbnN0
IEZsb2F0Q29tcG9uZW50cyYgcwogICAgICAgICArIDAuMDcyMmYgKiBzUkdCVG9MaW5lYXJDb2xv
ckNvbXBvbmVudEZvckx1bWluYW5jZShzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzJdKTsKIH0K
IAotZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHNB
LCBjb25zdCBGbG9hdENvbXBvbmVudHMmIGNvbXBvbmVudHNCKQorZmxvYXQgY29udHJhc3RSYXRp
byhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzQSwgY29uc3QgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiYgY29tcG9uZW50c0IpCiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAy
LjAgZGVmaW5pdGlvbiBvZiBjb250cmFzdCByYXRpby4KICAgICAvLyBodHRwczovL3d3dy53My5v
cmcvVFIvV0NBRzIwLyNjb250cmFzdC1yYXRpb2RlZgpAQCAtMTk2LDcgKzE4OCw3IEBAIGZsb2F0
IGNvbnRyYXN0UmF0aW8oY29uc3QgRmxvYXRDb21wb25lbnQKICAgICByZXR1cm4gKGxpZ2h0ZXJM
dW1pbmFuY2UgKyAwLjA1KSAvIChkYXJrZXJMdW1pbmFuY2UgKyAwLjA1KTsKIH0KIAotRmxvYXRD
b21wb25lbnRzIHNSR0JUb0hTTChjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50
cykKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRvSFNMKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdD4mIHNSR0JDb21wb250ZW50cykKIHsKICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlh
Lm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS4KICAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBz
UkdCQ29tcG9udGVudHM7CkBAIC0yNTYsNyArMjQ4LDcgQEAgc3RhdGljIGZsb2F0IGNhbGNIdWUo
ZmxvYXQgdGVtcDEsIGZsb2F0IAogLy8gRXhwbGFuYXRpb24gb2YgdGhpcyBhbGdvcml0aG0gY2Fu
IGJlIGZvdW5kIGluIHRoZSBDU1MgQ29sb3IgNCBNb2R1bGUKIC8vIHNwZWNpZmljYXRpb24gYXQg
aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1jb2xvci00LyNoc2wtdG8tcmdiIHdpdGgKIC8v
IGZ1cnRoZXIgZXhwbGFuYXRpb24gYXZhaWxhYmxlIGF0IGh0dHA6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvSFNMX2NvbG9yX3NwYWNlCi1GbG9hdENvbXBvbmVudHMgaHNsVG9TUkdCKGNvbnN0IEZs
b2F0Q29tcG9uZW50cyYgaHNsQ29sb3IpCitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGhzbFRvU1JH
Qihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBoc2xDb2xvcikKIHsKICAgICBmbG9hdCBo
dWUgPSBoc2xDb2xvci5jb21wb25lbnRzWzBdOwogICAgIGZsb2F0IHNhdHVyYXRpb24gPSBoc2xD
b2xvci5jb21wb25lbnRzWzFdOwpAQCAtMjg0LDcgKzI3Niw3IEBAIEZsb2F0Q29tcG9uZW50cyBo
c2xUb1NSR0IoY29uc3QgRmxvYXRDb20KICAgICB9OwogfQogCi1GbG9hdENvbXBvbmVudHMgcHJl
bXVsdGlwbGllZChjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb25lbnRzKQorQ29sb3JD
b21wb25lbnRzPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIHNSR0JDb21wb25lbnRzKQogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkNvbXBv
bmVudHM7CiAgICAgcmV0dXJuIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTg1ICsyNiw2MCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxhbGdvcml0
aG0+Ci0jaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0cnVjdCBGbG9hdENvbXBvbmVudHMgewotICAgIEZsb2F0Q29tcG9uZW50cyhm
bG9hdCBhID0gMCwgZmxvYXQgYiA9IDAsIGZsb2F0IGMgPSAwLCBmbG9hdCBkID0gMCkKLSAgICB7
Ci0gICAgICAgIGNvbXBvbmVudHNbMF0gPSBhOwotICAgICAgICBjb21wb25lbnRzWzFdID0gYjsK
LSAgICAgICAgY29tcG9uZW50c1syXSA9IGM7Ci0gICAgICAgIGNvbXBvbmVudHNbM10gPSBkOwot
ICAgIH0KLQotICAgIEZsb2F0Q29tcG9uZW50cyhjb25zdCBzdGQ6OmFycmF5PGZsb2F0LCA0PiYg
dmFsdWVzKQotICAgIHsKLSAgICAgICAgY29tcG9uZW50c1swXSA9IHZhbHVlc1swXTsKLSAgICAg
ICAgY29tcG9uZW50c1sxXSA9IHZhbHVlc1sxXTsKLSAgICAgICAgY29tcG9uZW50c1syXSA9IHZh
bHVlc1syXTsKLSAgICAgICAgY29tcG9uZW50c1szXSA9IHZhbHVlc1szXTsKLSAgICB9Ci0KLSAg
ICBGbG9hdENvbXBvbmVudHMmIG9wZXJhdG9yKz0oY29uc3QgRmxvYXRDb21wb25lbnRzJiByaHMp
Ci0gICAgewotICAgICAgICBjb21wb25lbnRzWzBdICs9IHJocy5jb21wb25lbnRzWzBdOwotICAg
ICAgICBjb21wb25lbnRzWzFdICs9IHJocy5jb21wb25lbnRzWzFdOwotICAgICAgICBjb21wb25l
bnRzWzJdICs9IHJocy5jb21wb25lbnRzWzJdOwotICAgICAgICBjb21wb25lbnRzWzNdICs9IHJo
cy5jb21wb25lbnRzWzNdOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgRmxv
YXRDb21wb25lbnRzIG9wZXJhdG9yKyhmbG9hdCByaHMpIGNvbnN0Ci0gICAgewotICAgICAgICBG
bG9hdENvbXBvbmVudHMgcmVzdWx0OwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNv
bXBvbmVudHNbMF0gKyByaHM7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFdID0gY29tcG9u
ZW50c1sxXSArIHJoczsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMl0gPSBjb21wb25lbnRz
WzJdICsgcmhzOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9IGNvbXBvbmVudHNbM10g
KyByaHM7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgRmxvYXRDb21wb25l
bnRzIG9wZXJhdG9yLyhmbG9hdCBkZW5vbWluYXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEZs
b2F0Q29tcG9uZW50cyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzBdID0gY29t
cG9uZW50c1swXSAvIGRlbm9taW5hdG9yOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9
IGNvbXBvbmVudHNbMV0gLyBkZW5vbWluYXRvcjsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNb
Ml0gPSBjb21wb25lbnRzWzJdIC8gZGVub21pbmF0b3I7Ci0gICAgICAgIHJlc3VsdC5jb21wb25l
bnRzWzNdID0gY29tcG9uZW50c1szXSAvIGRlbm9taW5hdG9yOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLQotICAgIEZsb2F0Q29tcG9uZW50cyBvcGVyYXRvciooZmxvYXQgZmFjdG9y
KSBjb25zdAotICAgIHsKLSAgICAgICAgRmxvYXRDb21wb25lbnRzIHJlc3VsdDsKLSAgICAgICAg
cmVzdWx0LmNvbXBvbmVudHNbMF0gPSBjb21wb25lbnRzWzBdICogZmFjdG9yOwotICAgICAgICBy
ZXN1bHQuY29tcG9uZW50c1sxXSA9IGNvbXBvbmVudHNbMV0gKiBmYWN0b3I7Ci0gICAgICAgIHJl
c3VsdC5jb21wb25lbnRzWzJdID0gY29tcG9uZW50c1syXSAqIGZhY3RvcjsKLSAgICAgICAgcmVz
dWx0LmNvbXBvbmVudHNbM10gPSBjb21wb25lbnRzWzNdICogZmFjdG9yOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEZsb2F0Q29tcG9uZW50cyBhYnMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgRmxvYXRDb21wb25lbnRzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmNvbXBv
bmVudHNbMF0gPSBmYWJzKGNvbXBvbmVudHNbMF0pOwotICAgICAgICByZXN1bHQuY29tcG9uZW50
c1sxXSA9IGZhYnMoY29tcG9uZW50c1sxXSk7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJd
ID0gZmFicyhjb21wb25lbnRzWzJdKTsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBm
YWJzKGNvbXBvbmVudHNbM10pOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+Ci0gICAgZmxvYXQgZ2V0KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb21wb25lbnRzW05dOwotICAgIH0KLQotICAgIHN0ZDo6YXJyYXk8Zmxv
YXQsIDQ+IGNvbXBvbmVudHM7Ci19OwotCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3Qg
RmxvYXRDb21wb25lbnRzJiwgY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci0KLXN0cnVjdCBDb2xv
ckNvbXBvbmVudHMgewotICAgIENvbG9yQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMm
KTsKLSAgICAKLSAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzIGZyb21SR0JBKHVuc2lnbmVkIHBp
eGVsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbG9yQ29tcG9uZW50cygocGl4ZWwgPj4gMjQp
ICYgMHhGRiwgKHBpeGVsID4+IDE2KSAmIDB4RkYsIChwaXhlbCA+PiA4KSAmIDB4RkYsIHBpeGVs
ICYgMHhGRik7Ci0gICAgfQotICAgIAotICAgIENvbG9yQ29tcG9uZW50cyh1aW50OF90IGEgPSAw
LCB1aW50OF90IGIgPSAwLCB1aW50OF90IGMgPSAwLCB1aW50OF90IGQgPSAwKQotICAgIHsKLSAg
ICAgICAgY29tcG9uZW50c1swXSA9IGE7Ci0gICAgICAgIGNvbXBvbmVudHNbMV0gPSBiOwotICAg
ICAgICBjb21wb25lbnRzWzJdID0gYzsKLSAgICAgICAgY29tcG9uZW50c1szXSA9IGQ7Ci0gICAg
fQotICAgIAotICAgIHVuc2lnbmVkIHRvUkdCQSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gY29tcG9uZW50c1swXSA8PCAyNCB8IGNvbXBvbmVudHNbMV0gPDwgMTYgfCBjb21wb25lbnRz
WzJdIDw8IDggfCBjb21wb25lbnRzWzNdOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb2xvckNvbXBvbmVudHM7CiAKLSAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDQ+IGNvbXBv
bmVudHM7Ci19OworLy8gMC0xIGNvbXBvbmVudHMsIHJlc3VsdCBpcyBjbGFtcGVkLgorZmxvYXQg
bGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7CitmbG9hdCByZ2JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGZsb2F0KTsKIAotaW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21wb25lbnRN
YXgoY29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCi17
Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzBdLCBiLmNvbXBv
bmVudHNbMF0pLAotICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMV0sIGIuY29tcG9uZW50
c1sxXSksCi0gICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1syXSwgYi5jb21wb25lbnRzWzJd
KSwKLSAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzNdLCBiLmNvbXBvbmVudHNbM10pCi0g
ICAgfTsKLX0KK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gcmdiVG9MaW5lYXJDb21wb25lbnRzKGNv
bnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gbGlu
ZWFyVG9SR0JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKKworQ29s
b3JDb21wb25lbnRzPGZsb2F0PiBwM1RvU1JHQihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
Jik7CitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHNSR0JUb1AzKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdD4mKTsKKworV0VCQ09SRV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdC
VG9IU0woY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOworV0VCQ09SRV9FWFBPUlQgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiBoc2xUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYpOwogCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzIHBlckNvbXBvbmVudE1pbihjb25zdCBDb2xv
ckNvbXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK2Zsb2F0IGxpZ2h0bmVz
cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOworZmxvYXQg
bHVtaW5hbmNlKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cyk7
CitmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JD
b21wb250ZW50c0EsIGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50
c0IpOworCitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgQ29sb3JD
b21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKKworYm9vbCBhcmVFc3NlbnRpYWxs
eUVxdWFsKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mLCBjb25zdCBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+Jik7CisKK2lubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
aW50IHZhbHVlKQogewotICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50
c1swXSwgYi5jb21wb25lbnRzWzBdKSwKLSAgICAgICAgc3RkOjptaW4oYS5jb21wb25lbnRzWzFd
LCBiLmNvbXBvbmVudHNbMV0pLAotICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbMl0sIGIu
Y29tcG9uZW50c1syXSksCi0gICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1szXSwgYi5jb21w
b25lbnRzWzNdKQotICAgIH07CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAodmFsdWUsIDAsIDI1NSk7
CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBj
b25zdCBDb2xvckNvbXBvbmVudHMmIGIpCitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKGZsb2F0IHZhbHVlKQogewotICAgIHJldHVybiBhLmNvbXBvbmVudHMgPT0gYi5j
b21wb25lbnRzOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6cm91bmQodmFsdWUpLCAwLmYs
IDI1NS5mKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvckNvbXBvbmVu
dHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK2lubGluZSB1aW50MTZfdCBmYXN0TXVs
dGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gIShhID09IGIpOworICAg
IHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKIH0KIAotaW5saW5lIHVpbnQ4X3QgY2xhbXBl
ZENvbG9yQ29tcG9uZW50KGZsb2F0IGYpCitpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1
KHVpbnQxNl90IHZhbHVlKQogewotICAgIC8vIFNlZSBhbHNvIGNvbG9yRmxvYXRUb1JHQkFCeXRl
KCkuCi0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4w
ZiAqIGYpKSwgMCwgMjU1KTsKKyAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRlIGFs
Z29yaXRobSBmb3IgZGl2aXNpb24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJhdGUg
cmVzdWx0cyBmb3IgMTYtYml0IHZhbHVlcy4KKyAgICAvLyBGSVhNRTogU2luY2UgdGhpcyBnaXZl
cyBhY2N1cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQgdmFsdWVzLCB3ZSBzaG91bGQgZ2V0IHRoaXMg
b3B0aW1pemF0aW9uIGludG8gY29tcGlsZXJzIGxpa2UgY2xhbmcuCisgICAgdWludDE2X3QgYXBw
cm94aW1hdGlvbiA9IHZhbHVlID4+IDg7CisgICAgdWludDE2X3QgcmVtYWluZGVyID0gdmFsdWUg
LSAoYXBwcm94aW1hdGlvbiAqIDI1NSkgKyAxOworICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsg
KHJlbWFpbmRlciA+PiA4KTsKIH0KIAotaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVs
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQoraW5saW5lIHVpbnQ4
X3QgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGZsb2F0IGYpCiB7Ci0gICAgY29uc3QgdW5z
aWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7Ci0gICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsg
eSAqIHJvd0J5dGVzOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4obHJv
dW5kZigyNTUuMGYgKiBmKSksIDAsIDI1NSk7CiB9CiAKLS8vIDAtMSBjb21wb25lbnRzLCByZXN1
bHQgaXMgY2xhbXBlZC4KLWZsb2F0IGxpbmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOwot
ZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCk7Ci0KLUZsb2F0Q29tcG9uZW50
cyByZ2JUb0xpbmVhckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci1GbG9hdENv
bXBvbmVudHMgbGluZWFyVG9SR0JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwot
Ci1GbG9hdENvbXBvbmVudHMgcDNUb1NSR0IoY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci1GbG9h
dENvbXBvbmVudHMgc1JHQlRvUDMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci0KLVdFQkNPUkVf
RVhQT1JUIEZsb2F0Q29tcG9uZW50cyBzUkdCVG9IU0woY29uc3QgRmxvYXRDb21wb25lbnRzJik7
Ci1XRUJDT1JFX0VYUE9SVCBGbG9hdENvbXBvbmVudHMgaHNsVG9TUkdCKGNvbnN0IEZsb2F0Q29t
cG9uZW50cyYpOwotCi1mbG9hdCBsaWdodG5lc3MoY29uc3QgRmxvYXRDb21wb25lbnRzJiBzUkdC
Q29tcG9udGVudHMpOwotZmxvYXQgbHVtaW5hbmNlKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JH
QkNvbXBvbnRlbnRzKTsKLWZsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgRmxvYXRDb21wb25lbnRz
JiwgY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci0KLUZsb2F0Q29tcG9uZW50cyBwcmVtdWx0aXBs
aWVkKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKTsKLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8PgotY2xhc3MgdHVw
bGVfc2l6ZTxXZWJDb3JlOjpGbG9hdENvbXBvbmVudHM+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxf
Y29uc3RhbnQ8c3RkOjpzaXplX3QsIDQ+IHsKLX07Ci0KLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+
Ci1jbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50cz4gewotcHVi
bGljOgotICAgIHVzaW5nIHR5cGUgPSBmbG9hdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2
MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNs
dWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hhbm5lbHMuY29tcG9uZW50c1szXTsgfQogCi0gICAgY29uc3QgRmxvYXRDb21wb25lbnRzJiBj
aGFubmVscygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbHM7IH0KKyAgICBjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+JiBjaGFubmVscygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbHM7IH0K
ICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7
IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKQEAgLTU4LDcg
KzU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKICAg
ICB7IH0KIAotICAgIEZsb2F0Q29tcG9uZW50cyBtX2NoYW5uZWxzOworICAgIENvbG9yQ29tcG9u
ZW50czxmbG9hdD4gbV9jaGFubmVsczsKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZSB7IENv
bG9yU3BhY2U6OlNSR0IgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzQsMTMgKzc0LDkgQEAgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cyhmbAogCiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tSFNMQShmbG9hdCBodWUsIGZs
b2F0IHNhdHVyYXRpb24sIGZsb2F0IGxpZ2h0bmVzcywgZmxvYXQgYWxwaGEpCiB7Ci0gICAgY29u
c3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAyNTUuMDsKLSAgICBGbG9hdENvbXBvbmVudHMgZmxvYXRS
ZXN1bHQgPSBoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7
Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQu
Y29tcG9uZW50c1swXSAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQu
Y29tcG9uZW50c1sxXSAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQu
Y29tcG9uZW50c1syXSAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQu
Y29tcG9uZW50c1szXSAqIHNjYWxlRmFjdG9yKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBo
c2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGEgfSk7CisgICAgLy8g
RklYTUU6IERldGVybWluZSB3aHkgdGhpcyBpc24ndCBjYWxsaW5nIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMgYW5kIGlmIGl0IGNhbi4KKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHJvdW5k
KHIgKiAyNTUuMCksIHJvdW5kKGcgKiAyNTUuMCksIHJvdW5kKGIgKiAyNTUuMCksIHJvdW5kKGEg
KiAyNTUuMCkpOwogfQogCiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxv
YXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYy
MjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAko
d29ya2luZyBjb3B5KQpAQCAtODcsMTMgKzg3LDYgQEAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29s
b3IgbWFrZVNpbXBsZUNvbAogV0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNv
bG9yRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CiBTaW1wbGVD
b2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwg
ZmxvYXQgaywgZmxvYXQgYSk7CiAKLXVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChp
bnQpOwotdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0KTsKLQotdWludDE2
X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpOwotdWludDE2X3QgZmFzdERpdmlk
ZUJ5MjU1KHVpbnQxNl90KTsKLQotdWludDhfdCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUo
ZmxvYXQpOwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNv
bG9yIGIpCiB7CkBAIC0xMDUsMzcgKzk4LDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1w
bGVDb2xvciBhLCBTaQogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWlubGluZSB1aW50OF90
IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6
OmNsYW1wKHZhbHVlLCAwLCAyNTUpOwotfQotCi1pbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1w
Q29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6
cm91bmQodmFsdWUpLCAwLmYsIDI1NS5mKTsKLX0KLQotaW5saW5lIHVpbnQxNl90IGZhc3RNdWx0
aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQotewotICAgIHJldHVybiAodmFsdWUgPDwgOCkgLSB2
YWx1ZTsKLX0KLQotaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCB2YWx1
ZSkKLXsKLSAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRlIGFsZ29yaXRobSBmb3Ig
ZGl2aXNpb24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJhdGUgcmVzdWx0cyBmb3Ig
MTYtYml0IHZhbHVlcy4KLSAgICAvLyBGSVhNRTogU2luY2UgdGhpcyBnaXZlcyBhY2N1cmF0ZSBy
ZXN1bHRzIGZvciAxNi1iaXQgdmFsdWVzLCB3ZSBzaG91bGQgZ2V0IHRoaXMgb3B0aW1pemF0aW9u
IGludG8gY29tcGlsZXJzIGxpa2UgY2xhbmcuCi0gICAgdWludDE2X3QgYXBwcm94aW1hdGlvbiA9
IHZhbHVlID4+IDg7Ci0gICAgdWludDE2X3QgcmVtYWluZGVyID0gdmFsdWUgLSAoYXBwcm94aW1h
dGlvbiAqIDI1NSkgKyAxOwotICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+
PiA4KTsKLX0KLQotaW5saW5lIHVpbnQ4X3QgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGZs
b2F0IGYpCi17Ci0gICAgLy8gRklYTUU6IENvbnNvbGlkYXRlIHdpdGggY2xhbXBlZENvbG9yQ29t
cG9uZW50KCkuCi0gICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRh
ZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCi0gICAgcmV0dXJuIHN0ZDo6Y2xh
bXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKLX0KLQog
Y29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgMHhGRik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQm
IAogICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsg
YiAqIGNvbXBvbmVudHNbOF07CiB9CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgbHVtaW5h
bmNlKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKS4KKy8vIEZJWE1FOiB0
aGlzIHNob3VsZCB1c2UgbHVtaW5hbmNlKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNS
R0JDb21wb250ZW50cykuCiBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQm
IGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQogewogICAgIGFscGhhID0gMC4yMTI1
ICogcmVkICsgMC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Niw2ICs4NiwxMiBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1S
ZXN1bHRDCiAgICAgICAgIGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4
ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCit7CisgICAgY29u
c3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7CisgICAgcmV0dXJuIHggKiBieXRlc1BlclBp
eGVsICsgeSAqIHJvd0J5dGVzOworfQorCiB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDA0LDcgKzQwNCw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4
Q2xhbXAKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7CiAgICAgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAgICAgCi0gICAgRmxvYXRDb21w
b25lbnRzIGxpZ2h0Q29sb3IgPSAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6
OkxpbmVhclJHQikgPyByZ2JUb0xpbmVhckNvbXBvbmVudHMobV9saWdodGluZ0NvbG9yLnRvU1JH
QkFDb21wb25lbnRzTG9zc3koKSkgOiBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOworICAgIGF1dG8gbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xvclNwYWNlKCkgPT0g
Q29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50cyhtX2xpZ2h0aW5n
Q29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA6IG1fbGlnaHRpbmdDb2xvci50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEu
Y29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25lbnRzWzBdLCBsaWdo
dENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1syXSk7CiAgICAgbV9s
aWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OCw4ICs4OCwxOSBAQCBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50
IHgsCiAgICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7CiB9CiAKK2lubGluZSBDb2xvckNv
bXBvbmVudHM8dWludDhfdD4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKHVuc2ln
bmVkIHBpeGVsKQoreworICAgIHJldHVybiBDb2xvckNvbXBvbmVudHM8dWludDhfdD4oKHBpeGVs
ID4+IDI0KSAmIDB4RkYsIChwaXhlbCA+PiAxNikgJiAweEZGLCAocGl4ZWwgPj4gOCkgJiAweEZG
LCBwaXhlbCAmIDB4RkYpOworfQorCitpbmxpbmUgdW5zaWduZWQgbWFrZVBpeGVsVmFsdWVGcm9t
Q29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgY29tcG9uZW50
cykKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgcmV0dXJuIHIg
PDwgMjQgfCBnIDw8IDE2IHwgYiA8PCA4IHwgYTsKK30KKwogdGVtcGxhdGU8TW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHMgbWluT3JNYXgo
Y29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCitBTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90PiBtaW5Pck1heChjb25zdCBDb2xvckNv
bXBvbmVudHM8dWludDhfdD4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgYikK
IHsKICAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCiAgICAgICAg
IHJldHVybiBwZXJDb21wb25lbnRNaW4oYSwgYik7CkBAIC05OCwxOCArMTA5LDE4IEBAIEFMV0FZ
U19JTkxJTkUgQ29sb3JDb21wb25lbnRzIG1pbk9yTWF4KGMKIH0KIAogdGVtcGxhdGU8TW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHMgY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQorQUxXQVlTX0lOTElORSBDb2xvckNv
bXBvbmVudHM8dWludDhfdD4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQog
ewotICAgIGF1dG8gZXh0cmVtdW0gPSBDb2xvckNvbXBvbmVudHM6OmZyb21SR0JBKCpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFy
cmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpKTsKKyAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNv
bG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3
aWR0aCkpKTsKIAogICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7
Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBDb2xvckNvbXBvbmVudHM6OmZyb21SR0JBKCpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFy
cmF5SW5kZXgoeCwgeSwgd2lkdGgpKSk7CisgICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JD
b21wb25lbnRzZnJvbVBpeGVsVmFsdWUoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQq
PihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpKTsK
ICAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwpOwogICAg
IH0KICAgICByZXR1cm4gZXh0cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25l
bnRzIGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5
LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlKQorQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdD4gY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQog
ICAgICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RF
PihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKQEAgLTExNywxMCArMTI4
LDEwIEBAIEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzIGNvbHVtbkV4dHIKICAgICByZXR1
cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxB
cnJheSwgeCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7CiB9CiAKLXVzaW5nIENvbHVtbkV4dHJlbWEg
PSBWZWN0b3I8Q29sb3JDb21wb25lbnRzLCAxNj47Cit1c2luZyBDb2x1bW5FeHRyZW1hID0gVmVj
dG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90PiwgMTY+OwogCiB0ZW1wbGF0ZTxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50cyBrZXJuZWxF
eHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCitBTFdBWVNfSU5MSU5FIENvbG9y
Q29tcG9uZW50czx1aW50OF90PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBr
ZXJuZWwpCiB7CiAgICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKICAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKQEAgLTEyOSw3ICsxNDAsNyBAQCBBTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50cyBrZXJuZWxFeHRyCiAgICAgcmV0dXJuIGV4dHJlbXVt
OwogfQogCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50cyBrZXJuZWxFeHRyZW11bShjb25z
dCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK0FM
V0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Q+IGtlcm5lbEV4dHJlbXVtKGNvbnN0
IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewog
ICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKICAgICAgICAgcmV0
dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsK
QEAgLTE3NCw3ICsxODUsNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWMoCiAgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxB
cnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKLSAgICAgICAgICAg
ICpkZXN0UGl4ZWwgPSBrZXJuZWxFeHRyZW11bShleHRyZW1hLCBtX3R5cGUpLnRvUkdCQSgpOwor
ICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50
cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBtX3R5cGUpKTsKICAgICAgICAgfQogICAgIH0KIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIEZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1
bGVuY2U6OmMKIH0KIAogLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1G
bG9hdENvbXBvbmVudHMgRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBv
aW50JiBub2lzZVZlY3RvcikgY29uc3QKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gRkVUdXJidWxl
bmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0
Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QK
IHsKICAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7CiAgICAgICAgIGludCBpbmRleDsgLy8gYngw
LCBieTAgaW4gdGhlIHNwZWMgdGV4dC4KQEAgLTMyMiwxOSArMzIyLDE5IEBAIEZsb2F0Q29tcG9u
ZW50cyBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY28KIH0KIAogLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBj
b252ZXJzaW9uIHRvIGNvbG9yIGNvbXBvbmVudHMuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9u
ZW50cyB0b0NvbG9yQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmIGZsb2F0Q29tcG9u
ZW50cykKK3N0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Q+IHRvSW50QmFzZWRD
b2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgZmxvYXRDb21wb25l
bnRzKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWF4PHVpbnQ4X3Q+KDAsIHN0ZDo6
bWluKHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKiAyNTUp
LCAyNTUpKSwKLSAgICAgICAgc3RkOjptYXg8dWludDhfdD4oMCwgc3RkOjptaW4oc3RhdGljX2Nh
c3Q8aW50PihmbG9hdENvbXBvbmVudHMuY29tcG9uZW50c1sxXSAqIDI1NSksIDI1NSkpLAotICAg
ICAgICBzdGQ6Om1heDx1aW50OF90PigwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0
Q29tcG9uZW50cy5jb21wb25lbnRzWzJdICogMjU1KSwgMjU1KSksCi0gICAgICAgIHN0ZDo6bWF4
PHVpbnQ4X3Q+KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNv
bXBvbmVudHNbM10gKiAyNTUpLCAyNTUpKQorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKiAyNTUpLCAwLCAy
NTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzLmNvbXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNs
YW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNb
Ml0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19j
YXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbM10gKiAyNTUpLCAwLCAyNTUpLAog
ICAgIH07CiB9CiAKLUNvbG9yQ29tcG9uZW50cyBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1
bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0
Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3Q+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3Rp
dGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgRmxvYXRDb21w
b25lbnRzIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKKyAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKICAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9y
KHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFp
bnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKICAgICBmbG9hdCByYXRpbyA9IDE7CiAgICAgZm9y
IChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewpAQCAt
MzYyLDcgKzM2Miw3IEBAIENvbG9yQ29tcG9uZW50cyBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVQK
ICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCiAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAu
NWYgKyAwLjVmOwogCi0gICAgcmV0dXJuIHRvQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCk7CisgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24o
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25z
dApAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4
Q2xhbXAKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsg
Kyt4KSB7CiAgICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwogICAgICAgICAg
ICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2lu
dCk7Ci0gICAgICAgICAgICBDb2xvckNvbXBvbmVudHMgdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsK
KyAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9p
bnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKICAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4
ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JV
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKIApAQCAtMTE2LDggKzExNiw4IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAgICBTdGl0Y2hE
YXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwotICAgIEZsb2F0Q29tcG9uZW50cyBu
b2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzIGNhbGN1bGF0ZVR1cmJ1bGVuY2VW
YWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKKyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG5vaXNlMkQoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dDsKKyAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdD4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0OwogICAgIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0
IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsK
IAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29sb3JNYXRy
aXgKICAgICByZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdl
YkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9
CiAKLWJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3Io
RmxvYXRDb21wb25lbnRzJiBjb2xvckNvbXBvbmVudHMpIGNvbnN0Citib29sIEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIGNvbG9yQ29tcG9uZW50cykgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAg
IGNhc2UgR1JBWVNDQUxFOiB7CkBAIC0xNTIsNyArMTUyLDcgQEAgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gQmFzaWNDb21wb25lbnRUcgogICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91
bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKIH0KIAotYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihGbG9hdENvbXBvbmVudHMmIGNvbG9yQ29t
cG9uZW50cykgY29uc3QKK2Jvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29sb3JDb21wb25lbnRz
KSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBPUEFDSVRZOgpAQCAt
MjI2LDkgKzIyNiw5IEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEludmVydExpZ2h0bmVzc0YK
ICAgICByZXR1cm4gSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKIH0K
IAotYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKEZs
b2F0Q29tcG9uZW50cyYgc1JHQkNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jvb2wgSW52ZXJ0TGln
aHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAogewotICAgIEZsb2F0Q29tcG9uZW50cyBo
c2xDb21wb25lbnRzID0gc1JHQlRvSFNMKHNSR0JDb2xvckNvbXBvbmVudHMpOworICAgIGF1dG8g
aHNsQ29tcG9uZW50cyA9IHNSR0JUb0hTTChzUkdCQ29sb3JDb21wb25lbnRzKTsKICAgICAKICAg
ICAvLyBSb3RhdGUgdGhlIGh1ZSAxODBkZWcuCiAgICAgaHNsQ29tcG9uZW50cy5jb21wb25lbnRz
WzBdID0gZm1vZChoc2xDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKyAwLjVmLCAxLjBmKTsKQEAg
LTI0OSw5ICsyNDksMTAgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRy
YQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbG9yQ29t
cG9uZW50cykgY29uc3QKK2Jvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZl
cnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbG9yQ29tcG9u
ZW50cykgY29uc3QKIHsKLSAgICBGbG9hdENvbXBvbmVudHMgcmdiQ29tcG9uZW50cyA9IHNSR0JD
b2xvckNvbXBvbmVudHM7CisgICAgYXV0byByZ2JDb21wb25lbnRzID0gc1JHQkNvbG9yQ29tcG9u
ZW50czsKKwogICAgIC8vIEFwcGx5IHRoZSBtYXRyaXguCiAgICAgY29uc3QgZmxvYXQgbWF0cml4
VmFsdWVzWzIwXSA9IHsKICAgICAgICAgLTEuMzAwLCAtMC4wOTcsICAwLjE0NywgMCwgMS4yNSwK
QEAgLTI2Myw3ICsyNjQsNyBAQCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6
aW52CiAgICAgdG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKHJnYkNv
bXBvbmVudHMpOwogCiAgICAgLy8gQ29udmVydCB0byBIU0wuCi0gICAgRmxvYXRDb21wb25lbnRz
IGhzbENvbXBvbmVudHMgPSBzUkdCVG9IU0wocmdiQ29tcG9uZW50cyk7CisgICAgYXV0byBoc2xD
b21wb25lbnRzID0gc1JHQlRvSFNMKHJnYkNvbXBvbmVudHMpOwogICAgIC8vIEh1ZSByb3RhdGUg
YnkgMTgwZGVnLgogICAgIGhzbENvbXBvbmVudHMuY29tcG9uZW50c1swXSA9IGZtb2QoaHNsQ29t
cG9uZW50cy5jb21wb25lbnRzWzBdICsgMC41ZiwgMS4wZik7CiAgICAgLy8gQW5kIHJldHVybiBS
R0IuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTsK
IGNsYXNzIEZpbHRlckVmZmVjdDsKLXN0cnVjdCBGbG9hdENvbXBvbmVudHM7CiBzdHJ1Y3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yQ29t
cG9uZW50czsKIAogY2xhc3MgRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZpbHRlck9wZXJhdGlvbj4gewogcHVibGljOgpAQCAtNzksOCArNzksOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIGJv
b2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaW52ZXJzZVRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50
cyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHRyYW5zZm9ybUNv
bG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBPcGVyYXRpb25UeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KIApAQCAtMjI4LDcgKzIyOCw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAt
MjYzLDcgKzI2Myw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNm
b3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0cmFu
c2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAtMjkwLDggKzI5MCw4IEBAIHByaXZhdGU6CiAgICAg
ewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29u
c3QgZmluYWw7Ci0gICAgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRz
JikgY29uc3QgZmluYWw7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29s
b3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0IGZpbmFsOwogfTsKIAogY2xhc3MgV0VCQ09SRV9F
WFBPUlQgQmx1ckZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsMTQgKzExMSwxNSBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6
OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHMgPSBjb2xvci50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gY29sb3IudG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29w
ZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKGNvbXBv
bmVudHMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGNvbG9yID0g
Q29sb3IoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbMV0s
IGNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzNdKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgY29sb3IgPSBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
MzAsMTQgKzEzMSwxNSBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1D
CiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAg
ICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihjb21wb25lbnRzKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb2xvciA9IENvbG9yKGNvbXBv
bmVudHMuY29tcG9uZW50c1swXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzFdLCBjb21wb25lbnRz
LmNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHMuY29tcG9uZW50c1szXSk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb21wb25lbnRzOworICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZs
b2F0cyhyLCBnLCBiLCBhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>400415</attachid>
            <date>2020-05-27 18:41:38 -0700</date>
            <delta_ts>2020-05-27 18:41:38 -0700</delta_ts>
            <desc>ColorComponents.h</desc>
            <filename>ColorComponents.h</filename>
            <type>text/x-csrc</type>
            <size>4299</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECiAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQogKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwog
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCgojcHJhZ21hIG9uY2UK
CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxhcnJheT4KI2luY2x1ZGUgPG1hdGguaD4K
I2luY2x1ZGUgPHR1cGxlPgoKbmFtZXNwYWNlIFdlYkNvcmUgewoKdGVtcGxhdGU8dHlwZW5hbWUg
VD4Kc3RydWN0IENvbG9yQ29tcG9uZW50cyB7CiAgICBDb2xvckNvbXBvbmVudHMoVCBhID0gMCwg
VCBiID0gMCwgVCBjID0gMCwgVCBkID0gMCkKICAgICAgICA6IGNvbXBvbmVudHMgeyBhLCBiLCBj
LCBkIH0KICAgIHsKICAgIH0KCiAgICBDb2xvckNvbXBvbmVudHMoY29uc3Qgc3RkOjphcnJheTxU
LCA0PiYgdmFsdWVzKQogICAgICAgIDogY29tcG9uZW50cyB7IHZhbHVlcyB9CiAgICB7CiAgICB9
CgogICAgQ29sb3JDb21wb25lbnRzJiBvcGVyYXRvcis9KGNvbnN0IENvbG9yQ29tcG9uZW50cyYg
cmhzKQogICAgewogICAgICAgIGNvbXBvbmVudHNbMF0gKz0gcmhzLmNvbXBvbmVudHNbMF07CiAg
ICAgICAgY29tcG9uZW50c1sxXSArPSByaHMuY29tcG9uZW50c1sxXTsKICAgICAgICBjb21wb25l
bnRzWzJdICs9IHJocy5jb21wb25lbnRzWzJdOwogICAgICAgIGNvbXBvbmVudHNbM10gKz0gcmhz
LmNvbXBvbmVudHNbM107CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIENvbG9yQ29t
cG9uZW50cyBvcGVyYXRvcisoVCByaHMpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHsKICAg
ICAgICAgICAgY29tcG9uZW50c1swXSArIHJocywKICAgICAgICAgICAgY29tcG9uZW50c1sxXSAr
IHJocywKICAgICAgICAgICAgY29tcG9uZW50c1syXSArIHJocywKICAgICAgICAgICAgY29tcG9u
ZW50c1szXSArIHJocwogICAgICAgIH07CiAgICB9CgogICAgQ29sb3JDb21wb25lbnRzIG9wZXJh
dG9yLyhUIGRlbm9taW5hdG9yKSBjb25zdAogICAgewogICAgICAgIHJldHVybiB7CiAgICAgICAg
ICAgIGNvbXBvbmVudHNbMF0gLyBkZW5vbWluYXRvciwKICAgICAgICAgICAgY29tcG9uZW50c1sx
XSAvIGRlbm9taW5hdG9yLAogICAgICAgICAgICBjb21wb25lbnRzWzJdIC8gZGVub21pbmF0b3Is
CiAgICAgICAgICAgIGNvbXBvbmVudHNbM10gLyBkZW5vbWluYXRvcgogICAgICAgIH07CiAgICB9
CgogICAgQ29sb3JDb21wb25lbnRzIG9wZXJhdG9yKihUIGZhY3RvcikgY29uc3QKICAgIHsKICAg
ICAgICByZXR1cm4gewogICAgICAgICAgICBjb21wb25lbnRzWzBdICogZmFjdG9yLAogICAgICAg
ICAgICBjb21wb25lbnRzWzFdICogZmFjdG9yLAogICAgICAgICAgICBjb21wb25lbnRzWzJdICog
ZmFjdG9yLAogICAgICAgICAgICBjb21wb25lbnRzWzNdICogZmFjdG9yCiAgICAgICAgfTsKICAg
IH0KCiAgICBDb2xvckNvbXBvbmVudHMgYWJzKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4g
ewogICAgICAgICAgICBzdGQ6OmFicyhjb21wb25lbnRzWzBdKSwKICAgICAgICAgICAgc3RkOjph
YnMoY29tcG9uZW50c1sxXSksCiAgICAgICAgICAgIHN0ZDo6YWJzKGNvbXBvbmVudHNbMl0pLAog
ICAgICAgICAgICBzdGQ6OmFicyhjb21wb25lbnRzWzNdKQogICAgICAgIH07CiAgICB9CgogICAg
dGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KICAgIFQgZ2V0KCkgY29uc3QKICAgIHsKICAgICAgICBy
ZXR1cm4gY29tcG9uZW50c1tOXTsKICAgIH0KCiAgICBzdGQ6OmFycmF5PFQsIDQ+IGNvbXBvbmVu
dHM7Cn07CgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KaW5saW5lIENvbG9yQ29tcG9uZW50czxUPiBw
ZXJDb21wb25lbnRNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBhLCBjb25zdCBDb2xvckNv
bXBvbmVudHM8VD4mIGIpCnsKICAgIHJldHVybiB7CiAgICAgICAgc3RkOjptYXgoYS5jb21wb25l
bnRzWzBdLCBiLmNvbXBvbmVudHNbMF0pLAogICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1sx
XSwgYi5jb21wb25lbnRzWzFdKSwKICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMl0sIGIu
Y29tcG9uZW50c1syXSksCiAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzNdLCBiLmNvbXBv
bmVudHNbM10pCiAgICB9Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgppbmxpbmUgQ29sb3JDb21w
b25lbnRzPFQ+IHBlckNvbXBvbmVudE1pbihjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGEsIGNv
bnN0IENvbG9yQ29tcG9uZW50czxUPiYgYikKewogICAgcmV0dXJuIHsKICAgICAgICBzdGQ6Om1p
bihhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9uZW50c1swXSksCiAgICAgICAgc3RkOjptaW4oYS5j
b21wb25lbnRzWzFdLCBiLmNvbXBvbmVudHNbMV0pLAogICAgICAgIHN0ZDo6bWluKGEuY29tcG9u
ZW50c1syXSwgYi5jb21wb25lbnRzWzJdKSwKICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNb
M10sIGIuY29tcG9uZW50c1szXSkKICAgIH07Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBhLCBjb25zdCBDb2xv
ckNvbXBvbmVudHM8VD4mIGIpCnsKICAgIHJldHVybiBhLmNvbXBvbmVudHMgPT0gYi5jb21wb25l
bnRzOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IENvbG9yQ29tcG9uZW50czxUPiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBiKQp7CiAg
ICByZXR1cm4gIShhID09IGIpOwp9Cgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpuYW1lc3BhY2Ug
c3RkIHsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIHR1cGxlX3NpemU8V2ViQ29yZTo6Q29s
b3JDb21wb25lbnRzPFQ+PiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6
ZV90LCA0PiB7Cn07Cgp0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOLCB0eXBlbmFtZSBUPgpjbGFzcyB0
dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OkNvbG9yQ29tcG9uZW50czxUPj4gewpwdWJsaWM6CiAg
ICB1c2luZyB0eXBlID0gVDsKfTsKCn0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>400416</attachid>
            <date>2020-05-27 18:41:57 -0700</date>
            <delta_ts>2020-05-27 18:41:57 -0700</delta_ts>
            <desc>ColorUtilities.h</desc>
            <filename>ColorUtilities.h</filename>
            <type>text/x-csrc</type>
            <size>3354</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECiAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQogKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwog
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCgojcHJhZ21hIG9uY2UK
CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxtYXRoLmg+CgpuYW1lc3BhY2UgV2ViQ29y
ZSB7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29sb3JDb21wb25lbnRzOwoKLy8gMC0x
IGNvbXBvbmVudHMsIHJlc3VsdCBpcyBjbGFtcGVkLgpmbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29t
cG9uZW50KGZsb2F0KTsKZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNvbXBvbmVudChmbG9hdCk7CgpD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+Jik7CkNvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyVG9SR0JDb21w
b25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKCkNvbG9yQ29tcG9uZW50czxm
bG9hdD4gcDNUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOwpDb2xvckNvbXBv
bmVudHM8ZmxvYXQ+IHNSR0JUb1AzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKCldF
QkNPUkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRvSFNMKGNvbnN0IENvbG9y
Q29tcG9uZW50czxmbG9hdD4mKTsKV0VCQ09SRV9FWFBPUlQgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBoc2xUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYpOwoKZmxvYXQgbGlnaHRu
ZXNzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cyk7CmZsb2F0
IGx1bWluYW5jZShjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMp
OwpmbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JD
b21wb250ZW50c0EsIGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50
c0IpOwoKQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IENvbG9yQ29t
cG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cyk7Cgpib29sIGFyZUVzc2VudGlhbGx5RXF1
YWwoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYsIGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdD4mKTsKCmlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZh
bHVlKQp7CiAgICByZXR1cm4gc3RkOjpjbGFtcCh2YWx1ZSwgMCwgMjU1KTsKfQoKaW5saW5lIHVp
bnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChmbG9hdCB2YWx1ZSkKewogICAgcmV0dXJu
IHN0ZDo6Y2xhbXAoc3RkOjpyb3VuZCh2YWx1ZSksIDAuZiwgMjU1LmYpOwp9CgppbmxpbmUgdWlu
dDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpCnsKICAgIHJldHVybiAodmFs
dWUgPDwgOCkgLSB2YWx1ZTsKfQoKaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50
MTZfdCB2YWx1ZSkKewogICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0
aG0gZm9yIGRpdmlzaW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3Vs
dHMgZm9yIDE2LWJpdCB2YWx1ZXMuCiAgICAvLyBGSVhNRTogU2luY2UgdGhpcyBnaXZlcyBhY2N1
cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQgdmFsdWVzLCB3ZSBzaG91bGQgZ2V0IHRoaXMgb3B0aW1p
emF0aW9uIGludG8gY29tcGlsZXJzIGxpa2UgY2xhbmcuCiAgICB1aW50MTZfdCBhcHByb3hpbWF0
aW9uID0gdmFsdWUgPj4gODsKICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0gKGFwcHJv
eGltYXRpb24gKiAyNTUpICsgMTsKICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRl
ciA+PiA4KTsKfQoKaW5saW5lIHVpbnQ4X3QgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGZs
b2F0IGYpCnsKICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigy
NTUuMGYgKiBmKSksIDAsIDI1NSk7Cn0KCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400417</attachid>
            <date>2020-05-27 18:49:23 -0700</date>
            <delta_ts>2020-05-27 19:30:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212446-20200527184922.patch</filename>
            <type>text/plain</type>
            <size>63653</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjIyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAyMC0wNS0yNyAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlZmFj
dG9yIEZsb2F0Q29tcG9uZW50cyBhbmQgQ29sb3JDb21wb25lbnRzIGludG8gYSBzaW5nbGUgdGVt
cGxhdGl6ZWQgQ29sb3JDb21wb25lbnRzIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0NDYKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1v
biBGcmFzZXIuCisKKyAgICAgICAgTWVyZ2UgRmxvYXRDb21wb25lbnRzIGFuZCBDb2xvckNvbXBv
bmVudHMgaW50byBDb2xvckNvbXBvbmVudHM8VD4gYW5kIG1vdmUgdGhlbSB0byB0aGVpciBvd24K
KyAgICAgICAgaGVhZGVyLiBUaGlzIGF2b2lkcyBkdXBsaWNhdGUgY29kZSBhbmQgcGF2ZXMgdGhl
IHdheSBmb3IgZnVydGhlciBnZW5lcmFsaXphdGlvbiBkb3duIHRoZSBsaW5lLgorICAgICAgICAK
KyAgICAgICAgQWxzbyBtb3ZlcyBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHRvIENvbG9yVXRpbGl0
aWVzLmggZnJvbSBTaW1wbGVDb2xvci5oIGFzIHRoZXkgbWFrZSBtb3JlIHNlbnNlCisgICAgICAg
IGluIHRoZSBmb3JtZXIuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIENvbG9yQ29tcG9u
ZW50cy5oCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbXBvbmVudHMuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuaC4KKyAgICAgICAgTW92ZWQgQ29sb3JDb21wb25lbnRzIHRvIGl0cyBvd24gaGVhZGVyIGFu
ZCB0ZW1wbGF0aXplZCBpdCB0byBhbGxvdyBpdCB0byBzZXJ2ZSB0aGUKKyAgICAgICAgbmVlZHMg
b2YgYm90aCB0aGUgb2xkIENvbG9yQ29tcG9uZW50cyBhbmQgb2xkIEZsb2F0Q29tcG9uZW50cyBj
bGFzc2VzLgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaDoK
KyAgICAgICAgUmVtb3ZlZCBDb2xvckNvbXBvbmVudHMvRmxvYXRDb21wb25lbnRzIGFuZCB1cGRh
dGUgZXhpc3RpbmcgdXNhZ2VzIHRvIHRoZWlyIG5ldyBuYW1lcy4KKyAgICAgICAgQWxzbyBtb3Zl
ZCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsLCBmYXN0TXVsdGlwbHlCeTI1NSwgZmFzdERpdmlk
ZUJ5MjU1IAorICAgICAgICBhbmQgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlIGhlcmUgZnJv
bSBTaW1wbGVDb2xvciB0byBtYWtlIGl0IGNsZWFyIHdoZXJlCisgICAgICAgIGdlbmVyYWwgaGVs
cGVyIGZ1bmN0aW9ucyBjYW4gZ28uCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5IGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbmRlZENvbG9yOjpjaGFubmVscyBjb25zdCk6CisgICAgICAgIFVwZGF0ZSBmb3Ig
cmVuYW1lIG9mIEZsb2F0Q29tcG9uZW50cyB0byBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEpOgorICAgICAgICBVc2Ugc3RydWN0dXJlZCBi
aW5kaW5ncyBhbmQgc2ltcGxpZnkgY29kZS4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmYXN0TXVsdGlwbHlCeTI1NSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmYXN0RGl2aWRlQnkyNTUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgQXMgbm90ZWQgYWJvdmUsIG1vdmVkIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwsIGZh
c3RNdWx0aXBseUJ5MjU1LCBmYXN0RGl2aWRlQnkyNTUgCisgICAgICAgIGFuZCBjb2xvckZsb2F0
VG9TaW1wbGVDb2xvckJ5dGUgdG8gQ29sb3JVdGlsaXRpZXMuaAorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgVXBkYXRlIGZv
ciByZW5hbWUgb2YgRmxvYXRDb21wb25lbnRzIHRvIENvbG9yQ29tcG9uZW50czxmbG9hdD4uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmJ5dGVPZmZzZXRPZlBpeGVsKToKKyAgICAgICAgTW92ZWQg
Ynl0ZU9mZnNldE9mUGl4ZWwgaGVyZSBmcm9tIENvbG9yVXRpbGl0aWVzLiBUaGlzIGZpbGUgaXMg
dGhlIG9ubHkgdXNlcgorICAgICAgICBhbmQgaXQgd2Fzbid0IGdlbmVyYWwgaW4gYSB3YXkgdGhh
dCB3YXMgY2xlYXIgZm9yIG90aGVyIHVzZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OmRyYXdMaWdodGluZyk6CisgICAgICAgIFVwZGF0ZSBmb3IgcmVuYW1lIG9mIEZsb2F0Q29tcG9u
ZW50cyB0byBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNv
bG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAgICAgQWRkZWQuIFVzZWQgdG8gYmUg
Q29sb3JDb21wb25lbnRzOjpmcm9tUkdCQSgpLCBidXQgd2FzIG9ubHkgdXNlZCBoZXJlCisgICAg
ICAgIGFuZCBkaWRuJ3Qgc2VlbSBnZW5lcmFsbHkgdXNlZnVsLgorCisgICAgICAgIChXZWJDb3Jl
OjptYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMpOgorICAgICAgICBBZGRlZC4gVXNl
ZCB0byBiZSBDb2xvckNvbXBvbmVudHM6OnRvUkdCQSgpLCBidXQgd2FzIG9ubHkgdXNlZCBoZXJl
CisgICAgICAgIGFuZCBkaWRuJ3Qgc2VlbSBnZW5lcmFsbHkgdXNlZnVsLgorICAgICAgICAKKyAg
ICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJl
bXVtKToKKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAgICAgICBVcGRhdGUg
Zm9yIHJlbmFtZSBvZiBGbG9hdENvbXBvbmVudHMgdG8gQ29sb3JDb21wb25lbnRzPGZsb2F0PiBh
bmQgQ29sb3JDb21wb25lbnRzCisgICAgICAgIHRvIENvbG9yQ29tcG9uZW50czx1aW50OF90Pi4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6bm9pc2UyRCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICBV
cGRhdGUgZm9yIHJlbmFtZSBvZiBGbG9hdENvbXBvbmVudHMgdG8gQ29sb3JDb21wb25lbnRzPGZs
b2F0PiBhbmQgQ29sb3JDb21wb25lbnRzCisgICAgICAgIHRvIENvbG9yQ29tcG9uZW50czx1aW50
OF90Pi4gQWxzbyByZW5hbWVzIHRvQ29sb3JDb21wb25lbnRzIHRvIHRvSW50QmFzZWRDb2xvckNv
bXBvbmVudHMKKyAgICAgICAgYXMgdGhlIGZvcm1lciB3YXMgbm8gbG9uZ2VyIHNwZWNpZmljIGVu
b3VnaC4gVXBkYXRlZCB0byB1c2Ugc3RkOjpjbGFtcC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb246OnRy
YW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludmVydExpZ2h0bmVzc0Zp
bHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbjo6aW52ZXJzZVRyYW5zZm9y
bUNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6dHJh
bnNmb3JtQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6
aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUg
b2YgRmxvYXRDb21wb25lbnRzIHRvIENvbG9yQ29tcG9uZW50czxmbG9hdD4uCisKIDIwMjAtMDUt
MjcgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIEVt
cHR5IGFsdCBhdHRyaWJ1dGUgZG9lcyBub3QgaWdub3JlIHRoZSBpbWFnZSBmb3IgYWNjZXNzaWJp
bGl0eSBjbGllbnRzIGluIFNhZmFyaS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24g
MjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMTA3OSw2ICsxMDc5LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1hdHJpeC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjIyMjEp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTIzMzksNiArMjMzOSw3IEBACiAJCTdDOUFDQUMyMUYzQ0YxQUYwMEYz
QUEwOSAvKiBKU0NyeXB0b1JzYUtleUFsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M5QUNBQjMxRjNDREMwMTAwRjNBQTA5IC8qIEpTQ3J5
cHRvUnNhS2V5QWxnb3JpdGhtLmggKi87IH07CiAJCTdDOURCRkVFMUE5QzQ5QjEwMDBENkIyNSAv
KiBKU0hUTUxBdHRhY2htZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0M5REJGRUMxQTlDNDlCMTAwMEQ2QjI1IC8qIEpTSFRNTEF0dGFj
aG1lbnRFbGVtZW50LmggKi87IH07CiAJCTdDQUM2QUU5MjQ3RjA4MkYwMEU2MUQ1OSAvKiBDb2xv
ck1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NBQzZBRTgyNDdGMDgyMDAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0NBQzZBRjAyNDdGNDExMDAwRTYx
RDU5IC8qIENvbG9yQ29tcG9uZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0NBQzZBRUMyNDdGMUM1MTAwRTYxRDU5IC8qIENvbG9yQ29tcG9uZW50
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdD
QjVDQTQwMUU1MjVDNzMwMEZBRUYxMyAvKiBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NCNUNBM0UxRTUyNUM2QzAw
RkFFRjEzIC8qIE1lZGlhUXVlcnlFeHByZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0NCQkJDQzcxRjU2MDU4MTAwNUVGQUFDIC8qIERP
TU1hdHJpeDJESW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0NCQkJDQzYxRjU2MDU2ODAwNUVGQUFDIC8qIERPTU1hdHJpeDJESW5pdC5oICovOyB9
OwogCQk3Q0JCQkNDQTFGNTYxN0M1MDA1RUZBQUMgLyogSlNET01NYXRyaXgyREluaXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQkJCQ0M5MUY1NjE3
QzAwMDVFRkFBQyAvKiBKU0RPTU1hdHJpeDJESW5pdC5oICovOyB9OwpAQCAtMTAxNjUsNiArMTAx
NjYsNyBAQAogCQk3QzlEQkZFQzFBOUM0OUIxMDAwRDZCMjUgLyogSlNIVE1MQXR0YWNobWVudEVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MQXR0YWNobWVu
dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NBQzZBRTYyNDdGMDgx
RjAwRTYxRDU5IC8qIENvbG9yTWF0cml4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yTWF0
cml4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NBQzZBRTgyNDdGMDgyMDAw
RTYxRDU5IC8qIENvbG9yTWF0cml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yTWF0cml4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDQUM2QUVDMjQ3RjFDNTEwMEU2MUQ1OSAvKiBD
b2xvckNvbXBvbmVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JD
b21wb25lbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQjVDQTNEMUU1MjVD
NkMwMEZBRUYxMyAvKiBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDQjVDQTNFMUU1MjVDNkMwMEZBRUYxMyAvKiBNZWRpYVF1ZXJ5
RXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5
RXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0JBNUJBNjFGMEI0
QkRFMDAzNEQ3NDUgLyogSlNET01Db252ZXJ0V2ViR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNET01Db252ZXJ0V2ViR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU0
MjIsNiArMjU0MjQsNyBAQAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJ
bWFnZS5oICovLAogCQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8s
CiAJCQkJQjI3NTM1MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCisJCQkJN0NBQzZB
RUMyNDdGMUM1MTAwRTYxRDU5IC8qIENvbG9yQ29tcG9uZW50cy5oICovLAogCQkJCTMxMDNCN0RF
MURCMDE1NTYwMDhCQjg5MCAvKiBDb2xvckhhc2guaCAqLywKIAkJCQk3Q0FDNkFFNjI0N0YwODFG
MDBFNjFENTkgLyogQ29sb3JNYXRyaXguY3BwICovLAogCQkJCTdDQUM2QUU4MjQ3RjA4MjAwMEU2
MUQ1OSAvKiBDb2xvck1hdHJpeC5oICovLApAQCAtMzI3OTcsNiArMzI4MDAsNyBAQAogCQkJCUE1
MDcxRTg3MUM1NkQwRTEwMDk5NTFCRSAvKiBSZXNvdXJjZVVzYWdlVGhyZWFkLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MTg5MzhCMjI0MjlGOUI0MDA3RkRDNDEgLyogUmV0cmlldmVSZWNvcmRzT3B0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwQTUxMkIwMjZGNzAwQzFBMzU5IC8qIFJl
dmVyYi5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NBQzZBRjAyNDdGNDExMDAwRTYxRDU5IC8qIENv
bG9yQ29tcG9uZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwQTcxMkIwMjZGNzAwQzFB
MzU5IC8qIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQz
MTYwQTkxMkIwMjZGNzAwQzFBMzU5IC8qIFJldmVyYkNvbnZvbHZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkQzMTYwQUIxMkIwMjZGNzAwQzFBMzU5IC8qIFJldmVyYkNvbnZvbHZlclN0YWdlLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIENvbG9y
IENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyB0b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpLCBTZW1hbnRpYyB9OwogfQogCi1zdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxv
YXRDb21wb25lbnRzPiBDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdAorc3Rk
OjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IENvbG9yOjpjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CiB7CiAgICAgaWYgKGlzRXh0ZW5kZWQoKSkgewogICAg
ICAgICBhdXRvJiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOwpAQCAtMzE0LDcgKzMxNCw3
IEBAIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IEMKICAgICB9CiAKICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGFzU2ltcGxlQ29sb3IoKTsKLSAgICByZXR1cm4geyBDb2xv
clNwYWNlOjpTUkdCLCBGbG9hdENvbXBvbmVudHMgeyByIC8gMjU1LjBmLCBnIC8gMjU1LjBmLCBi
IC8gMjU1LjBmLCAgYSAvIDI1NS4wZiB9IH07CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JH
QiwgQ29sb3JDb21wb25lbnRzPGZsb2F0PiB7IHIgLyAyNTUuMGYsIGcgLyAyNTUuMGYsIGIgLyAy
NTUuMGYsICBhIC8gMjU1LjBmIH0gfTsKIH0KIAogU2ltcGxlQ29sb3IgQ29sb3I6OnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCkgY29uc3QKQEAgLTMyNyw3ICszMjcsNyBAQCBTaW1wbGVDb2xvciBD
b2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zCiAgICAgcmV0dXJuIGFzU2ltcGxlQ29sb3IoKTsK
IH0KIAotRmxvYXRDb21wb25lbnRzIENvbG9yOjp0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkgY29u
c3QKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gQ29sb3I6OnRvU1JHQkFDb21wb25lbnRzTG9zc3ko
KSBjb25zdAogewogICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKTsKICAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjYyMjIxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsOCArNTEsNiBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtSR0JBOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBGbG9hdENvbXBvbmVudHM7Ci0KIGNsYXNzIENvbG9y
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTE1MCwxMyArMTQ4
LDEzIEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IGNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENv
bG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IGNvbG9yU3BhY2VBbmRDb21wb25lbnRz
KCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNl
IGNvbG9ycyBpbnRvIHNSR0IuCiAgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29sb3IgdG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdDsKIAogICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5v
bi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICBXRUJDT1JFX0VYUE9SVCBG
bG9hdENvbXBvbmVudHMgdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gdG9TUkdCQUNvbXBvbmVudHNMb3NzeSgp
IGNvbnN0OwogCiAgICAgQ29sb3IgbGlnaHQoKSBjb25zdDsKICAgICBDb2xvciBkYXJrKCkgY29u
c3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbXBvbmVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckNvbXBvbmVudHMuaAkocmV2aXNpb24gMjYyMjE5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOjI2MjIxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RydWN0IEZsb2F0Q29tcG9uZW50cyB7CisgICAgRmxvYXRDb21wb25lbnRz
KGZsb2F0IGEgPSAwLCBmbG9hdCBiID0gMCwgZmxvYXQgYyA9IDAsIGZsb2F0IGQgPSAwKQorICAg
IHsKKyAgICAgICAgY29tcG9uZW50c1swXSA9IGE7CisgICAgICAgIGNvbXBvbmVudHNbMV0gPSBi
OworICAgICAgICBjb21wb25lbnRzWzJdID0gYzsKKyAgICAgICAgY29tcG9uZW50c1szXSA9IGQ7
CisgICAgfQorCisgICAgRmxvYXRDb21wb25lbnRzKGNvbnN0IHN0ZDo6YXJyYXk8ZmxvYXQsIDQ+
JiB2YWx1ZXMpCisgICAgeworICAgICAgICBjb21wb25lbnRzWzBdID0gdmFsdWVzWzBdOworICAg
ICAgICBjb21wb25lbnRzWzFdID0gdmFsdWVzWzFdOworICAgICAgICBjb21wb25lbnRzWzJdID0g
dmFsdWVzWzJdOworICAgICAgICBjb21wb25lbnRzWzNdID0gdmFsdWVzWzNdOworICAgIH0KKwor
ICAgIEZsb2F0Q29tcG9uZW50cyYgb3BlcmF0b3IrPShjb25zdCBGbG9hdENvbXBvbmVudHMmIHJo
cykKKyAgICB7CisgICAgICAgIGNvbXBvbmVudHNbMF0gKz0gcmhzLmNvbXBvbmVudHNbMF07Cisg
ICAgICAgIGNvbXBvbmVudHNbMV0gKz0gcmhzLmNvbXBvbmVudHNbMV07CisgICAgICAgIGNvbXBv
bmVudHNbMl0gKz0gcmhzLmNvbXBvbmVudHNbMl07CisgICAgICAgIGNvbXBvbmVudHNbM10gKz0g
cmhzLmNvbXBvbmVudHNbM107CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBG
bG9hdENvbXBvbmVudHMgb3BlcmF0b3IrKGZsb2F0IHJocykgY29uc3QKKyAgICB7CisgICAgICAg
IEZsb2F0Q29tcG9uZW50cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzBdID0g
Y29tcG9uZW50c1swXSArIHJoczsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMV0gPSBjb21w
b25lbnRzWzFdICsgcmhzOworICAgICAgICByZXN1bHQuY29tcG9uZW50c1syXSA9IGNvbXBvbmVu
dHNbMl0gKyByaHM7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzNdID0gY29tcG9uZW50c1sz
XSArIHJoczsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBGbG9hdENvbXBv
bmVudHMgb3BlcmF0b3IvKGZsb2F0IGRlbm9taW5hdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAg
RmxvYXRDb21wb25lbnRzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0gPSBj
b21wb25lbnRzWzBdIC8gZGVub21pbmF0b3I7CisgICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFd
ID0gY29tcG9uZW50c1sxXSAvIGRlbm9taW5hdG9yOworICAgICAgICByZXN1bHQuY29tcG9uZW50
c1syXSA9IGNvbXBvbmVudHNbMl0gLyBkZW5vbWluYXRvcjsKKyAgICAgICAgcmVzdWx0LmNvbXBv
bmVudHNbM10gPSBjb21wb25lbnRzWzNdIC8gZGVub21pbmF0b3I7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgRmxvYXRDb21wb25lbnRzIG9wZXJhdG9yKihmbG9hdCBmYWN0
b3IpIGNvbnN0CisgICAgeworICAgICAgICBGbG9hdENvbXBvbmVudHMgcmVzdWx0OworICAgICAg
ICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNvbXBvbmVudHNbMF0gKiBmYWN0b3I7CisgICAgICAg
IHJlc3VsdC5jb21wb25lbnRzWzFdID0gY29tcG9uZW50c1sxXSAqIGZhY3RvcjsKKyAgICAgICAg
cmVzdWx0LmNvbXBvbmVudHNbMl0gPSBjb21wb25lbnRzWzJdICogZmFjdG9yOworICAgICAgICBy
ZXN1bHQuY29tcG9uZW50c1szXSA9IGNvbXBvbmVudHNbM10gKiBmYWN0b3I7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgRmxvYXRDb21wb25lbnRzIGFicygpIGNvbnN0Cisg
ICAgeworICAgICAgICBGbG9hdENvbXBvbmVudHMgcmVzdWx0OworICAgICAgICByZXN1bHQuY29t
cG9uZW50c1swXSA9IGZhYnMoY29tcG9uZW50c1swXSk7CisgICAgICAgIHJlc3VsdC5jb21wb25l
bnRzWzFdID0gZmFicyhjb21wb25lbnRzWzFdKTsKKyAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNb
Ml0gPSBmYWJzKGNvbXBvbmVudHNbMl0pOworICAgICAgICByZXN1bHQuY29tcG9uZW50c1szXSA9
IGZhYnMoY29tcG9uZW50c1szXSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KKyAgICBmbG9hdCBnZXQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbTl07CisgICAgfQorCisgICAgc3RkOjphcnJheTxm
bG9hdCwgND4gY29tcG9uZW50czsKK307CisKK2Jvb2wgYXJlRXNzZW50aWFsbHlFcXVhbChjb25z
dCBGbG9hdENvbXBvbmVudHMmLCBjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKKworc3RydWN0IENv
bG9yQ29tcG9uZW50cyB7CisgICAgQ29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50
cyYpOworICAgIAorICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHMgZnJvbVJHQkEodW5zaWduZWQg
cGl4ZWwpCisgICAgeworICAgICAgICByZXR1cm4gQ29sb3JDb21wb25lbnRzKChwaXhlbCA+PiAy
NCkgJiAweEZGLCAocGl4ZWwgPj4gMTYpICYgMHhGRiwgKHBpeGVsID4+IDgpICYgMHhGRiwgcGl4
ZWwgJiAweEZGKTsKKyAgICB9CisgICAgCisgICAgQ29sb3JDb21wb25lbnRzKHVpbnQ4X3QgYSA9
IDAsIHVpbnQ4X3QgYiA9IDAsIHVpbnQ4X3QgYyA9IDAsIHVpbnQ4X3QgZCA9IDApCisgICAgewor
ICAgICAgICBjb21wb25lbnRzWzBdID0gYTsKKyAgICAgICAgY29tcG9uZW50c1sxXSA9IGI7Cisg
ICAgICAgIGNvbXBvbmVudHNbMl0gPSBjOworICAgICAgICBjb21wb25lbnRzWzNdID0gZDsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgdG9SR0JBKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBjb21wb25lbnRzWzBdIDw8IDI0IHwgY29tcG9uZW50c1sxXSA8PCAxNiB8IGNvbXBvbmVu
dHNbMl0gPDwgOCB8IGNvbXBvbmVudHNbM107CisgICAgfQorCisgICAgc3RkOjphcnJheTx1aW50
OF90LCA0PiBjb21wb25lbnRzOworfTsKKworaW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21w
b25lbnRNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMm
IGIpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzBdLCBi
LmNvbXBvbmVudHNbMF0pLAorICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMV0sIGIuY29t
cG9uZW50c1sxXSksCisgICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1syXSwgYi5jb21wb25l
bnRzWzJdKSwKKyAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzNdLCBiLmNvbXBvbmVudHNb
M10pCisgICAgfTsKK30KKworaW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21wb25lbnRNaW4o
Y29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCit7Cisg
ICAgcmV0dXJuIHsKKyAgICAgICAgc3RkOjptaW4oYS5jb21wb25lbnRzWzBdLCBiLmNvbXBvbmVu
dHNbMF0pLAorICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbMV0sIGIuY29tcG9uZW50c1sx
XSksCisgICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1syXSwgYi5jb21wb25lbnRzWzJdKSwK
KyAgICAgICAgc3RkOjptaW4oYS5jb21wb25lbnRzWzNdLCBiLmNvbXBvbmVudHNbM10pCisgICAg
fTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvckNvbXBvbmVudHMmIGEs
IGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK3sKKyAgICByZXR1cm4gYS5jb21wb25lbnRzID09
IGIuY29tcG9uZW50czsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvckNv
bXBvbmVudHMmIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYikKK3sKKyAgICByZXR1cm4gIShh
ID09IGIpOworfQorCitpbmxpbmUgdWludDhfdCBjbGFtcGVkQ29sb3JDb21wb25lbnQoZmxvYXQg
ZikKK3sKKyAgICAvLyBTZWUgYWxzbyBjb2xvckZsb2F0VG9SR0JBQnl0ZSgpLgorICAgIHJldHVy
biBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDAsIDI1
NSk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1
bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBieXRl
c1BlclBpeGVsID0gNDsKKyAgICByZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0
ZXM7Cit9CisKKy8vIDAtMSBjb21wb25lbnRzLCByZXN1bHQgaXMgY2xhbXBlZC4KK2Zsb2F0IGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOworZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudChmbG9hdCk7CisKK0Zsb2F0Q29tcG9uZW50cyByZ2JUb0xpbmVhckNvbXBvbmVudHMo
Y29uc3QgRmxvYXRDb21wb25lbnRzJik7CitGbG9hdENvbXBvbmVudHMgbGluZWFyVG9SR0JDb21w
b25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOworCitGbG9hdENvbXBvbmVudHMgcDNUb1NS
R0IoY29uc3QgRmxvYXRDb21wb25lbnRzJik7CitGbG9hdENvbXBvbmVudHMgc1JHQlRvUDMoY29u
c3QgRmxvYXRDb21wb25lbnRzJik7CisKK1dFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyBz
UkdCVG9IU0woY29uc3QgRmxvYXRDb21wb25lbnRzJik7CitXRUJDT1JFX0VYUE9SVCBGbG9hdENv
bXBvbmVudHMgaHNsVG9TUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOworCitmbG9hdCBsaWdo
dG5lc3MoY29uc3QgRmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVudHMpOworZmxvYXQgbHVt
aW5hbmNlKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKTsKK2Zsb2F0IGNv
bnRyYXN0UmF0aW8oY29uc3QgRmxvYXRDb21wb25lbnRzJiwgY29uc3QgRmxvYXRDb21wb25lbnRz
Jik7CisKK0Zsb2F0Q29tcG9uZW50cyBwcmVtdWx0aXBsaWVkKGNvbnN0IEZsb2F0Q29tcG9uZW50
cyYgc1JHQkNvbXBvbnRlbnRzKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3Bh
Y2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpGbG9hdENv
bXBvbmVudHM+IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDQ+
IHsKK307CisKK3RlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CitjbGFzcyB0dXBsZV9lbGVtZW50PE4s
IFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50cz4geworcHVibGljOgorICAgIHVzaW5nIHR5cGUgPSBm
bG9hdDsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yQ29tcG9uZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQ29tcG9uZW50cy5oCShyZXZpc2lvbiAyNjIyMTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckNvbXBvbmVudHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMjcgKzI4LDIzIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGFycmF5
PgogI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx0dXBsZT4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKLSAgICBGbG9hdENvbXBvbmVudHMoZmxv
YXQgYSA9IDAsIGZsb2F0IGIgPSAwLCBmbG9hdCBjID0gMCwgZmxvYXQgZCA9IDApCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RydWN0IENvbG9yQ29tcG9uZW50cyB7CisgICAgQ29sb3JDb21wb25l
bnRzKFQgYSA9IDAsIFQgYiA9IDAsIFQgYyA9IDAsIFQgZCA9IDApCisgICAgICAgIDogY29tcG9u
ZW50cyB7IGEsIGIsIGMsIGQgfQogICAgIHsKLSAgICAgICAgY29tcG9uZW50c1swXSA9IGE7Ci0g
ICAgICAgIGNvbXBvbmVudHNbMV0gPSBiOwotICAgICAgICBjb21wb25lbnRzWzJdID0gYzsKLSAg
ICAgICAgY29tcG9uZW50c1szXSA9IGQ7CiAgICAgfQogCi0gICAgRmxvYXRDb21wb25lbnRzKGNv
bnN0IHN0ZDo6YXJyYXk8ZmxvYXQsIDQ+JiB2YWx1ZXMpCisgICAgQ29sb3JDb21wb25lbnRzKGNv
bnN0IHN0ZDo6YXJyYXk8VCwgND4mIHZhbHVlcykKKyAgICAgICAgOiBjb21wb25lbnRzIHsgdmFs
dWVzIH0KICAgICB7Ci0gICAgICAgIGNvbXBvbmVudHNbMF0gPSB2YWx1ZXNbMF07Ci0gICAgICAg
IGNvbXBvbmVudHNbMV0gPSB2YWx1ZXNbMV07Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSB2YWx1
ZXNbMl07Ci0gICAgICAgIGNvbXBvbmVudHNbM10gPSB2YWx1ZXNbM107CiAgICAgfQogCi0gICAg
RmxvYXRDb21wb25lbnRzJiBvcGVyYXRvcis9KGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgcmhzKQor
ICAgIENvbG9yQ29tcG9uZW50cyYgb3BlcmF0b3IrPShjb25zdCBDb2xvckNvbXBvbmVudHMmIHJo
cykKICAgICB7CiAgICAgICAgIGNvbXBvbmVudHNbMF0gKz0gcmhzLmNvbXBvbmVudHNbMF07CiAg
ICAgICAgIGNvbXBvbmVudHNbMV0gKz0gcmhzLmNvbXBvbmVudHNbMV07CkBAIC01Nyw4MiArNTMs
NTggQEAgc3RydWN0IEZsb2F0Q29tcG9uZW50cyB7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMgb3BlcmF0b3IrKGZsb2F0IHJocykgY29uc3QKKyAg
ICBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IrKFQgcmhzKSBjb25zdAogICAgIHsKLSAgICAgICAg
RmxvYXRDb21wb25lbnRzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0gPSBj
b21wb25lbnRzWzBdICsgcmhzOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9IGNvbXBv
bmVudHNbMV0gKyByaHM7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gY29tcG9uZW50
c1syXSArIHJoczsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBjb21wb25lbnRzWzNd
ICsgcmhzOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgY29tcG9uZW50c1swXSArIHJocywKKyAgICAgICAgICAgIGNvbXBvbmVudHNbMV0gKyBy
aHMsCisgICAgICAgICAgICBjb21wb25lbnRzWzJdICsgcmhzLAorICAgICAgICAgICAgY29tcG9u
ZW50c1szXSArIHJocworICAgICAgICB9OwogICAgIH0KIAotICAgIEZsb2F0Q29tcG9uZW50cyBv
cGVyYXRvci8oZmxvYXQgZGVub21pbmF0b3IpIGNvbnN0CisgICAgQ29sb3JDb21wb25lbnRzIG9w
ZXJhdG9yLyhUIGRlbm9taW5hdG9yKSBjb25zdAogICAgIHsKLSAgICAgICAgRmxvYXRDb21wb25l
bnRzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0gPSBjb21wb25lbnRzWzBd
IC8gZGVub21pbmF0b3I7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzFdID0gY29tcG9uZW50
c1sxXSAvIGRlbm9taW5hdG9yOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1syXSA9IGNvbXBv
bmVudHNbMl0gLyBkZW5vbWluYXRvcjsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBj
b21wb25lbnRzWzNdIC8gZGVub21pbmF0b3I7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICBjb21wb25lbnRzWzBdIC8gZGVub21pbmF0b3IsCisg
ICAgICAgICAgICBjb21wb25lbnRzWzFdIC8gZGVub21pbmF0b3IsCisgICAgICAgICAgICBjb21w
b25lbnRzWzJdIC8gZGVub21pbmF0b3IsCisgICAgICAgICAgICBjb21wb25lbnRzWzNdIC8gZGVu
b21pbmF0b3IKKyAgICAgICAgfTsKICAgICB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMgb3BlcmF0
b3IqKGZsb2F0IGZhY3RvcikgY29uc3QKKyAgICBDb2xvckNvbXBvbmVudHMgb3BlcmF0b3IqKFQg
ZmFjdG9yKSBjb25zdAogICAgIHsKLSAgICAgICAgRmxvYXRDb21wb25lbnRzIHJlc3VsdDsKLSAg
ICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0gPSBjb21wb25lbnRzWzBdICogZmFjdG9yOwotICAg
ICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9IGNvbXBvbmVudHNbMV0gKiBmYWN0b3I7Ci0gICAg
ICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gY29tcG9uZW50c1syXSAqIGZhY3RvcjsKLSAgICAg
ICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBjb21wb25lbnRzWzNdICogZmFjdG9yOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgY29tcG9uZW50
c1swXSAqIGZhY3RvciwKKyAgICAgICAgICAgIGNvbXBvbmVudHNbMV0gKiBmYWN0b3IsCisgICAg
ICAgICAgICBjb21wb25lbnRzWzJdICogZmFjdG9yLAorICAgICAgICAgICAgY29tcG9uZW50c1sz
XSAqIGZhY3RvcgorICAgICAgICB9OwogICAgIH0KIAotICAgIEZsb2F0Q29tcG9uZW50cyBhYnMo
KSBjb25zdAorICAgIENvbG9yQ29tcG9uZW50cyBhYnMoKSBjb25zdAogICAgIHsKLSAgICAgICAg
RmxvYXRDb21wb25lbnRzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0gPSBm
YWJzKGNvbXBvbmVudHNbMF0pOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9IGZhYnMo
Y29tcG9uZW50c1sxXSk7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gZmFicyhjb21w
b25lbnRzWzJdKTsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBmYWJzKGNvbXBvbmVu
dHNbM10pOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgc3RkOjphYnMoY29tcG9uZW50c1swXSksCisgICAgICAgICAgICBzdGQ6OmFicyhjb21w
b25lbnRzWzFdKSwKKyAgICAgICAgICAgIHN0ZDo6YWJzKGNvbXBvbmVudHNbMl0pLAorICAgICAg
ICAgICAgc3RkOjphYnMoY29tcG9uZW50c1szXSkKKyAgICAgICAgfTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgotICAgIGZsb2F0IGdldCgpIGNvbnN0CisgICAgVCBnZXQo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbTl07CiAgICAgfQogCi0g
ICAgc3RkOjphcnJheTxmbG9hdCwgND4gY29tcG9uZW50czsKKyAgICBzdGQ6OmFycmF5PFQsIDQ+
IGNvbXBvbmVudHM7CiB9OwogCi1ib29sIGFyZUVzc2VudGlhbGx5RXF1YWwoY29uc3QgRmxvYXRD
b21wb25lbnRzJiwgY29uc3QgRmxvYXRDb21wb25lbnRzJik7Ci0KLXN0cnVjdCBDb2xvckNvbXBv
bmVudHMgewotICAgIENvbG9yQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLSAg
ICAKLSAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzIGZyb21SR0JBKHVuc2lnbmVkIHBpeGVsKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIENvbG9yQ29tcG9uZW50cygocGl4ZWwgPj4gMjQpICYgMHhG
RiwgKHBpeGVsID4+IDE2KSAmIDB4RkYsIChwaXhlbCA+PiA4KSAmIDB4RkYsIHBpeGVsICYgMHhG
Rik7Ci0gICAgfQotICAgIAotICAgIENvbG9yQ29tcG9uZW50cyh1aW50OF90IGEgPSAwLCB1aW50
OF90IGIgPSAwLCB1aW50OF90IGMgPSAwLCB1aW50OF90IGQgPSAwKQotICAgIHsKLSAgICAgICAg
Y29tcG9uZW50c1swXSA9IGE7Ci0gICAgICAgIGNvbXBvbmVudHNbMV0gPSBiOwotICAgICAgICBj
b21wb25lbnRzWzJdID0gYzsKLSAgICAgICAgY29tcG9uZW50c1szXSA9IGQ7Ci0gICAgfQotICAg
IAotICAgIHVuc2lnbmVkIHRvUkdCQSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gY29t
cG9uZW50c1swXSA8PCAyNCB8IGNvbXBvbmVudHNbMV0gPDwgMTYgfCBjb21wb25lbnRzWzJdIDw8
IDggfCBjb21wb25lbnRzWzNdOwotICAgIH0KLQotICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgND4g
Y29tcG9uZW50czsKLX07CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHMgcGVyQ29tcG9uZW50TWF4
KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzJiBiKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBDb2xvckNvbXBvbmVudHM8VD4gcGVyQ29tcG9uZW50
TWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+
JiBiKQogewogICAgIHJldHVybiB7CiAgICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1swXSwg
Yi5jb21wb25lbnRzWzBdKSwKQEAgLTE0Miw3ICsxMTQsOCBAQCBpbmxpbmUgQ29sb3JDb21wb25l
bnRzIHBlckNvbXBvbmVudE1heChjCiAgICAgfTsKIH0KIAotaW5saW5lIENvbG9yQ29tcG9uZW50
cyBwZXJDb21wb25lbnRNaW4oY29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNv
bXBvbmVudHMmIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIENvbG9yQ29tcG9uZW50
czxUPiBwZXJDb21wb25lbnRNaW4oY29uc3QgQ29sb3JDb21wb25lbnRzPFQ+JiBhLCBjb25zdCBD
b2xvckNvbXBvbmVudHM8VD4mIGIpCiB7CiAgICAgcmV0dXJuIHsKICAgICAgICAgc3RkOjptaW4o
YS5jb21wb25lbnRzWzBdLCBiLmNvbXBvbmVudHNbMF0pLApAQCAtMTUyLDU5ICsxMjUsMzAgQEAg
aW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21wb25lbnRNaW4oYwogICAgIH07CiB9CiAKLWlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xv
ckNvbXBvbmVudHMmIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb2xvckNvbXBvbmVudHM8VD4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czxU
PiYgYikKIHsKICAgICByZXR1cm4gYS5jb21wb25lbnRzID09IGIuY29tcG9uZW50czsKIH0KIAot
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvckNvbXBvbmVudHMmIGEsIGNvbnN0IENv
bG9yQ29tcG9uZW50cyYgYikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IENvbG9yQ29tcG9uZW50czxUPiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRz
PFQ+JiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWlubGluZSB1aW50OF90IGNs
YW1wZWRDb2xvckNvbXBvbmVudChmbG9hdCBmKQotewotICAgIC8vIFNlZSBhbHNvIGNvbG9yRmxv
YXRUb1JHQkFCeXRlKCkuCi0gICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGJ5dGVP
ZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQot
ewotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICog
Ynl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRlczsKLX0KLQotLy8gMC0xIGNvbXBvbmVudHMsIHJl
c3VsdCBpcyBjbGFtcGVkLgotZmxvYXQgbGluZWFyVG9SR0JDb2xvckNvbXBvbmVudChmbG9hdCk7
Ci1mbG9hdCByZ2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLQotRmxvYXRDb21wb25l
bnRzIHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLUZsb2F0
Q29tcG9uZW50cyBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7
Ci0KLUZsb2F0Q29tcG9uZW50cyBwM1RvU1JHQihjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLUZs
b2F0Q29tcG9uZW50cyBzUkdCVG9QMyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLQotV0VCQ09S
RV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIHNSR0JUb0hTTChjb25zdCBGbG9hdENvbXBvbmVudHMm
KTsKLVdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyBoc2xUb1NSR0IoY29uc3QgRmxvYXRD
b21wb25lbnRzJik7Ci0KLWZsb2F0IGxpZ2h0bmVzcyhjb25zdCBGbG9hdENvbXBvbmVudHMmIHNS
R0JDb21wb250ZW50cyk7Ci1mbG9hdCBsdW1pbmFuY2UoY29uc3QgRmxvYXRDb21wb25lbnRzJiBz
UkdCQ29tcG9udGVudHMpOwotZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBGbG9hdENvbXBvbmVu
dHMmLCBjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLQotRmxvYXRDb21wb25lbnRzIHByZW11bHRp
cGxpZWQoY29uc3QgRmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVudHMpOwotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBzdGQgewogCi10ZW1wbGF0ZTw+Ci1jbGFzcyB0
dXBsZV9zaXplPFdlYkNvcmU6OkZsb2F0Q29tcG9uZW50cz4gOiBwdWJsaWMgc3RkOjppbnRlZ3Jh
bF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4gewordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IHR1cGxlX3NpemU8V2ViQ29yZTo6Q29sb3JDb21wb25lbnRzPFQ+PiA6IHB1YmxpYyBzdGQ6Omlu
dGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCA0PiB7CiB9OwogCi10ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPgotY2xhc3MgdHVwbGVfZWxlbWVudDxOLCBXZWJDb3JlOjpGbG9hdENvbXBvbmVudHM+
IHsKK3RlbXBsYXRlPHN0ZDo6c2l6ZV90IE4sIHR5cGVuYW1lIFQ+CitjbGFzcyB0dXBsZV9lbGVt
ZW50PE4sIFdlYkNvcmU6OkNvbG9yQ29tcG9uZW50czxUPj4gewogcHVibGljOgotICAgIHVzaW5n
IHR5cGUgPSBmbG9hdDsKKyAgICB1c2luZyB0eXBlID0gVDsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0cml4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1hdHJpeC5jcHAJKHJldmlz
aW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yTWF0
cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNvbG9yTWF0cml4LmgiCiAKKyNpbmNsdWRlICJDb2xvckNvbXBvbmVu
dHMuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0xNTgsNyArMTU5LDcgQEAgQ29sb3JNYXRyaXggQ29sb3JNYXRyaXg6OnNlcGlhTWF0cml4
KGZsbwogICAgIHJldHVybiBtYXRyaXg7CiB9CiAKLXZvaWQgQ29sb3JNYXRyaXg6OnRyYW5zZm9y
bUNvbG9yQ29tcG9uZW50cyhGbG9hdENvbXBvbmVudHMmIGNvbG9yQ29tcG9uZW50cykgY29uc3QK
K3ZvaWQgQ29sb3JNYXRyaXg6OnRyYW5zZm9ybUNvbG9yQ29tcG9uZW50cyhDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+JiBjb2xvckNvbXBvbmVudHMpIGNvbnN0CiB7CiAgICAgYXV0byBbcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGFdID0gY29sb3JDb21wb25lbnRzOwogCkBAIC0xNjgsNyArMTY5LDcgQEAg
dm9pZCBDb2xvck1hdHJpeDo6dHJhbnNmb3JtQ29sb3JDb21wb25lbgogICAgIGNvbG9yQ29tcG9u
ZW50cy5jb21wb25lbnRzWzNdID0gbV9tYXRyaXhbM11bMF0gKiByZWQgKyBtX21hdHJpeFszXVsx
XSAqIGdyZWVuICsgbV9tYXRyaXhbM11bMl0gKiBibHVlICsgbV9tYXRyaXhbM11bM10gKiBhbHBo
YSArIG1fbWF0cml4WzNdWzRdOwogfQogCi1GbG9hdENvbXBvbmVudHMgQ29sb3JNYXRyaXg6OnRy
YW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgY29sb3JDb21w
b25lbnRzKSBjb25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvck1hdHJpeDo6dHJhbnNm
b3JtZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29sb3JD
b21wb25lbnRzKSBjb25zdAogewogICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9
IGNvbG9yQ29tcG9uZW50czsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvck1hdHJpeC5oCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvck1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZsb2F0Q29tcG9uZW50
czsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2xvckNvbXBvbmVudHM7CiAKIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBsaWtlbHkgYmUgcmVwbGFjZWQgYnkgYSBnZW5lcmljIG1hdHJpeCBj
bGFzcy4gT3RoZXIgdGhhbgogLy8gdGhlIHNwZWNpZmljIG1hdHJpeCBjb25zdHVjdG9ycywgdGhl
cmUgaXMgbm90aGluZyBjb2xvciBzcGVjaWZpYyBhYm91dCB0aGlzLgpAQCAtNDMsOCArNDMsOCBA
QCBwdWJsaWM6CiAgICAgQ29sb3JNYXRyaXgoKTsKICAgICBDb2xvck1hdHJpeChjb25zdCBmbG9h
dFsyMF0pOwogICAgIAotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKEZsb2F0Q29t
cG9uZW50cyYpIGNvbnN0OwotICAgIEZsb2F0Q29tcG9uZW50cyB0cmFuc2Zvcm1lZENvbG9yQ29t
cG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKSBjb25zdDsKKyAgICB2b2lkIHRyYW5zZm9y
bUNvbG9yQ29tcG9uZW50cyhDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Q7CisgICAgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiB0cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBtYWtlSWRl
bnRpdHkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMjAgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29sb3JVdGls
aXRpZXMuaCIKIAorI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNvbG9y
TWF0cml4LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1Db2xvckNvbXBvbmVudHM6OkNvbG9yQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBv
bmVudHMmIGZsb2F0Q29tcG9uZW50cykKLXsKLSAgICBjb21wb25lbnRzWzBdID0gY2xhbXBlZENv
bG9yQ29tcG9uZW50KGZsb2F0Q29tcG9uZW50cy5jb21wb25lbnRzWzBdKTsKLSAgICBjb21wb25l
bnRzWzFdID0gY2xhbXBlZENvbG9yQ29tcG9uZW50KGZsb2F0Q29tcG9uZW50cy5jb21wb25lbnRz
WzFdKTsKLSAgICBjb21wb25lbnRzWzJdID0gY2xhbXBlZENvbG9yQ29tcG9uZW50KGZsb2F0Q29t
cG9uZW50cy5jb21wb25lbnRzWzJdKTsKLSAgICBjb21wb25lbnRzWzNdID0gY2xhbXBlZENvbG9y
Q29tcG9uZW50KGZsb2F0Q29tcG9uZW50cy5jb21wb25lbnRzWzNdKTsKLX0KLQotYm9vbCBhcmVF
c3NlbnRpYWxseUVxdWFsKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgYSwgY29uc3QgRmxvYXRDb21w
b25lbnRzJiBiKQorYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdD4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGIpCiB7CiAgICAgcmV0
dXJuIFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChhLmNvbXBvbmVudHNbMF0sIGIuY29tcG9uZW50
c1swXSkKICAgICAgICAgJiYgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGEuY29tcG9uZW50c1sx
XSwgYi5jb21wb25lbnRzWzFdKQpAQCAtNjQsNyArNTYsNyBAQCBmbG9hdCByZ2JUb0xpbmVhckNv
bG9yQ29tcG9uZW50KGZsb2F0IGMpCiAgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHN0ZDo6cG93
KChjICsgMC4wNTVmKSAvIDEuMDU1ZiwgMi40ZiksIDAsIDEpOwogfQogCi1GbG9hdENvbXBvbmVu
dHMgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgUkdCQ29sb3Ip
CitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+JiBSR0JDb2xvcikKIHsKICAgICByZXR1cm4gewogICAgICAgICBy
Z2JUb0xpbmVhckNvbG9yQ29tcG9uZW50KFJHQkNvbG9yLmNvbXBvbmVudHNbMF0pLApAQCAtNzQs
NyArNjYsNyBAQCBGbG9hdENvbXBvbmVudHMgcmdiVG9MaW5lYXJDb21wb25lbnRzKGNvCiAgICAg
fTsKIH0KIAotRmxvYXRDb21wb25lbnRzIGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25zdCBGbG9h
dENvbXBvbmVudHMmIGxpbmVhclJHQikKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyVG9S
R0JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIGxpbmVhclJHQikKIHsK
ICAgICByZXR1cm4gewogICAgICAgICBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGxpbmVhclJH
Qi5jb21wb25lbnRzWzBdKSwKQEAgLTg0LDcgKzc2LDcgQEAgRmxvYXRDb21wb25lbnRzIGxpbmVh
clRvUkdCQ29tcG9uZW50cyhjbwogICAgIH07CiB9CiAKLXN0YXRpYyBGbG9hdENvbXBvbmVudHMg
eHl6VG9MaW5lYXJTUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgWFlaQ29tcG9uZW50cykKK3N0
YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHh5elRvTGluZWFyU1JHQihjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQogewogICAgIC8vIGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL1NSR0IKICAgICAvLyBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNv
bS9pbmRleC5odG1sP0Vxbl9SR0JfWFlaX01hdHJpeC5odG1sCkBAIC05OCw3ICs5MCw3IEBAIHN0
YXRpYyBGbG9hdENvbXBvbmVudHMgeHl6VG9MaW5lYXJTUkdCKGMKICAgICByZXR1cm4geHl6VG9M
aW5lYXJTUkdCTWF0cml4LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKFhZWkNvbXBvbmVudHMp
OwogfQogCi1zdGF0aWMgRmxvYXRDb21wb25lbnRzIGxpbmVhclNSR0JUb1hZWihjb25zdCBGbG9h
dENvbXBvbmVudHMmIFhZWkNvbXBvbmVudHMpCitzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBsaW5lYXJTUkdCVG9YWVooY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgWFlaQ29tcG9u
ZW50cykKIHsKICAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUkdCCiAgICAg
Ly8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fUkdCX1hZWl9N
YXRyaXguaHRtbApAQCAtMTEyLDcgKzEwNCw3IEBAIHN0YXRpYyBGbG9hdENvbXBvbmVudHMgbGlu
ZWFyU1JHQlRvWFlaKGMKICAgICByZXR1cm4gbGluZWFyU1JHQlRvWFlaTWF0cml4LnRyYW5zZm9y
bWVkQ29sb3JDb21wb25lbnRzKFhZWkNvbXBvbmVudHMpOwogfQogCi1zdGF0aWMgRmxvYXRDb21w
b25lbnRzIFhZWlRvTGluZWFyUDMoY29uc3QgRmxvYXRDb21wb25lbnRzJiBYWVpDb21wb25lbnRz
KQorc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4gWFlaVG9MaW5lYXJQMyhjb25zdCBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQogewogICAgIC8vIGh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQogICAgIGNvbnN0
IGZsb2F0IHZhbHVlc1tdID0gewpAQCAtMTI1LDcgKzExNyw3IEBAIHN0YXRpYyBGbG9hdENvbXBv
bmVudHMgWFlaVG9MaW5lYXJQMyhjb24KICAgICByZXR1cm4geHl6VG9MaW5lYXJTUkdCTWF0cml4
LnRyYW5zZm9ybWVkQ29sb3JDb21wb25lbnRzKFhZWkNvbXBvbmVudHMpOwogfQogCi1zdGF0aWMg
RmxvYXRDb21wb25lbnRzIGxpbmVhclAzVG9YWVooY29uc3QgRmxvYXRDb21wb25lbnRzJiBYWVpD
b21wb25lbnRzKQorc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbGluZWFyUDNUb1hZWihj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBYWVpDb21wb25lbnRzKQogewogICAgIC8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3IvI2NvbG9yLWNvbnZlcnNpb24tY29kZQog
ICAgIGNvbnN0IGZsb2F0IHZhbHVlc1tdID0gewpAQCAtMTM4LDcgKzEzMCw3IEBAIHN0YXRpYyBG
bG9hdENvbXBvbmVudHMgbGluZWFyUDNUb1hZWihjb24KICAgICByZXR1cm4gbGluZWFyUDNUb1hZ
Wk1hdHJpeC50cmFuc2Zvcm1lZENvbG9yQ29tcG9uZW50cyhYWVpDb21wb25lbnRzKTsKIH0KIAot
RmxvYXRDb21wb25lbnRzIHAzVG9TUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgcDMpCitDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+IHAzVG9TUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
IHAzKQogewogICAgIGF1dG8gbGluZWFyUDMgPSByZ2JUb0xpbmVhckNvbXBvbmVudHMocDMpOwog
ICAgIGF1dG8geHl6ID0gbGluZWFyUDNUb1hZWihsaW5lYXJQMyk7CkBAIC0xNDYsNyArMTM4LDcg
QEAgRmxvYXRDb21wb25lbnRzIHAzVG9TUkdCKGNvbnN0IEZsb2F0Q29tcAogICAgIHJldHVybiBs
aW5lYXJUb1JHQkNvbXBvbmVudHMobGluZWFyU1JHQik7CiB9CiAKLUZsb2F0Q29tcG9uZW50cyBz
UkdCVG9QMyhjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0IpCitDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IHNSR0JUb1AzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0IpCiB7CiAgICAg
YXV0byBsaW5lYXJTUkdCID0gcmdiVG9MaW5lYXJDb21wb25lbnRzKHNSR0IpOwogICAgIGF1dG8g
eHl6ID0gbGluZWFyU1JHQlRvWFlaKGxpbmVhclNSR0IpOwpAQCAtMTU0LDcgKzE0Niw3IEBAIEZs
b2F0Q29tcG9uZW50cyBzUkdCVG9QMyhjb25zdCBGbG9hdENvbXAKICAgICByZXR1cm4gbGluZWFy
VG9SR0JDb21wb25lbnRzKGxpbmVhclAzKTsKIH0KIAotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IEZs
b2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKQorZmxvYXQgbGlnaHRuZXNzKGNvbnN0IENv
bG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cykKIHsKICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHNSR0JDb21wb250ZW50czsKIApAQCAtMTc1LDcgKzE2Nyw3IEBAIHN0YXRpYyBm
bG9hdCBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudEYKICAgICByZXR1cm4gY2xhbXBUbzxmbG9h
dD4oc3RkOjpwb3coKGMgKyAwLjA1NWYpIC8gMS4wNTVmLCAyLjRmKSwgMCwgMSk7CiB9CiAKLWZs
b2F0IGx1bWluYW5jZShjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb25lbnRzKQorZmxv
YXQgbHVtaW5hbmNlKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNSR0JDb21wb25lbnRz
KQogewogICAgIC8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1X
Q0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmCiAgICAgcmV0dXJuIDAuMjEyNmYg
KiBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudEZvckx1bWluYW5jZShzUkdCQ29tcG9uZW50cy5j
b21wb25lbnRzWzBdKQpAQCAtMTgzLDcgKzE3NSw3IEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBG
bG9hdENvbXBvbmVudHMmIHMKICAgICAgICAgKyAwLjA3MjJmICogc1JHQlRvTGluZWFyQ29sb3JD
b21wb25lbnRGb3JMdW1pbmFuY2Uoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1syXSk7CiB9CiAK
LWZsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3QgRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRzQSwg
Y29uc3QgRmxvYXRDb21wb25lbnRzJiBjb21wb25lbnRzQikKK2Zsb2F0IGNvbnRyYXN0UmF0aW8o
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29tcG9uZW50c0EsIGNvbnN0IENvbG9yQ29t
cG9uZW50czxmbG9hdD4mIGNvbXBvbmVudHNCKQogewogICAgIC8vIFVzZXMgdGhlIFdDQUcgMi4w
IGRlZmluaXRpb24gb2YgY29udHJhc3QgcmF0aW8uCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1dDQUcyMC8jY29udHJhc3QtcmF0aW9kZWYKQEAgLTE5Niw3ICsxODgsNyBAQCBmbG9hdCBj
b250cmFzdFJhdGlvKGNvbnN0IEZsb2F0Q29tcG9uZW50CiAgICAgcmV0dXJuIChsaWdodGVyTHVt
aW5hbmNlICsgMC4wNSkgLyAoZGFya2VyTHVtaW5hbmNlICsgMC4wNSk7CiB9CiAKLUZsb2F0Q29t
cG9uZW50cyBzUkdCVG9IU0woY29uc3QgRmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9udGVudHMp
CitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHNSR0JUb0hTTChjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpCiB7CiAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9IU0xfY29sb3Jfc3BhY2UuCiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gc1JH
QkNvbXBvbnRlbnRzOwpAQCAtMjU2LDcgKzI0OCw3IEBAIHN0YXRpYyBmbG9hdCBjYWxjSHVlKGZs
b2F0IHRlbXAxLCBmbG9hdCAKIC8vIEV4cGxhbmF0aW9uIG9mIHRoaXMgYWxnb3JpdGhtIGNhbiBi
ZSBmb3VuZCBpbiB0aGUgQ1NTIENvbG9yIDQgTW9kdWxlCiAvLyBzcGVjaWZpY2F0aW9uIGF0IGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtY29sb3ItNC8jaHNsLXRvLXJnYiB3aXRoCiAvLyBm
dXJ0aGVyIGV4cGxhbmF0aW9uIGF2YWlsYWJsZSBhdCBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL0hTTF9jb2xvcl9zcGFjZQotRmxvYXRDb21wb25lbnRzIGhzbFRvU1JHQihjb25zdCBGbG9h
dENvbXBvbmVudHMmIGhzbENvbG9yKQorQ29sb3JDb21wb25lbnRzPGZsb2F0PiBoc2xUb1NSR0Io
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgaHNsQ29sb3IpCiB7CiAgICAgZmxvYXQgaHVl
ID0gaHNsQ29sb3IuY29tcG9uZW50c1swXTsKICAgICBmbG9hdCBzYXR1cmF0aW9uID0gaHNsQ29s
b3IuY29tcG9uZW50c1sxXTsKQEAgLTI4NCw3ICsyNzYsNyBAQCBGbG9hdENvbXBvbmVudHMgaHNs
VG9TUkdCKGNvbnN0IEZsb2F0Q29tCiAgICAgfTsKIH0KIAotRmxvYXRDb21wb25lbnRzIHByZW11
bHRpcGxpZWQoY29uc3QgRmxvYXRDb21wb25lbnRzJiBzUkdCQ29tcG9uZW50cykKK0NvbG9yQ29t
cG9uZW50czxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
JiBzUkdCQ29tcG9uZW50cykKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JDb21wb25l
bnRzOwogICAgIHJldHVybiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDE4NSArMjYsNjAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgotI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPG1hdGguaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdHJ1Y3QgRmxvYXRDb21wb25lbnRzIHsKLSAgICBGbG9hdENvbXBvbmVudHMoZmxv
YXQgYSA9IDAsIGZsb2F0IGIgPSAwLCBmbG9hdCBjID0gMCwgZmxvYXQgZCA9IDApCi0gICAgewot
ICAgICAgICBjb21wb25lbnRzWzBdID0gYTsKLSAgICAgICAgY29tcG9uZW50c1sxXSA9IGI7Ci0g
ICAgICAgIGNvbXBvbmVudHNbMl0gPSBjOwotICAgICAgICBjb21wb25lbnRzWzNdID0gZDsKLSAg
ICB9Ci0KLSAgICBGbG9hdENvbXBvbmVudHMoY29uc3Qgc3RkOjphcnJheTxmbG9hdCwgND4mIHZh
bHVlcykKLSAgICB7Ci0gICAgICAgIGNvbXBvbmVudHNbMF0gPSB2YWx1ZXNbMF07Ci0gICAgICAg
IGNvbXBvbmVudHNbMV0gPSB2YWx1ZXNbMV07Ci0gICAgICAgIGNvbXBvbmVudHNbMl0gPSB2YWx1
ZXNbMl07Ci0gICAgICAgIGNvbXBvbmVudHNbM10gPSB2YWx1ZXNbM107Ci0gICAgfQotCi0gICAg
RmxvYXRDb21wb25lbnRzJiBvcGVyYXRvcis9KGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgcmhzKQot
ICAgIHsKLSAgICAgICAgY29tcG9uZW50c1swXSArPSByaHMuY29tcG9uZW50c1swXTsKLSAgICAg
ICAgY29tcG9uZW50c1sxXSArPSByaHMuY29tcG9uZW50c1sxXTsKLSAgICAgICAgY29tcG9uZW50
c1syXSArPSByaHMuY29tcG9uZW50c1syXTsKLSAgICAgICAgY29tcG9uZW50c1szXSArPSByaHMu
Y29tcG9uZW50c1szXTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIEZsb2F0
Q29tcG9uZW50cyBvcGVyYXRvcisoZmxvYXQgcmhzKSBjb25zdAotICAgIHsKLSAgICAgICAgRmxv
YXRDb21wb25lbnRzIHJlc3VsdDsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMF0gPSBjb21w
b25lbnRzWzBdICsgcmhzOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1sxXSA9IGNvbXBvbmVu
dHNbMV0gKyByaHM7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJdID0gY29tcG9uZW50c1sy
XSArIHJoczsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbM10gPSBjb21wb25lbnRzWzNdICsg
cmhzOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIEZsb2F0Q29tcG9uZW50
cyBvcGVyYXRvci8oZmxvYXQgZGVub21pbmF0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBGbG9h
dENvbXBvbmVudHMgcmVzdWx0OwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1swXSA9IGNvbXBv
bmVudHNbMF0gLyBkZW5vbWluYXRvcjsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNbMV0gPSBj
b21wb25lbnRzWzFdIC8gZGVub21pbmF0b3I7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzJd
ID0gY29tcG9uZW50c1syXSAvIGRlbm9taW5hdG9yOwotICAgICAgICByZXN1bHQuY29tcG9uZW50
c1szXSA9IGNvbXBvbmVudHNbM10gLyBkZW5vbWluYXRvcjsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBGbG9hdENvbXBvbmVudHMgb3BlcmF0b3IqKGZsb2F0IGZhY3Rvcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEZsb2F0Q29tcG9uZW50cyByZXN1bHQ7Ci0gICAgICAgIHJl
c3VsdC5jb21wb25lbnRzWzBdID0gY29tcG9uZW50c1swXSAqIGZhY3RvcjsKLSAgICAgICAgcmVz
dWx0LmNvbXBvbmVudHNbMV0gPSBjb21wb25lbnRzWzFdICogZmFjdG9yOwotICAgICAgICByZXN1
bHQuY29tcG9uZW50c1syXSA9IGNvbXBvbmVudHNbMl0gKiBmYWN0b3I7Ci0gICAgICAgIHJlc3Vs
dC5jb21wb25lbnRzWzNdID0gY29tcG9uZW50c1szXSAqIGZhY3RvcjsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBGbG9hdENvbXBvbmVudHMgYWJzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEZsb2F0Q29tcG9uZW50cyByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5jb21wb25l
bnRzWzBdID0gZmFicyhjb21wb25lbnRzWzBdKTsKLSAgICAgICAgcmVzdWx0LmNvbXBvbmVudHNb
MV0gPSBmYWJzKGNvbXBvbmVudHNbMV0pOwotICAgICAgICByZXN1bHQuY29tcG9uZW50c1syXSA9
IGZhYnMoY29tcG9uZW50c1syXSk7Ci0gICAgICAgIHJlc3VsdC5jb21wb25lbnRzWzNdID0gZmFi
cyhjb21wb25lbnRzWzNdKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgotICAgIGZsb2F0IGdldCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gY29tcG9uZW50c1tOXTsKLSAgICB9Ci0KLSAgICBzdGQ6OmFycmF5PGZsb2F0
LCA0PiBjb21wb25lbnRzOwotfTsKLQotYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnN0IEZs
b2F0Q29tcG9uZW50cyYsIGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotCi1zdHJ1Y3QgQ29sb3JD
b21wb25lbnRzIHsKLSAgICBDb2xvckNvbXBvbmVudHMoY29uc3QgRmxvYXRDb21wb25lbnRzJik7
Ci0gICAgCi0gICAgc3RhdGljIENvbG9yQ29tcG9uZW50cyBmcm9tUkdCQSh1bnNpZ25lZCBwaXhl
bCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb2xvckNvbXBvbmVudHMoKHBpeGVsID4+IDI0KSAm
IDB4RkYsIChwaXhlbCA+PiAxNikgJiAweEZGLCAocGl4ZWwgPj4gOCkgJiAweEZGLCBwaXhlbCAm
IDB4RkYpOwotICAgIH0KLSAgICAKLSAgICBDb2xvckNvbXBvbmVudHModWludDhfdCBhID0gMCwg
dWludDhfdCBiID0gMCwgdWludDhfdCBjID0gMCwgdWludDhfdCBkID0gMCkKLSAgICB7Ci0gICAg
ICAgIGNvbXBvbmVudHNbMF0gPSBhOwotICAgICAgICBjb21wb25lbnRzWzFdID0gYjsKLSAgICAg
ICAgY29tcG9uZW50c1syXSA9IGM7Ci0gICAgICAgIGNvbXBvbmVudHNbM10gPSBkOwotICAgIH0K
LSAgICAKLSAgICB1bnNpZ25lZCB0b1JHQkEoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IGNvbXBvbmVudHNbMF0gPDwgMjQgfCBjb21wb25lbnRzWzFdIDw8IDE2IHwgY29tcG9uZW50c1sy
XSA8PCA4IHwgY29tcG9uZW50c1szXTsKLSAgICB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29sb3JDb21wb25lbnRzOwogCi0gICAgc3RkOjphcnJheTx1aW50OF90LCA0PiBjb21wb25l
bnRzOwotfTsKKy8vIDAtMSBjb21wb25lbnRzLCByZXN1bHQgaXMgY2xhbXBlZC4KK2Zsb2F0IGxp
bmVhclRvUkdCQ29sb3JDb21wb25lbnQoZmxvYXQpOworZmxvYXQgcmdiVG9MaW5lYXJDb2xvckNv
bXBvbmVudChmbG9hdCk7CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHMgcGVyQ29tcG9uZW50TWF4
KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzJiBiKQotewot
ICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1swXSwgYi5jb21wb25l
bnRzWzBdKSwKLSAgICAgICAgc3RkOjptYXgoYS5jb21wb25lbnRzWzFdLCBiLmNvbXBvbmVudHNb
MV0pLAotICAgICAgICBzdGQ6Om1heChhLmNvbXBvbmVudHNbMl0sIGIuY29tcG9uZW50c1syXSks
Ci0gICAgICAgIHN0ZDo6bWF4KGEuY29tcG9uZW50c1szXSwgYi5jb21wb25lbnRzWzNdKQotICAg
IH07Ci19CitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IHJnYlRvTGluZWFyQ29tcG9uZW50cyhjb25z
dCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7CitDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGxpbmVh
clRvUkdCQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+Jik7CisKK0NvbG9y
Q29tcG9uZW50czxmbG9hdD4gcDNUb1NSR0IoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYp
OworQ29sb3JDb21wb25lbnRzPGZsb2F0PiBzUkdCVG9QMyhjb25zdCBDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+Jik7CisKK1dFQkNPUkVfRVhQT1JUIENvbG9yQ29tcG9uZW50czxmbG9hdD4gc1JHQlRv
SFNMKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mKTsKK1dFQkNPUkVfRVhQT1JUIENvbG9y
Q29tcG9uZW50czxmbG9hdD4gaHNsVG9TUkdCKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4m
KTsKIAotaW5saW5lIENvbG9yQ29tcG9uZW50cyBwZXJDb21wb25lbnRNaW4oY29uc3QgQ29sb3JD
b21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCitmbG9hdCBsaWdodG5lc3Mo
Y29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbXBvbnRlbnRzKTsKK2Zsb2F0IGx1
bWluYW5jZShjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHMpOwor
ZmxvYXQgY29udHJhc3RSYXRpbyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29t
cG9udGVudHNBLCBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9udGVudHNC
KTsKKworQ29sb3JDb21wb25lbnRzPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IENvbG9yQ29t
cG9uZW50czxmbG9hdD4mIHNSR0JDb21wb250ZW50cyk7CisKK2Jvb2wgYXJlRXNzZW50aWFsbHlF
cXVhbChjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiwgY29uc3QgQ29sb3JDb21wb25lbnRz
PGZsb2F0PiYpOworCitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGlu
dCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gewotICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNb
MF0sIGIuY29tcG9uZW50c1swXSksCi0gICAgICAgIHN0ZDo6bWluKGEuY29tcG9uZW50c1sxXSwg
Yi5jb21wb25lbnRzWzFdKSwKLSAgICAgICAgc3RkOjptaW4oYS5jb21wb25lbnRzWzJdLCBiLmNv
bXBvbmVudHNbMl0pLAotICAgICAgICBzdGQ6Om1pbihhLmNvbXBvbmVudHNbM10sIGIuY29tcG9u
ZW50c1szXSkKLSAgICB9OworICAgIHJldHVybiBzdGQ6OmNsYW1wKHZhbHVlLCAwLCAyNTUpOwog
fQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yQ29tcG9uZW50cyYgYSwgY29u
c3QgQ29sb3JDb21wb25lbnRzJiBiKQoraW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbChmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYS5jb21wb25lbnRzID09IGIuY29t
cG9uZW50czsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6OnJvdW5kKHZhbHVlKSwgMC5mLCAy
NTUuZik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3JDb21wb25lbnRz
JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCitpbmxpbmUgdWludDE2X3QgZmFzdE11bHRp
cGx5QnkyNTUodWludDE2X3QgdmFsdWUpCiB7Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKKyAgICBy
ZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7CiB9CiAKLWlubGluZSB1aW50OF90IGNsYW1wZWRD
b2xvckNvbXBvbmVudChmbG9hdCBmKQoraW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1
aW50MTZfdCB2YWx1ZSkKIHsKLSAgICAvLyBTZWUgYWxzbyBjb2xvckZsb2F0VG9SR0JBQnl0ZSgp
LgotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUuMGYg
KiBmKSksIDAsIDI1NSk7CisgICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdv
cml0aG0gZm9yIGRpdmlzaW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJl
c3VsdHMgZm9yIDE2LWJpdCB2YWx1ZXMuCisgICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgZ2l2ZXMg
YWNjdXJhdGUgcmVzdWx0cyBmb3IgMTYtYml0IHZhbHVlcywgd2Ugc2hvdWxkIGdldCB0aGlzIG9w
dGltaXphdGlvbiBpbnRvIGNvbXBpbGVycyBsaWtlIGNsYW5nLgorICAgIHVpbnQxNl90IGFwcHJv
eGltYXRpb24gPSB2YWx1ZSA+PiA4OworICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0g
KGFwcHJveGltYXRpb24gKiAyNTUpICsgMTsKKyAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChy
ZW1haW5kZXIgPj4gOCk7CiB9CiAKLWlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1
bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKK2lubGluZSB1aW50OF90
IGNvbG9yRmxvYXRUb1NpbXBsZUNvbG9yQnl0ZShmbG9hdCBmKQogewotICAgIGNvbnN0IHVuc2ln
bmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkg
KiByb3dCeXRlczsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KGxyb3Vu
ZGYoMjU1LjBmICogZikpLCAwLCAyNTUpOwogfQogCi0vLyAwLTEgY29tcG9uZW50cywgcmVzdWx0
IGlzIGNsYW1wZWQuCi1mbG9hdCBsaW5lYXJUb1JHQkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKLWZs
b2F0IHJnYlRvTGluZWFyQ29sb3JDb21wb25lbnQoZmxvYXQpOwotCi1GbG9hdENvbXBvbmVudHMg
cmdiVG9MaW5lYXJDb21wb25lbnRzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotRmxvYXRDb21w
b25lbnRzIGxpbmVhclRvUkdCQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmKTsKLQot
RmxvYXRDb21wb25lbnRzIHAzVG9TUkdCKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotRmxvYXRD
b21wb25lbnRzIHNSR0JUb1AzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotCi1XRUJDT1JFX0VY
UE9SVCBGbG9hdENvbXBvbmVudHMgc1JHQlRvSFNMKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwot
V0VCQ09SRV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIGhzbFRvU1JHQihjb25zdCBGbG9hdENvbXBv
bmVudHMmKTsKLQotZmxvYXQgbGlnaHRuZXNzKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNv
bXBvbnRlbnRzKTsKLWZsb2F0IGx1bWluYW5jZShjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JD
b21wb250ZW50cyk7Ci1mbG9hdCBjb250cmFzdFJhdGlvKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYs
IGNvbnN0IEZsb2F0Q29tcG9uZW50cyYpOwotCi1GbG9hdENvbXBvbmVudHMgcHJlbXVsdGlwbGll
ZChjb25zdCBGbG9hdENvbXBvbmVudHMmIHNSR0JDb21wb250ZW50cyk7Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotbmFtZXNwYWNlIHN0ZCB7Ci0KLXRlbXBsYXRlPD4KLWNsYXNzIHR1cGxl
X3NpemU8V2ViQ29yZTo6RmxvYXRDb21wb25lbnRzPiA6IHB1YmxpYyBzdGQ6OmludGVncmFsX2Nv
bnN0YW50PHN0ZDo6c2l6ZV90LCA0PiB7Ci19OwotCi10ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgot
Y2xhc3MgdHVwbGVfZWxlbWVudDxOLCBXZWJDb3JlOjpGbG9hdENvbXBvbmVudHM+IHsKLXB1Ymxp
YzoKLSAgICB1c2luZyB0eXBlID0gZmxvYXQ7Ci19OwotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCShyZXZpc2lvbiAyNjIy
MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVk
ZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM5LDcg
KzM5LDcgQEAgcHVibGljOgogCiAgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2No
YW5uZWxzLmNvbXBvbmVudHNbM107IH0KIAotICAgIGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgY2hh
bm5lbHMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5uZWxzOyB9CisgICAgY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYgY2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5uZWxzOyB9CiAg
ICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CkBAIC01OCw3ICs1
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCiAgICAg
eyB9CiAKLSAgICBGbG9hdENvbXBvbmVudHMgbV9jaGFubmVsczsKKyAgICBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQ+IG1fY2hhbm5lbHM7CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2UgeyBDb2xv
clNwYWNlOjpTUkdCIH07CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDcgKzc1LDcgQEAgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhm
bAogU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBz
YXR1cmF0aW9uLCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQogewogICAgIGNvbnN0IGZs
b2F0IHNjYWxlRmFjdG9yID0gMjU1LjA7Ci0gICAgRmxvYXRDb21wb25lbnRzIGZsb2F0UmVzdWx0
ID0gaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOworICAg
IGF1dG8gZmxvYXRSZXN1bHQgPSBoc2xUb1NSR0IoeyBodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVz
cywgYWxwaGEgfSk7CiAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAgcm91bmQo
ZmxvYXRSZXN1bHQuY29tcG9uZW50c1swXSAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAgcm91bmQo
ZmxvYXRSZXN1bHQuY29tcG9uZW50c1sxXSAqIHNjYWxlRmFjdG9yKSwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYy
MjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAko
d29ya2luZyBjb3B5KQpAQCAtODcsMTMgKzg3LDYgQEAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29s
b3IgbWFrZVNpbXBsZUNvbAogV0VCQ09SRV9FWFBPUlQgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNv
bG9yRnJvbUhTTEEoZmxvYXQgaCwgZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CiBTaW1wbGVD
b2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwg
ZmxvYXQgaywgZmxvYXQgYSk7CiAKLXVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChp
bnQpOwotdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0KTsKLQotdWludDE2
X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpOwotdWludDE2X3QgZmFzdERpdmlk
ZUJ5MjU1KHVpbnQxNl90KTsKLQotdWludDhfdCBjb2xvckZsb2F0VG9TaW1wbGVDb2xvckJ5dGUo
ZmxvYXQpOwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNv
bG9yIGIpCiB7CkBAIC0xMDUsMzcgKzk4LDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1w
bGVDb2xvciBhLCBTaQogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWlubGluZSB1aW50OF90
IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6
OmNsYW1wKHZhbHVlLCAwLCAyNTUpOwotfQotCi1pbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1w
Q29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0ZDo6
cm91bmQodmFsdWUpLCAwLmYsIDI1NS5mKTsKLX0KLQotaW5saW5lIHVpbnQxNl90IGZhc3RNdWx0
aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQotewotICAgIHJldHVybiAodmFsdWUgPDwgOCkgLSB2
YWx1ZTsKLX0KLQotaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCB2YWx1
ZSkKLXsKLSAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRlIGFsZ29yaXRobSBmb3Ig
ZGl2aXNpb24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJhdGUgcmVzdWx0cyBmb3Ig
MTYtYml0IHZhbHVlcy4KLSAgICAvLyBGSVhNRTogU2luY2UgdGhpcyBnaXZlcyBhY2N1cmF0ZSBy
ZXN1bHRzIGZvciAxNi1iaXQgdmFsdWVzLCB3ZSBzaG91bGQgZ2V0IHRoaXMgb3B0aW1pemF0aW9u
IGludG8gY29tcGlsZXJzIGxpa2UgY2xhbmcuCi0gICAgdWludDE2X3QgYXBwcm94aW1hdGlvbiA9
IHZhbHVlID4+IDg7Ci0gICAgdWludDE2X3QgcmVtYWluZGVyID0gdmFsdWUgLSAoYXBwcm94aW1h
dGlvbiAqIDI1NSkgKyAxOwotICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+
PiA4KTsKLX0KLQotaW5saW5lIHVpbnQ4X3QgY29sb3JGbG9hdFRvU2ltcGxlQ29sb3JCeXRlKGZs
b2F0IGYpCi17Ci0gICAgLy8gRklYTUU6IENvbnNvbGlkYXRlIHdpdGggY2xhbXBlZENvbG9yQ29t
cG9uZW50KCkuCi0gICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRh
ZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCi0gICAgcmV0dXJuIHN0ZDo6Y2xh
bXAoc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMCwgMjU1KTsKLX0KLQog
Y29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgMHhGRik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQm
IAogICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsg
YiAqIGNvbXBvbmVudHNbOF07CiB9CiAKLS8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgbHVtaW5h
bmNlKGNvbnN0IEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbXBvbnRlbnRzKS4KKy8vIEZJWE1FOiB0
aGlzIHNob3VsZCB1c2UgbHVtaW5hbmNlKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdD4mIHNS
R0JDb21wb250ZW50cykuCiBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQm
IGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQogewogICAgIGFscGhhID0gMC4yMTI1
ICogcmVkICsgMC43MTU0ICogZ3JlZW4gKyAwLjA3MjEgKiBibHVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Niw2ICs4NiwxMiBAQCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1S
ZXN1bHRDCiAgICAgICAgIGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4
ZWwodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCit7CisgICAgY29u
c3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7CisgICAgcmV0dXJuIHggKiBieXRlc1BlclBp
eGVsICsgeSAqIHJvd0J5dGVzOworfQorCiB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDA0LDcgKzQwNCw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4
Q2xhbXAKICAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7CiAgICAgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAgICAgCi0gICAgRmxvYXRDb21w
b25lbnRzIGxpZ2h0Q29sb3IgPSAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6
OkxpbmVhclJHQikgPyByZ2JUb0xpbmVhckNvbXBvbmVudHMobV9saWdodGluZ0NvbG9yLnRvU1JH
QkFDb21wb25lbnRzTG9zc3koKSkgOiBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpOworICAgIGF1dG8gbGlnaHRDb2xvciA9IChvcGVyYXRpbmdDb2xvclNwYWNlKCkgPT0g
Q29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHJnYlRvTGluZWFyQ29tcG9uZW50cyhtX2xpZ2h0aW5n
Q29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKSA6IG1fbGlnaHRpbmdDb2xvci50b1NSR0JB
Q29tcG9uZW50c0xvc3N5KCk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEu
Y29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25lbnRzWzBdLCBsaWdo
dENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1syXSk7CiAgICAgbV9s
aWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OCw4ICs4OCwxOSBAQCBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50
IHgsCiAgICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7CiB9CiAKK2lubGluZSBDb2xvckNv
bXBvbmVudHM8dWludDhfdD4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKHVuc2ln
bmVkIHBpeGVsKQoreworICAgIHJldHVybiBDb2xvckNvbXBvbmVudHM8dWludDhfdD4oKHBpeGVs
ID4+IDI0KSAmIDB4RkYsIChwaXhlbCA+PiAxNikgJiAweEZGLCAocGl4ZWwgPj4gOCkgJiAweEZG
LCBwaXhlbCAmIDB4RkYpOworfQorCitpbmxpbmUgdW5zaWduZWQgbWFrZVBpeGVsVmFsdWVGcm9t
Q29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgY29tcG9uZW50
cykKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgcmV0dXJuIHIg
PDwgMjQgfCBnIDw8IDE2IHwgYiA8PCA4IHwgYTsKK30KKwogdGVtcGxhdGU8TW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHMgbWluT3JNYXgo
Y29uc3QgQ29sb3JDb21wb25lbnRzJiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHMmIGIpCitBTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90PiBtaW5Pck1heChjb25zdCBDb2xvckNv
bXBvbmVudHM8dWludDhfdD4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90PiYgYikK
IHsKICAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCiAgICAgICAg
IHJldHVybiBwZXJDb21wb25lbnRNaW4oYSwgYik7CkBAIC05OCwxOCArMTA5LDE4IEBAIEFMV0FZ
U19JTkxJTkUgQ29sb3JDb21wb25lbnRzIG1pbk9yTWF4KGMKIH0KIAogdGVtcGxhdGU8TW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHMgY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQorQUxXQVlTX0lOTElORSBDb2xvckNv
bXBvbmVudHM8dWludDhfdD4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQog
ewotICAgIGF1dG8gZXh0cmVtdW0gPSBDb2xvckNvbXBvbmVudHM6OmZyb21SR0JBKCpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFy
cmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpKTsKKyAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNv
bG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKCpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3
aWR0aCkpKTsKIAogICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7
Ci0gICAgICAgIGF1dG8gcGl4ZWwgPSBDb2xvckNvbXBvbmVudHM6OmZyb21SR0JBKCpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFy
cmF5SW5kZXgoeCwgeSwgd2lkdGgpKSk7CisgICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JD
b21wb25lbnRzZnJvbVBpeGVsVmFsdWUoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQq
PihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpKTsK
ICAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwpOwogICAg
IH0KICAgICByZXR1cm4gZXh0cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25l
bnRzIGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5
LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSB0eXBlKQorQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdD4gY29s
dW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQog
ICAgICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RF
PihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKQEAgLTExNywxMCArMTI4
LDEwIEBAIEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzIGNvbHVtbkV4dHIKICAgICByZXR1
cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxB
cnJheSwgeCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7CiB9CiAKLXVzaW5nIENvbHVtbkV4dHJlbWEg
PSBWZWN0b3I8Q29sb3JDb21wb25lbnRzLCAxNj47Cit1c2luZyBDb2x1bW5FeHRyZW1hID0gVmVj
dG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90PiwgMTY+OwogCiB0ZW1wbGF0ZTxNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50cyBrZXJuZWxF
eHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCitBTFdBWVNfSU5MSU5FIENvbG9y
Q29tcG9uZW50czx1aW50OF90PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBr
ZXJuZWwpCiB7CiAgICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKICAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKQEAgLTEyOSw3ICsxNDAsNyBAQCBBTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50cyBrZXJuZWxFeHRyCiAgICAgcmV0dXJuIGV4dHJlbXVt
OwogfQogCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50cyBrZXJuZWxFeHRyZW11bShjb25z
dCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKK0FM
V0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Q+IGtlcm5lbEV4dHJlbXVtKGNvbnN0
IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewog
ICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKICAgICAgICAgcmV0
dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsK
QEAgLTE3NCw3ICsxODUsNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWMoCiAgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxB
cnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKLSAgICAgICAgICAg
ICpkZXN0UGl4ZWwgPSBrZXJuZWxFeHRyZW11bShleHRyZW1hLCBtX3R5cGUpLnRvUkdCQSgpOwor
ICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50
cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBtX3R5cGUpKTsKICAgICAgICAgfQogICAgIH0KIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIEZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1
bGVuY2U6OmMKIH0KIAogLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDov
L3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1G
bG9hdENvbXBvbmVudHMgRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBv
aW50JiBub2lzZVZlY3RvcikgY29uc3QKK0NvbG9yQ29tcG9uZW50czxmbG9hdD4gRkVUdXJidWxl
bmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0
Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QK
IHsKICAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7CiAgICAgICAgIGludCBpbmRleDsgLy8gYngw
LCBieTAgaW4gdGhlIHNwZWMgdGV4dC4KQEAgLTMyMiwxOSArMzIyLDE5IEBAIEZsb2F0Q29tcG9u
ZW50cyBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY28KIH0KIAogLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBj
b252ZXJzaW9uIHRvIGNvbG9yIGNvbXBvbmVudHMuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9u
ZW50cyB0b0NvbG9yQ29tcG9uZW50cyhjb25zdCBGbG9hdENvbXBvbmVudHMmIGZsb2F0Q29tcG9u
ZW50cykKK3N0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Q+IHRvSW50QmFzZWRD
b2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgZmxvYXRDb21wb25l
bnRzKQogewogICAgIHJldHVybiB7Ci0gICAgICAgIHN0ZDo6bWF4PHVpbnQ4X3Q+KDAsIHN0ZDo6
bWluKHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKiAyNTUp
LCAyNTUpKSwKLSAgICAgICAgc3RkOjptYXg8dWludDhfdD4oMCwgc3RkOjptaW4oc3RhdGljX2Nh
c3Q8aW50PihmbG9hdENvbXBvbmVudHMuY29tcG9uZW50c1sxXSAqIDI1NSksIDI1NSkpLAotICAg
ICAgICBzdGQ6Om1heDx1aW50OF90PigwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0
Q29tcG9uZW50cy5jb21wb25lbnRzWzJdICogMjU1KSwgMjU1KSksCi0gICAgICAgIHN0ZDo6bWF4
PHVpbnQ4X3Q+KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNv
bXBvbmVudHNbM10gKiAyNTUpLCAyNTUpKQorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKiAyNTUpLCAwLCAy
NTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRD
b21wb25lbnRzLmNvbXBvbmVudHNbMV0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNs
YW1wPHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNb
Ml0gKiAyNTUpLCAwLCAyNTUpLAorICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+KHN0YXRpY19j
YXN0PGludD4oZmxvYXRDb21wb25lbnRzLmNvbXBvbmVudHNbM10gKiAyNTUpLCAwLCAyNTUpLAog
ICAgIH07CiB9CiAKLUNvbG9yQ29tcG9uZW50cyBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1
bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0
Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3Q+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3Rp
dGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgRmxvYXRDb21w
b25lbnRzIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKKyAgICBDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKICAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9y
KHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFp
bnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKICAgICBmbG9hdCByYXRpbyA9IDE7CiAgICAgZm9y
IChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewpAQCAt
MzYyLDcgKzM2Miw3IEBAIENvbG9yQ29tcG9uZW50cyBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVQK
ICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCiAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAu
NWYgKyAwLjVmOwogCi0gICAgcmV0dXJuIHRvQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCk7CisgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAogdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24o
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25z
dApAQCAtMzgxLDcgKzM4MSw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4
Q2xhbXAKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBmaWx0ZXJSZWdpb24ud2lkdGgoKTsg
Kyt4KSB7CiAgICAgICAgICAgICBwb2ludC5zZXRYKHBvaW50LngoKSArIDEpOwogICAgICAgICAg
ICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW52ZXJzZVRyYW5zZnJvbS5tYXBQb2ludChwb2lu
dCk7Ci0gICAgICAgICAgICBDb2xvckNvbXBvbmVudHMgdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsK
KyAgICAgICAgICAgIGF1dG8gdmFsdWVzID0gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9p
bnQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBsb2NhbFBvaW50KTsKICAgICAgICAgICAgIHBp
eGVsQXJyYXkuc2V0UmFuZ2UodmFsdWVzLmNvbXBvbmVudHMuZGF0YSgpLCA0LCBpbmRleE9mUGl4
ZWxDaGFubmVsKTsKICAgICAgICAgICAgIGluZGV4T2ZQaXhlbENoYW5uZWwgKz0gNDsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCw3ICsyNCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JV
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKIApAQCAtMTE2LDggKzExNiw4IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKICAgICBTdGl0Y2hE
YXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwotICAgIEZsb2F0Q29tcG9uZW50cyBu
b2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzIGNhbGN1bGF0ZVR1cmJ1bGVuY2VW
YWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKKyAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG5vaXNlMkQoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dDsKKyAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdD4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVl
Rm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0OwogICAgIHZvaWQgZmlsbFJlZ2lvbihVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0
IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsK
IAogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMjYyMjIxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEJhc2ljQ29sb3JNYXRy
aXgKICAgICByZXR1cm4gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKFdl
YkNvcmU6OmJsZW5kKGZyb21BbW91bnQsIG1fYW1vdW50LCBwcm9ncmVzcyksIG1fdHlwZSk7CiB9
CiAKLWJvb2wgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbjo6dHJhbnNmb3JtQ29sb3Io
RmxvYXRDb21wb25lbnRzJiBjb2xvckNvbXBvbmVudHMpIGNvbnN0Citib29sIEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9h
dD4mIGNvbG9yQ29tcG9uZW50cykgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAg
IGNhc2UgR1JBWVNDQUxFOiB7CkBAIC0xNTIsNyArMTUyLDcgQEAgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gQmFzaWNDb21wb25lbnRUcgogICAgIHJldHVybiBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6YmxlbmQoZnJvbUFtb3VudCwgbV9hbW91
bnQsIHByb2dyZXNzKSwgbV90eXBlKTsKIH0KIAotYm9vbCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihGbG9hdENvbXBvbmVudHMmIGNvbG9yQ29t
cG9uZW50cykgY29uc3QKK2Jvb2wgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
bjo6dHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgY29sb3JDb21wb25lbnRz
KSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBPUEFDSVRZOgpAQCAt
MjI2LDkgKzIyNiw5IEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IEludmVydExpZ2h0bmVzc0YK
ICAgICByZXR1cm4gSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKIH0K
IAotYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRyYW5zZm9ybUNvbG9yKEZs
b2F0Q29tcG9uZW50cyYgc1JHQkNvbG9yQ29tcG9uZW50cykgY29uc3QKK2Jvb2wgSW52ZXJ0TGln
aHRuZXNzRmlsdGVyT3BlcmF0aW9uOjp0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+JiBzUkdCQ29sb3JDb21wb25lbnRzKSBjb25zdAogewotICAgIEZsb2F0Q29tcG9uZW50cyBo
c2xDb21wb25lbnRzID0gc1JHQlRvSFNMKHNSR0JDb2xvckNvbXBvbmVudHMpOworICAgIGF1dG8g
aHNsQ29tcG9uZW50cyA9IHNSR0JUb0hTTChzUkdCQ29sb3JDb21wb25lbnRzKTsKICAgICAKICAg
ICAvLyBSb3RhdGUgdGhlIGh1ZSAxODBkZWcuCiAgICAgaHNsQ29tcG9uZW50cy5jb21wb25lbnRz
WzBdID0gZm1vZChoc2xDb21wb25lbnRzLmNvbXBvbmVudHNbMF0gKyAwLjVmLCAxLjBmKTsKQEAg
LTI0OSw5ICsyNDksMTAgQEAgYm9vbCBJbnZlcnRMaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246OnRy
YQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJh
dGlvbjo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50cyYgc1JHQkNvbG9yQ29t
cG9uZW50cykgY29uc3QKK2Jvb2wgSW52ZXJ0TGlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOjppbnZl
cnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiYgc1JHQkNvbG9yQ29tcG9u
ZW50cykgY29uc3QKIHsKLSAgICBGbG9hdENvbXBvbmVudHMgcmdiQ29tcG9uZW50cyA9IHNSR0JD
b2xvckNvbXBvbmVudHM7CisgICAgYXV0byByZ2JDb21wb25lbnRzID0gc1JHQkNvbG9yQ29tcG9u
ZW50czsKKwogICAgIC8vIEFwcGx5IHRoZSBtYXRyaXguCiAgICAgY29uc3QgZmxvYXQgbWF0cml4
VmFsdWVzWzIwXSA9IHsKICAgICAgICAgLTEuMzAwLCAtMC4wOTcsICAwLjE0NywgMCwgMS4yNSwK
QEAgLTI2Myw3ICsyNjQsNyBAQCBib29sIEludmVydExpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbjo6
aW52CiAgICAgdG9MaWdodE1vZGVNYXRyaXgudHJhbnNmb3JtQ29sb3JDb21wb25lbnRzKHJnYkNv
bXBvbmVudHMpOwogCiAgICAgLy8gQ29udmVydCB0byBIU0wuCi0gICAgRmxvYXRDb21wb25lbnRz
IGhzbENvbXBvbmVudHMgPSBzUkdCVG9IU0wocmdiQ29tcG9uZW50cyk7CisgICAgYXV0byBoc2xD
b21wb25lbnRzID0gc1JHQlRvSFNMKHJnYkNvbXBvbmVudHMpOwogICAgIC8vIEh1ZSByb3RhdGUg
YnkgMTgwZGVnLgogICAgIGhzbENvbXBvbmVudHMuY29tcG9uZW50c1swXSA9IGZtb2QoaHNsQ29t
cG9uZW50cy5jb21wb25lbnRzWzBdICsgMC41ZiwgMS4wZik7CiAgICAgLy8gQW5kIHJldHVybiBS
R0IuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHJldmlzaW9uIDI2MjIyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZTsK
IGNsYXNzIEZpbHRlckVmZmVjdDsKLXN0cnVjdCBGbG9hdENvbXBvbmVudHM7CiBzdHJ1Y3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbG9yQ29t
cG9uZW50czsKIAogY2xhc3MgRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZpbHRlck9wZXJhdGlvbj4gewogcHVibGljOgpAQCAtNzksOCArNzksOCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIGJv
b2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaW52ZXJzZVRyYW5zZm9ybUNvbG9yKEZsb2F0Q29tcG9uZW50
cyYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHRyYW5zZm9ybUNv
bG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4mKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0
PiYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBPcGVyYXRpb25UeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KIApAQCAtMjI4LDcgKzIyOCw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAt
MjYzLDcgKzI2Myw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNm
b3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCB0cmFu
c2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBkb3VibGUgbV9hbW91bnQ7CiB9OwpAQCAtMjkwLDggKzI5MCw4IEBAIHByaXZhdGU6CiAgICAg
ewogICAgIH0KIAotICAgIGJvb2wgdHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRzJikgY29u
c3QgZmluYWw7Ci0gICAgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoRmxvYXRDb21wb25lbnRz
JikgY29uc3QgZmluYWw7CisgICAgYm9vbCB0cmFuc2Zvcm1Db2xvcihDb2xvckNvbXBvbmVudHM8
ZmxvYXQ+JikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpbnZlcnNlVHJhbnNmb3JtQ29sb3IoQ29s
b3JDb21wb25lbnRzPGZsb2F0PiYpIGNvbnN0IGZpbmFsOwogfTsKIAogY2xhc3MgV0VCQ09SRV9F
WFBPUlQgQmx1ckZpbHRlck9wZXJhdGlvbiA6IHB1YmxpYyBGaWx0ZXJPcGVyYXRpb24gewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjIyMjEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsMTQgKzExMSwxNSBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6
OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHMgPSBjb2xvci50
b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gY29sb3IudG9T
UkdCQUNvbXBvbmVudHNMb3NzeSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29w
ZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKGNvbXBv
bmVudHMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGNvbG9yID0g
Q29sb3IoY29tcG9uZW50cy5jb21wb25lbnRzWzBdLCBjb21wb25lbnRzLmNvbXBvbmVudHNbMV0s
IGNvbXBvbmVudHMuY29tcG9uZW50c1syXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzNdKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgY29sb3IgPSBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
MzAsMTQgKzEzMSwxNSBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1D
CiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgRmxvYXRDb21wb25lbnRzIGNvbXBvbmVudHMgPSBjb2xvci50b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCk7CisgICAgYXV0byBjb21wb25lbnRzID0gY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAg
ICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihjb21wb25lbnRzKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBjb2xvciA9IENvbG9yKGNvbXBv
bmVudHMuY29tcG9uZW50c1swXSwgY29tcG9uZW50cy5jb21wb25lbnRzWzFdLCBjb21wb25lbnRz
LmNvbXBvbmVudHNbMl0sIGNvbXBvbmVudHMuY29tcG9uZW50c1szXSk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb21wb25lbnRzOworICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZs
b2F0cyhyLCBnLCBiLCBhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>