<?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>222584</bug_id>
          
          <creation_ts>2021-03-01 19:13:12 -0800</creation_ts>
          <short_desc>Reduce the size of extended colors by storing the color space in free bits of the owning Color</short_desc>
          <delta_ts>2021-03-02 17:26:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1734726</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-01 19:13:12 -0800</bug_when>
    <thetext>We currently have 10 free bits in m_colorAndFlags in Color, more than enough to store the color space (we only currently support 9 color spaces, which can fit in 4 bits). 

While doing this, we might as well move ExtendedColor to be nested type of Color and rename it to OutOfLineColor to be more clear about what it really is now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734727</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-01 19:35:11 -0800</bug_when>
    <thetext>(This will reduce the size of each ExtendedColor from 28 bytes to 24 bytes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734735</commentid>
    <comment_count>2</comment_count>
      <attachid>421899</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-01 20:10:22 -0800</bug_when>
    <thetext>Created attachment 421899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734740</commentid>
    <comment_count>3</comment_count>
      <attachid>421901</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-01 20:31:38 -0800</bug_when>
    <thetext>Created attachment 421901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734942</commentid>
    <comment_count>4</comment_count>
      <attachid>421968</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-02 11:20:57 -0800</bug_when>
    <thetext>Created attachment 421968
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735089</commentid>
    <comment_count>5</comment_count>
      <attachid>421968</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-02 15:52:17 -0800</bug_when>
    <thetext>Comment on attachment 421968
Patch

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

&gt; Source/WebCore/ChangeLog:21
&gt; +        Additional, talk the opertunity to remove the isInline/isExtended and

The traditional spelling is &quot;Additionally, take the opportunity&quot;. We were using an extremely unconventional spelling here!

&gt; Source/WebCore/ChangeLog:23
&gt; +        is still neecessary in some places, but can be replaced by a single

&quot;necessary&quot;

&gt; Source/WebCore/platform/graphics/Color.h:143
&gt; +    // Returns the underlying color if the color space is sRGB and the value
&gt; +    // is representable as SRGBA&lt;uint8_t&gt;.

I think &quot;representable&quot; here is ambiguous. Does that include rounding and clamping floating point values? Or it is it only representable if it can be converted to/from 8-bit without losing precision?

I looked at the implementation and it turns out that this will never convert a floating point value to an integer, even if that can be done without any loss, so I don’t think representable is currently accurate.

&gt; Source/WebCore/platform/graphics/Color.h:179
&gt; +    // Out of line and inline colors will always be non-equal.

This is an annoying semantic that unduly emphasizes this internal difference in external API.

&gt; Source/WebCore/platform/graphics/cg/GradientCG.cpp:63
&gt; +        if (stop.color.colorSpace() != ColorSpace::SRGB)
&gt;              hasExtendedColors = true;

Slightly subtle that this color space check also guarantees the ranges are such that we don’t needed the extended SRGB CG color space. Almost wish the comment was explicit about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735104</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-02 16:14:19 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 421968 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=421968&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:21
&gt; &gt; +        Additional, talk the opertunity to remove the isInline/isExtended and
&gt; 
&gt; The traditional spelling is &quot;Additionally, take the opportunity&quot;. We were
&gt; using an extremely unconventional spelling here!

Oh boy :(.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:23
&gt; &gt; +        is still neecessary in some places, but can be replaced by a single
&gt; 
&gt; &quot;necessary&quot;
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:143
&gt; &gt; +    // Returns the underlying color if the color space is sRGB and the value
&gt; &gt; +    // is representable as SRGBA&lt;uint8_t&gt;.
&gt; 
&gt; I think &quot;representable&quot; here is ambiguous. Does that include rounding and
&gt; clamping floating point values? Or it is it only representable if it can be
&gt; converted to/from 8-bit without losing precision?

Yeah, this is incorrect as written. I wrote this along with https://bugs.webkit.org/show_bug.cgi?id=222553, and in one version, the other patch went out first so this made more sense. Will correct it to:

    // Returns the underlying color if its type is SRGBA&lt;uint8_t&gt;.

&gt; 
&gt; I looked at the implementation and it turns out that this will never convert
&gt; a floating point value to an integer, even if that can be done without any
&gt; loss, so I don’t think representable is currently accurate.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:179
&gt; &gt; +    // Out of line and inline colors will always be non-equal.
&gt; 
&gt; This is an annoying semantic that unduly emphasizes this internal difference
&gt; in external API.

Going to fix this next with https://bugs.webkit.org/show_bug.cgi?id=222553.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/GradientCG.cpp:63
&gt; &gt; +        if (stop.color.colorSpace() != ColorSpace::SRGB)
&gt; &gt;              hasExtendedColors = true;
&gt; 
&gt; Slightly subtle that this color space check also guarantees the ranges are
&gt; such that we don’t needed the extended SRGB CG color space. Almost wish the
&gt; comment was explicit about that.

Will improve this.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735107</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-02 16:15:18 -0800</bug_when>
    <thetext>A way we can reduce the size even more is to experiment with half precision float, which the spec allows. I filed https://bugs.webkit.org/show_bug.cgi?id=222631 to try this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735109</commentid>
    <comment_count>8</comment_count>
      <attachid>422017</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-02 16:16:39 -0800</bug_when>
    <thetext>Created attachment 422017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735139</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-02 17:25:57 -0800</bug_when>
    <thetext>Committed r273776: &lt;https://commits.webkit.org/r273776&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 422017.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1735142</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-02 17:26:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/74959274&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421899</attachid>
            <date>2021-03-01 20:10:22 -0800</date>
            <delta_ts>2021-03-01 20:31:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222584-20210301201021.patch</filename>
            <type>text/plain</type>
            <size>65584</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzY1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIxLTAzLTAxICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2UgdGhlIHNpemUgb2YgZXh0
ZW5kZWQgY29sb3JzIGJ5IHN0b3JpbmcgdGhlIGNvbG9yIHNwYWNlIGluIGZyZWUgYml0cyBvZiB0
aGUgb3duaW5nIENvbG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjI1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWR1Y2UgdGhlIHNpemUgb2Ygbm9uLVNSQkdBPHVpbnQ4X3Q+IGNvbG9ycyBieSBt
b3ZpbmcgdGhlIGNvbG9yIHNwYWNlIGZyb20gdGhlIHJlZiBjb3VudGVkCisgICAgICAgIG91dC1v
Zi1saW5lIGJpdCBpbnRvIHRoZSBmcmVlIGJpdHMgb2YgdGhlIENvbG9yIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIEFsc28sIHRha2UgdGhlIG9wZXJ0dW5pdHkgdG8gbW92ZSBhbmQgcmVuYW1l
IHRoZSBvdXQgb2YgbGluZSBiaXQgZnJvbSBpdCdzIG93biBmaWxlIG5hbWVkCisgICAgICAgIEV4
dGVuZGVkQ29sb3IgdG8gYSBwcml2YXRlIG5lc3RlZCB0eXBlIGNhbGxlZCBPdXRPZkxpbmVDb2xv
ci4KKworICAgICAgICBDb2xvciBub3cgZW5jb2RlcyB0aGUgZm9sbG93aW5nIGRhdGE6CisgICAg
ICAgICAgICB8IDggYml0cyAgfCAgIDggYml0cyAgIHwgICAgICAgICAgICAgNDggYml0cyAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgIEZsYWdzICB8IENvbG9yU3BhY2UgfCAgIElubGlu
ZUNvbG9yRGF0YU9yT3V0T2ZMaW5lUHRyICAgfAorCisgICAgICAgIENvbG9yU3BhY2UgYWN0dWFs
bHkgb25seSB1c2VzIDQgYml0cywgc28gaWYgd2UgbmVlZCBtb3JlIHJvb20gZm9yIGZsYWdzCisg
ICAgICAgIGluIHRoZSBmdXR1cmUsIHdlIGNvdWxkIHBhY2sgdGhpbmdzIGV2ZW4gbW9yZSB0aWdo
dGx5LgorCisgICAgICAgIEFkZGl0aW9uYWwsIHRhbGsgdGhlIG9wZXJ0dW5pdHkgdG8gcmVtb3Zl
IHRoZSBpc0lubGluZS9pc0V4dGVuZGVkIGFuZAorICAgICAgICBhc0lubGluZS9hc0V4dGVuZGVk
IGZ1bmN0aW9ucy4gVGhlIGZ1bmN0aW9uYWxpdHkgb2YgaXNJbmxpbmUvYXNJbmxpbmUKKyAgICAg
ICAgaXMgc3RpbGwgbmVlY2Vzc2FyeSBpbiBzb21lIHBsYWNlcywgYnV0IGNhbiBiZSByZXBsYWNl
ZCBieSBhIHNpbmdsZQorICAgICAgICB0cnlHZXRBc1NSR0JBQnl0ZXMgd2hpY2ggcmV0dXJucyBh
biBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gd2l0aCBhIAorICAgICAgICB2YWxpZCB2YWx1ZSB3
aGVuIHRoZSBzdG9yZWQgdmFsdWUgaXMgaW5saW5lLgorCisgICAgICAgIFNpbmNlIEV4dGVuZGVk
Q29sb3IgaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUsIGEgZmV3IHRlc3RzIHRoYXQgY2hlY2tlZCB0
aGluZ3MgbGlrZQorICAgICAgICB0aGUgcmVmIGNvdW50IG9mIHRoZSBFeHRlbmRlZENvbG9yIGhh
ZCB0byBiZSBjaGFuZ2VkLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNlbWFudGljQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjppc09wYXF1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWaXNp
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUJ5dGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhhQXNGbG9hdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6T3V0T2ZMaW5lQ29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6T3V0T2ZMaW5lQ29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpPdXRPZkxpbmVDb2xvcjo6Y29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6T3V0T2ZMaW5lQ29sb3I6Ok91dE9mTGluZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXRPdXRPZkxpbmVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om91dE9mTGluZUNvbG9yc0VxdWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6Om91dE9mTGluZUNvbG9yc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omhhc2gg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjppc091dE9mTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aXNJbmxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzT3V0
T2ZMaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc091dE9mTGluZVJlZiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dHJ5R2V0QXNTUkdCQUJ5dGVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGVkRmxhZ3MpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmVuY29kZWRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjplbmNvZGVkT3V0T2ZMaW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29k
ZWRGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlZENvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZWRPdXRPZkxpbmVDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpzZXRFeHRlbmRlZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuZGVkQ29sb3JzRXF1YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6aXNFeHRlbmRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6YXNFeHRlbmRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6YXNFeHRlbmRlZFJlZiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6ZW5jb2RlZEV4dGVuZGVkQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRlY29kZWRFeHRlbmRlZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENH
Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUNHR3JhZGllbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElu
bGluZUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5s
aW5lRmlsbEdyYWRpZW50Ojppc0lubGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6bnNDb2xvcik6CisKIDIwMjEtMDMtMDEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIENTU0ZvbnRGYWNlIHNob3VsZCBub3QgbmVlZCBpdHMgbV9mb250U2Vs
ZWN0b3IgZGF0YSBtZW1iZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjczNjMz
KQorKysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTE4
MCw3ICsxMTgwLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zR0wuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQzRC5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzM2MzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTk2
OCw3ICs5NjgsNiBAQAogCQkzMUMwRkYyNTBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0VHJhbnNp
dGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMUMwRkYxRjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggKi87
IH07CiAJCTMxQzBGRjNFMEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdEFuaW1hdGlvbkV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYz
QTBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkz
MUMwRkY0MDBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjNDMEU0Q0VG
QUMwMDdENkZFNSAvKiBKU1dlYktpdFRyYW5zaXRpb25FdmVudC5oICovOyB9OwotCQkzMURDREY0
NDFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4
dGVuZGVkQ29sb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkzMURFQTQ1NjFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BMYXll
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFERUE0
NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaCAqLzsgfTsKIAkJ
MzFFQUY5N0UxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFQUY5N0MxMjE0MzVB
NDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oICovOyB9OwogCQkzMUVCNTRERjFF
N0RDNzQ0MDBDMTYyM0IgLyogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRUI1NEREMUU3REM3NDQwMEMx
NjIzQiAvKiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbi5oICovOyB9OwpAQCAtNzUwMyw3ICs3
NTAyLDYgQEAKIAkJMzFEMjZCQzQxRjg2RDI2NjAwOEZGMjU1IC8qIEpTSW1hZ2VCaXRtYXBPcHRp
b25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW1hZ2VCaXRt
YXBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEMjZCQzUxRjg2
RDI2ODAwOEZGMjU1IC8qIEpTSW1hZ2VCaXRtYXBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTSW1hZ2VCaXRtYXBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxRDI2QkM2MUY4NkQyNjkwMDhGRjI1NSAvKiBKU0ltYWdlQml0bWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW1hZ2VCaXRtYXAuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMg
LyogRXh0ZW5kZWRDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRl
bmRlZENvbG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDUzMUIzOUY0
RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTQxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5
c3RlbUJhY2tkcm9wTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
U3lzdGVtQmFja2Ryb3BMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUVB
Rjk3QzEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZU1vdGlvbkNsaWVudElPUy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY2ODIsNyArMjY2ODAsNiBAQAogCQkJCTJEMjlFQ0My
MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaCAqLywKIAkJ
CQkyRDI5RUNDMzE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdl
ci5jcHAgKi8sCiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNo
TW9uaXRvck1hbmFnZXIuaCAqLywKLQkJCQkzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMgLyogRXh0
ZW5kZWRDb2xvci5oICovLAogCQkJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNp
b25zR0wuaCAqLywKIAkJCQlCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5j
cHAgKi8sCiAJCQkJQjI3NTM1M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCAqLywK
QEAgLTMxMTQ1LDggKzMxMTQyLDYgQEAKIAkJCQlDREMyNkI0MTE2MEE4Q0NFMDAyNjc1N0IgLyog
TGVnYWN5TW9ja0NETS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFCRjZCODMxQUE5NkM3RDAwQUY0
QThBIC8qIE1vY2tDb250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUI1QjI5RjFB
QUE4NDZGMDA4QjYwNDIgLyogTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5ncy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTEwNThBREMxRDY3OTJDMTAwOUE1MzhDIC8qIE1vY2tHYW1lcGFkLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MTA1OEFERTFENjc5MkMxMDA5QTUzOEMgLyogTW9ja0dhbWVwYWRQcm92
aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE1N0VCRkIxRTNBQjY3RjAwQUM5RkU5IC8qIE1v
Y2tMaWJXZWJSVENQZWVyQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ2RjNFOTEx
QzFFQ0IyRjAwNjFEQkQ0IC8qIE1vY2tQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkQ5N0YwNDgxOURENDE0MDAwMUVFOUMzIC8qIE1vY2tQYWdlT3ZlcmxheUNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMjE3Nyw3ICszMjE3Miw2IEBACiAJCQkJMkQyOTM4NkIyMzVGNkI2OTAw
QzdGM0IyIC8qIEV4Y2VwdGlvbkRldGFpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDE5NjMx
MUQ2Q0FCNzYwMEZDN0U0NyAvKiBFeGNlcHRpb25Pci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM3
RkIzNDUxRjlFQTA2RDAwRDBGQzMxIC8qIEV4dGVuZGFibGVNZXNzYWdlRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9u
c0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTcyRjU1MDIyOURDRDE3MDBCM0UxNTEgLyogRXh0
ZW5zaW9uc0dMQU5HTEUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVF
MkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNzM2MzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDggKzM5LDggQEAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGRhcmtlbmVkV2hp
dGUgPSBTUgogQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKICAgICA6IG1fY29sb3JB
bmRGbGFncyhvdGhlci5tX2NvbG9yQW5kRmxhZ3MpCiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkK
LSAgICAgICAgYXNFeHRlbmRlZCgpLnJlZigpOworICAgIGlmIChpc091dE9mTGluZSgpKQorICAg
ICAgICBhc091dE9mTGluZSgpLnJlZigpOwogfQogCiBDb2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhl
cikKQEAgLTUzLDEzICs1MywxMyBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xv
ciYgb3RoCiAgICAgaWYgKCp0aGlzID09IG90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAK
LSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBhc0V4dGVuZGVkKCkuZGVyZWYoKTsKKyAg
ICBpZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgYXNPdXRPZkxpbmUoKS5kZXJlZigpOwogCiAg
ICAgbV9jb2xvckFuZEZsYWdzID0gb3RoZXIubV9jb2xvckFuZEZsYWdzOwogCi0gICAgaWYgKGlz
RXh0ZW5kZWQoKSkKLSAgICAgICAgYXNFeHRlbmRlZCgpLnJlZigpOworICAgIGlmIChpc091dE9m
TGluZSgpKQorICAgICAgICBhc091dE9mTGluZSgpLnJlZigpOwogCiAgICAgcmV0dXJuICp0aGlz
OwogfQpAQCAtNjksOCArNjksOCBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShDb2xvciYmIG90
aGVyKQogICAgIGlmICgqdGhpcyA9PSBvdGhlcikKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0g
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgYXNFeHRlbmRlZCgpLmRlcmVmKCk7CisgICAg
aWYgKGlzT3V0T2ZMaW5lKCkpCisgICAgICAgIGFzT3V0T2ZMaW5lKCkuZGVyZWYoKTsKIAogICAg
IG1fY29sb3JBbmRGbGFncyA9IG90aGVyLm1fY29sb3JBbmRGbGFnczsKICAgICBvdGhlci5tX2Nv
bG9yQW5kRmxhZ3MgPSBpbnZhbGlkQ29sb3JBbmRGbGFnczsKQEAgLTE1NSwxNSArMTU1LDE1IEBA
IENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICBpZiAoaXNTZW1hbnRpYygp
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCi0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZFJlZigpLCBGbGFnczo6U2VtYW50aWMgfTsKKyAgICBp
ZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHsgYXNPdXRPZkxpbmVSZWYoKSwgY29s
b3JTcGFjZSgpLCBGbGFnczo6U2VtYW50aWMgfTsKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBG
bGFnczo6U2VtYW50aWMgfTsKIH0KIAogc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9u
ZW50czxmbG9hdD4+IENvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CiB7Ci0g
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9y
U3BhY2UoKSwgYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OworICAgIGlmIChpc091dE9mTGlu
ZSgpKQorICAgICAgICByZXR1cm4geyBjb2xvclNwYWNlKCksIGFzT3V0T2ZMaW5lKCkuY29tcG9u
ZW50cygpIH07CiAgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oYXNJbmxpbmUoKSkpIH07CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjczNjMz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTQgKzI1LDE3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29s
b3JDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkNvbG9y
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgorI2luY2x1ZGUgPGZ1bmN0
aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
CiAjaWYgVVNFKENHKQpAQCAtNzEsOCArNzQsNiBAQCBwdWJsaWM6CiAKICAgICBDb2xvcihTUkdC
QTx1aW50OF90PiwgT3B0aW9uU2V0PEZsYWdzPiA9IHsgfSk7CiAgICAgQ29sb3IoT3B0aW9uYWw8
U1JHQkE8dWludDhfdD4+LCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKLQotICAgIENvbG9yKENv
bG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFncz4gPSB7IH0p
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWZfdDxJc0NvbG9yVHlwZVdpdGhDb21wb25lbnRUeXBlPENvbG9yVHlwZSwgZmxvYXQ+
PiogPSBudWxscHRyPgogICAgIENvbG9yKGNvbnN0IENvbG9yVHlwZSYsIE9wdGlvblNldDxGbGFn
cz4gPSB7IH0pOwpAQCAtOTgsMTAgKzk5LDEyIEBAIHB1YmxpYzoKICAgICBib29sIGlzU2VtYW50
aWMoKSBjb25zdDsKICAgICBib29sIHVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbigpIGNv
bnN0OwogCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/
IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9
Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4
dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9Ci0gICAgdWlu
dDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0Rmxv
YXRBbHBoYVRvPHVpbnQ4X3Q+KGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxw
aGE7IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVk
KCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJ
bmxpbmUoKS5hbHBoYSk7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKKwor
ICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRP
ZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9CisgICAg
Ym9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxp
bmUoKS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90
IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRB
bHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhh
OyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUo
KSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJ
bmxpbmUoKS5hbHBoYSk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWluYW5jZSgp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OyAvLyBG
SVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KQEAgLTEzNSwxNCAr
MTM4LDE3IEBAIHB1YmxpYzoKIAogICAgIENvbG9yIHNlbWFudGljQ29sb3IoKSBjb25zdDsKIAor
ICAgIC8vIFJldHVybnMgdGhlIHVuZGVybHlpbmcgY29sb3IgaWYgdGhlIGNvbG9yIHNwYWNlIGlz
IHNSR0IgYW5kIHRoZSB2YWx1ZQorICAgIC8vIGlzIHJlcHJlc2VudGFibGUgYXMgU1JHQkE8dWlu
dDhfdD4uCisgICAgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHRyeUdldEFzU1JHQkFCeXRlcygp
IGNvbnN0OworCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsK
ICAgICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIFVTRShDRykKLSAg
ICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBD
b2xvcihDR0NvbG9yUmVmLCBPcHRpb25TZXQ8RmxhZ3M+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBD
b2xvcihDR0NvbG9yUmVmLCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oV0lOKQpAQCAtMTY2LDQ0ICsxNzIsNjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdGV4cHIgYXV0byBkYXJrR3JlZW4gPSBTUkdCQTx1aW50OF90PiB7IDAsIDEyOCwgMCB9Owog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBvcmFuZ2UgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwg
MTI4LCAwIH07CiAKLSAgICBib29sIGlzRXh0ZW5kZWQoKSBjb25zdDsKLSAgICBib29sIGlzSW5s
aW5lKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29u
c3Q7Ci0gICAgU1JHQkE8dWludDhfdD4gYXNJbmxpbmUoKSBjb25zdDsKKyAgICBzdGF0aWMgYm9v
bCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29s
b3IoY29uc3QgQ29sb3ImKTsKIAotICAgIC8vIEV4dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29s
b3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4KKyAgICAvLyBPdXQgb2YgbGluZSBhbmQgaW5s
aW5lIGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCiAgICAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZyaWVuZCBib29s
IGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
Yik7Ci0gICAgZnJpZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNv
bnN0IENvbG9yJik7Ci0gICAgZnJpZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5n
U2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci0KLSAgICBzdGF0aWMg
Ym9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0aWMgYm9vbCBpc1doaXRl
Q29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBmcmllbmQgYm9vbCBvdXRPZkxpbmVDb2xvcnNFcXVh
bChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CisgICAgZnJpZW5kIGJvb2wgb3V0T2ZMaW5l
Q29sb3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xv
ciYpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xv
cj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBDb2xvcihSZWY8RXh0ZW5kZWRD
b2xvcj4mJiwgT3B0aW9uU2V0PEZsYWdzPiA9IHsgfSk7CisgICAgY2xhc3MgT3V0T2ZMaW5lQ29s
b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxPdXRPZkxpbmVDb2xvcj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFJlZjxPdXRPZkxpbmVDb2xvcj4gY3JlYXRlKENvbG9yQ29tcG9uZW50czxm
bG9hdD4gY29tcG9uZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgT3V0T2ZMaW5lQ29sb3IoY29tcG9uZW50cykpOworICAgICAgICB9CisKKyAgICAgICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHNbM107IH0KKyAgICAgICAg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
b25lbnRzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBPdXRPZkxpbmVDb2xvcihDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMpCisgICAgICAgICAgICA6IG1fY29tcG9uZW50cyhj
b21wb25lbnRzKQorICAgICAgICB7CisgICAgICAgIH0KIAotICAgIGVudW0gY2xhc3MgRmxhZ3NJ
bmNsdWRpbmdQcml2YXRlIDogdWludDE2X3QgewotICAgICAgICBTZW1hbnRpYyAgICAgICAgICAg
ICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KEZsYWdzOjpTZW1hbnRpYyksCi0g
ICAgICAgIFVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uICAgPSBzdGF0aWNfY2FzdDx1aW50
MTZfdD4oRmxhZ3M6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKSwKKyAgICAgICAgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiBtX2NvbXBvbmVudHM7CisgICAgfTsKKyAgICBDb2xvcihSZWY8
T3V0T2ZMaW5lQ29sb3I+JiYsIENvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOwor
CisgICAgZW51bSBjbGFzcyBGbGFnc0luY2x1ZGluZ1ByaXZhdGUgOiB1aW50OF90IHsKKyAgICAg
ICAgU2VtYW50aWMgICAgICAgICAgICAgICAgICAgICAgICA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KEZsYWdzOjpTZW1hbnRpYyksCisgICAgICAgIFVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9u
ICAgPSBzdGF0aWNfY2FzdDx1aW50OF90PihGbGFnczo6VXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6
YXRpb24pLAogICAgICAgICBWYWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAy
LAotICAgICAgICBFeHRlbmRlZCAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAorICAg
ICAgICBPdXRPZkxpbmUgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAogICAgICAgICBI
YXNoVGFibGVFbXB0eVZhbHVlICAgICAgICAgICAgID0gMSA8PCA0LAogICAgICAgICBIYXNoVGFi
bGVEZWxldGVkVmFsdWUgICAgICAgICAgID0gMSA8PCA1LAogICAgIH07CiAgICAgc3RhdGljIE9w
dGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKE9w
dGlvblNldDxGbGFncz4gZmxhZ3MpIHsgcmV0dXJuIE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1By
aXZhdGU+Ojpmcm9tUmF3KGZsYWdzLnRvUmF3KCkpOyB9CiAKICAgICBPcHRpb25TZXQ8RmxhZ3NJ
bmNsdWRpbmdQcml2YXRlPiBmbGFncygpIGNvbnN0OworICAgIGJvb2wgaXNPdXRPZkxpbmUoKSBj
b25zdDsKKyAgICBib29sIGlzSW5saW5lKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldENvbG9yKFNS
R0JBPHVpbnQ4X3Q+LCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7Ci0g
ICAgdm9pZCBzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmLCBPcHRpb25TZXQ8
RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CisgICAgdm9pZCBzZXRPdXRPZkxpbmVDb2xv
cihSZWY8T3V0T2ZMaW5lQ29sb3I+JiYsIENvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFnc0luY2x1
ZGluZ1ByaXZhdGU+ID0geyB9KTsKIAorICAgIFNSR0JBPHVpbnQ4X3Q+IGFzSW5saW5lKCkgY29u
c3Q7CiAgICAgUGFja2VkQ29sb3I6OlJHQkEgYXNQYWNrZWRJbmxpbmUoKSBjb25zdDsKLSAgICBS
ZWY8RXh0ZW5kZWRDb2xvcj4gYXNFeHRlbmRlZFJlZigpIGNvbnN0OworCisgICAgY29uc3QgT3V0
T2ZMaW5lQ29sb3ImIGFzT3V0T2ZMaW5lKCkgY29uc3Q7CisgICAgUmVmPE91dE9mTGluZUNvbG9y
PiBhc091dE9mTGluZVJlZigpIGNvbnN0OwogCiAjaWYgQ1BVKEFERFJFU1M2NCkKICAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJlck9mQml0c0luUG9pbnRlciA9IDQ4OwpAQCAt
MjExLDE2ICsyMzQsMjMgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heE51bWJlck9mQml0c0luUG9pbnRlciA9IDMyOwogI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50NjRfdCBjb2xvclZhbHVlTWFzayA9ICgxVUxMIDw8IG1heE51bWJlck9mQml0c0lu
UG9pbnRlcikgLSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZmxhZ3NTaXplID0g
c2l6ZW9mKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZSkgKiA4OworICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDY0X3QgZmxhZ3NTaGlmdCA9IG1heE51bWJlck9mQml0c0luUG9pbnRlcjsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQ2NF90IGNvbG9yU3BhY2VTaXplID0gc2l6ZW9mKENvbG9yU3BhY2Up
ICogODsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGNvbG9yU3BhY2VTaGlmdCA9IG1h
eE51bWJlck9mQml0c0luUG9pbnRlciAtIGZsYWdzU2l6ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KGZs
YWdzU2l6ZSArIGNvbG9yU3BhY2VTaXplICsgbWF4TnVtYmVyT2ZCaXRzSW5Qb2ludGVyIDw9IDY0
KTsKIAogICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkRmxhZ3MoT3B0aW9uU2V0PEZsYWdzSW5j
bHVkaW5nUHJpdmF0ZT4pOworICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVkQ29sb3JTcGFjZShD
b2xvclNwYWNlKTsKICAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZElubGluZUNvbG9yKFNSR0JB
PHVpbnQ4X3Q+KTsKICAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZFBhY2tlZElubGluZUNvbG9y
KFBhY2tlZENvbG9yOjpSR0JBKTsKLSAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZEV4dGVuZGVk
Q29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYpOworICAgIHN0YXRpYyB1aW50NjRfdCBlbmNvZGVk
T3V0T2ZMaW5lQ29sb3IoUmVmPE91dE9mTGluZUNvbG9yPiYmKTsKIAogICAgIHN0YXRpYyBPcHRp
b25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiBkZWNvZGVkRmxhZ3ModWludDY0X3QpOworICAg
IHN0YXRpYyBDb2xvclNwYWNlIGRlY29kZWRDb2xvclNwYWNlKHVpbnQ2NF90KTsKICAgICBzdGF0
aWMgU1JHQkE8dWludDhfdD4gZGVjb2RlZElubGluZUNvbG9yKHVpbnQ2NF90KTsKICAgICBzdGF0
aWMgUGFja2VkQ29sb3I6OlJHQkEgZGVjb2RlZFBhY2tlZElubGluZUNvbG9yKHVpbnQ2NF90KTsK
LSAgICBzdGF0aWMgRXh0ZW5kZWRDb2xvciYgZGVjb2RlZEV4dGVuZGVkQ29sb3IodWludDY0X3Qp
OworICAgIHN0YXRpYyBPdXRPZkxpbmVDb2xvciYgZGVjb2RlZE91dE9mTGluZUNvbG9yKHVpbnQ2
NF90KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgaW52YWxpZENvbG9yQW5kRmxh
Z3MgPSAwOwogICAgIHVpbnQ2NF90IG1fY29sb3JBbmRGbGFncyB7IGludmFsaWRDb2xvckFuZEZs
YWdzIH07CkBAIC0yMjksOSArMjU5LDkgQEAgcHJpdmF0ZToKIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOwogCi0vLyBPbmUgb3IgYm90aCBtdXN0IGJlIGV4dGVuZGVkIGNvbG9ycy4K
LWJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci1i
b29sIGV4dGVuZGVkQ29sb3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOworLy8gT25lIG9yIGJvdGggbXVzdCBiZSBvdXQgb2YgbGluZSBjb2xv
cnMuCitib29sIG91dE9mTGluZUNvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3Im
KTsKK2Jvb2wgb3V0T2ZMaW5lQ29sb3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3Qg
Q29sb3ImLCBjb25zdCBDb2xvciYpOwogCiAjaWYgVVNFKENHKQogV0VCQ09SRV9FWFBPUlQgQ0dD
b2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0yNDEsOCArMjcxLDggQEAg
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcgogCiBpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKIHsKLSAgICBpZiAoYS5p
c0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBleHRlbmRlZENv
bG9yc0VxdWFsKGEsIGIpOworICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkgfHwgYi5pc091dE9mTGlu
ZSgpKQorICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQ29sb3JzRXF1YWwoYSwgYik7CiAgICAgcmV0
dXJuIGEubV9jb2xvckFuZEZsYWdzID09IGIubV9jb2xvckFuZEZsYWdzOwogfQogCkBAIC0yNTEs
MzEgKzI4MSwzMSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBjCiAg
ICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotaW5saW5lIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVh
bChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCitpbmxpbmUgYm9vbCBvdXRPZkxpbmVD
b2xvcnNFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7Ci0gICAgaWYgKGEu
aXNFeHRlbmRlZCgpICYmIGIuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYS5hc0V4dGVu
ZGVkKCkgPT0gYi5hc0V4dGVuZGVkKCkgJiYgYS5mbGFncygpID09IGIuZmxhZ3MoKTsKKyAgICBp
ZiAoYS5pc091dE9mTGluZSgpICYmIGIuaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIGEu
YXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgPT0gYi5hc091dE9mTGluZSgpLmNvbXBvbmVudHMo
KSAmJiBhLmNvbG9yU3BhY2UoKSA9PSBiLmNvbG9yU3BhY2UoKSAmJiBhLmZsYWdzKCkgPT0gYi5m
bGFncygpOwogCi0gICAgQVNTRVJUKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsK
KyAgICBBU1NFUlQoYS5pc091dE9mTGluZSgpIHx8IGIuaXNPdXRPZkxpbmUoKSk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1pbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsSWdub3JpbmdT
ZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK2lubGluZSBib29s
IG91dE9mTGluZUNvbG9yc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBh
LCBjb25zdCBDb2xvciYgYikKIHsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVu
ZGVkKCkpIHsKKyAgICBpZiAoYS5pc091dE9mTGluZSgpICYmIGIuaXNPdXRPZkxpbmUoKSkgewog
ICAgICAgICBhdXRvIGFGbGFncyA9IGEuZmxhZ3MoKSAtIENvbG9yOjpGbGFnc0luY2x1ZGluZ1By
aXZhdGU6OlNlbWFudGljOwogICAgICAgICBhdXRvIGJGbGFncyA9IGIuZmxhZ3MoKSAtIENvbG9y
OjpGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlNlbWFudGljOwotICAgICAgICByZXR1cm4gYS5hc0V4
dGVuZGVkKCkgPT0gYi5hc0V4dGVuZGVkKCkgJiYgYUZsYWdzID09IGJGbGFnczsKKyAgICAgICAg
cmV0dXJuIGEuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgPT0gYi5hc091dE9mTGluZSgpLmNv
bXBvbmVudHMoKSAmJiBhLmNvbG9yU3BhY2UoKSA9PSBiLmNvbG9yU3BhY2UoKSAmJiBhRmxhZ3Mg
PT0gYkZsYWdzOwogICAgIH0KIAotICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0
ZW5kZWQoKSk7CisgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUoKSB8fCBiLmlzT3V0T2ZMaW5lKCkp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFu
dGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogewotICAgIGlmIChhLmlz
RXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29s
b3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoYSwgYik7CisgICAgaWYgKGEuaXNPdXRPZkxp
bmUoKSB8fCBiLmlzT3V0T2ZMaW5lKCkpCisgICAgICAgIHJldHVybiBvdXRPZkxpbmVDb2xvcnNF
cXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihhLCBiKTsKIAogICAgIGF1dG8gYUZsYWdzID0gYS5m
bGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7CiAgICAgYXV0
byBiRmxhZ3MgPSBiLmZsYWdzKCkgLSBDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1h
bnRpYzsKQEAgLTI5MywyNyArMzIzLDIyIEBAIGlubGluZSBDb2xvcjo6Q29sb3IoT3B0aW9uYWw8
U1JHQkE8dWludDgKICAgICAgICAgc2V0Q29sb3IoKmNvbG9yLCB0b0ZsYWdzSW5jbHVkaW5nUHJp
dmF0ZShmbGFncykpOwogfQogCi1pbmxpbmUgQ29sb3I6OkNvbG9yKENvbG9yQ29tcG9uZW50czxm
bG9hdD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3M+
IGZsYWdzKQotewotICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNv
bXBvbmVudHMsIGNvbG9yU3BhY2UpLCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwot
fQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
X3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5s
aW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+
IGZsYWdzKQogewotICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNv
bG9yKSwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICBzZXRPdXRPZkxpbmVD
b2xvcihPdXRPZkxpbmVDb2xvcjo6Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKSksIENv
bG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zl90PElzQ29sb3JUeXBlV2l0aENvbXBvbmVudFR5cGU8Q29sb3JUeXBlLCBmbG9hdD4+Kj4KIGlu
bGluZSBDb2xvcjo6Q29sb3IoY29uc3QgT3B0aW9uYWw8Q29sb3JUeXBlPiYgY29sb3IsIE9wdGlv
blNldDxGbGFncz4gZmxhZ3MpCiB7CiAgICAgaWYgKGNvbG9yKQotICAgICAgICBzZXRFeHRlbmRl
ZENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgqY29sb3IpLCB0b0ZsYWdzSW5jbHVkaW5nUHJp
dmF0ZShmbGFncykpOworICAgICAgICBzZXRPdXRPZkxpbmVDb2xvcihPdXRPZkxpbmVDb2xvcjo6
Y3JlYXRlKGFzQ29sb3JDb21wb25lbnRzKCpjb2xvcikpLCBDb2xvclNwYWNlRm9yPENvbG9yVHlw
ZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7CiB9CiAKLWlubGluZSBDb2xvcjo6
Q29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvciwgT3B0aW9uU2V0PEZsYWdz
PiBmbGFncykKK2lubGluZSBDb2xvcjo6Q29sb3IoUmVmPE91dE9mTGluZUNvbG9yPiYmIG91dE9m
TGluZUNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFncz4gZmxhZ3Mp
CiB7Ci0gICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpLCB0b0ZsYWdz
SW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOworICAgIHNldE91dE9mTGluZUNvbG9yKFdURk1vdmUo
b3V0T2ZMaW5lQ29sb3IpLCBjb2xvclNwYWNlLCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFn
cykpOwogfQogCiBpbmxpbmUgQ29sb3I6OkNvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5
cGUpCkBAIC0zMzMsMTQgKzM1OCwxNCBAQCBpbmxpbmUgYm9vbCBDb2xvcjo6aXNIYXNoVGFibGVE
ZWxldGVkVmFsCiAKIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKIHsKLSAgICBpZiAoaXNFeHRlbmRl
ZCgpKQotICAgICAgICBhc0V4dGVuZGVkKCkuZGVyZWYoKTsKKyAgICBpZiAoaXNPdXRPZkxpbmUo
KSkKKyAgICAgICAgYXNPdXRPZkxpbmUoKS5kZXJlZigpOwogfQogCiBpbmxpbmUgdW5zaWduZWQg
Q29sb3I6Omhhc2goKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJl
dHVybiBjb21wdXRlSGFzaChhc0V4dGVuZGVkKCkuY29tcG9uZW50cygpLCBhc0V4dGVuZGVkKCku
Y29sb3JTcGFjZSgpLCBmbGFncygpLnRvUmF3KCkpOworICAgIGlmIChpc091dE9mTGluZSgpKQor
ICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCksIGNv
bG9yU3BhY2UoKSwgZmxhZ3MoKS50b1JhdygpKTsKICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNQ
YWNrZWRJbmxpbmUoKS52YWx1ZSwgZmxhZ3MoKS50b1JhdygpKTsKIH0KIApAQCAtMzU5LDEwICsz
ODQsMTUgQEAgaW5saW5lIGJvb2wgQ29sb3I6OnVzZXNDb2xvckZ1bmN0aW9uU2VyaQogICAgIHJl
dHVybiBmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6VXNlQ29sb3JGdW5j
dGlvblNlcmlhbGl6YXRpb24pOwogfQogCitpbmxpbmUgQ29sb3JTcGFjZSBDb2xvcjo6Y29sb3JT
cGFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRlY29kZWRDb2xvclNwYWNlKG1fY29sb3JBbmRG
bGFncyk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGRlY2x0eXBlKGF1dG8pIENv
bG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKIHsKLSAg
ICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLmNhbGxPblVu
ZGVybHlpbmdUeXBlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgaWYgKGlz
T3V0T2ZMaW5lKCkpCisgICAgICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShhc091dE9mTGlu
ZSgpLmNvbXBvbmVudHMoKSwgY29sb3JTcGFjZSgpLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvcikpOwogICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVu
Y3RvciksIGFzSW5saW5lKCkpOwogfQogCkBAIC0zOTgsMjYgKzQyOCwyNiBAQCBpbmxpbmUgT3B0
aW9uU2V0PENvbG9yOjpGbGFnc0luY2x1ZGluZ1ByCiAgICAgcmV0dXJuIGRlY29kZWRGbGFncyht
X2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNFeHRlbmRlZCgpIGNv
bnN0CitpbmxpbmUgYm9vbCBDb2xvcjo6aXNPdXRPZkxpbmUoKSBjb25zdAogewotICAgIHJldHVy
biBmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6RXh0ZW5kZWQpOworICAg
IHJldHVybiBmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6T3V0T2ZMaW5l
KTsKIH0KIAogaW5saW5lIGJvb2wgQ29sb3I6OmlzSW5saW5lKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gIWZsYWdzKCkuY29udGFpbnMoRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpFeHRlbmRlZCk7Cisg
ICAgcmV0dXJuICFmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6T3V0T2ZM
aW5lKTsKIH0KIAotaW5saW5lIGNvbnN0IEV4dGVuZGVkQ29sb3ImIENvbG9yOjphc0V4dGVuZGVk
KCkgY29uc3QKK2lubGluZSBjb25zdCBDb2xvcjo6T3V0T2ZMaW5lQ29sb3ImIENvbG9yOjphc091
dE9mTGluZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJu
IGRlY29kZWRFeHRlbmRlZENvbG9yKG1fY29sb3JBbmRGbGFncyk7CisgICAgQVNTRVJUKGlzT3V0
T2ZMaW5lKCkpOworICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29sb3IobV9jb2xvckFuZEZs
YWdzKTsKIH0KIAotaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBDb2xvcjo6YXNFeHRlbmRlZFJl
ZigpIGNvbnN0CitpbmxpbmUgUmVmPENvbG9yOjpPdXRPZkxpbmVDb2xvcj4gQ29sb3I6OmFzT3V0
T2ZMaW5lUmVmKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1
cm4gZGVjb2RlZEV4dGVuZGVkQ29sb3IobV9jb2xvckFuZEZsYWdzKTsKKyAgICBBU1NFUlQoaXNP
dXRPZkxpbmUoKSk7CisgICAgcmV0dXJuIGRlY29kZWRPdXRPZkxpbmVDb2xvcihtX2NvbG9yQW5k
RmxhZ3MpOwogfQogCiBpbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgY29u
c3QKQEAgLTQzMiw5ICs0NjIsMjEgQEAgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIENvbG9yOjph
c1BhY2tlZAogICAgIHJldHVybiBkZWNvZGVkUGFja2VkSW5saW5lQ29sb3IobV9jb2xvckFuZEZs
YWdzKTsKIH0KIAoraW5saW5lIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBDb2xvcjo6dHJ5R2V0
QXNTUkdCQUJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgcmV0
dXJuIGFzSW5saW5lKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwogaW5saW5lIHVp
bnQ2NF90IENvbG9yOjplbmNvZGVkRmxhZ3MoT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0
ZT4gZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihmbGFncy50b1Jh
dygpKSA8PCBtYXhOdW1iZXJPZkJpdHNJblBvaW50ZXI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihmbGFncy50b1JhdygpKSA8PCBmbGFnc1NoaWZ0OworfQorCitpbmxpbmUgdWlu
dDY0X3QgQ29sb3I6OmVuY29kZWRDb2xvclNwYWNlKENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbG9yU3BhY2UpIDw8IGNvbG9yU3Bh
Y2VTaGlmdDsKIH0KIAogaW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkSW5saW5lQ29sb3Io
U1JHQkE8dWludDhfdD4gY29sb3IpCkBAIC00NDcsMTggKzQ4OSwyMyBAQCBpbmxpbmUgdWludDY0
X3QgQ29sb3I6OmVuY29kZWRQYWNrZWRJbmxpCiAgICAgcmV0dXJuIGNvbG9yLnZhbHVlOwogfQog
Ci1pbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRl
ZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCitpbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRP
dXRPZkxpbmVDb2xvcihSZWY8T3V0T2ZMaW5lQ29sb3I+JiYgb3V0T2ZMaW5lQ29sb3IpCiB7CiAj
aWYgQ1BVKEFERFJFU1M2NCkKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90PigmZXh0
ZW5kZWRDb2xvci5sZWFrUmVmKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KCZvdXRPZkxpbmVDb2xvci5sZWFrUmVmKCkpOwogI2Vsc2UKLSAgICByZXR1cm4gYml0d2lzZV9j
YXN0PHVpbnQzMl90PigmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCkpOworICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8dWludDMyX3Q+KCZvdXRPZkxpbmVDb2xvci5sZWFrUmVmKCkpOwogI2VuZGlmCiB9
CiAKIGlubGluZSBPcHRpb25TZXQ8Q29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gQ29sb3I6
OmRlY29kZWRGbGFncyh1aW50NjRfdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gT3B0aW9uU2V0PENv
bG9yOjpGbGFnc0luY2x1ZGluZ1ByaXZhdGU+Ojpmcm9tUmF3KHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih2YWx1ZSA+PiBtYXhOdW1iZXJPZkJpdHNJblBvaW50ZXIpKTsKKyAgICByZXR1cm4gT3B0aW9u
U2V0PENvbG9yOjpGbGFnc0luY2x1ZGluZ1ByaXZhdGU+Ojpmcm9tUmF3KHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHZhbHVlID4+IGZsYWdzU2hpZnQpKTsKK30KKworaW5saW5lIENvbG9yU3BhY2UgQ29s
b3I6OmRlY29kZWRDb2xvclNwYWNlKHVpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDb2xvclNwYWNlPihzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiBjb2xvclNw
YWNlU2hpZnQpKTsKIH0KIAogaW5saW5lIFNSR0JBPHVpbnQ4X3Q+IENvbG9yOjpkZWNvZGVkSW5s
aW5lQ29sb3IodWludDY0X3QgdmFsdWUpCkBAIC00NzEsMjcgKzUxOCwyNyBAQCBpbmxpbmUgUGFj
a2VkQ29sb3I6OlJHQkEgQ29sb3I6OmRlY29kZWRQCiAgICAgcmV0dXJuIFBhY2tlZENvbG9yOjpS
R0JBIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spIH07CiB9
CiAKLWlubGluZSBFeHRlbmRlZENvbG9yJiBDb2xvcjo6ZGVjb2RlZEV4dGVuZGVkQ29sb3IodWlu
dDY0X3QgdmFsdWUpCitpbmxpbmUgQ29sb3I6Ok91dE9mTGluZUNvbG9yJiBDb2xvcjo6ZGVjb2Rl
ZE91dE9mTGluZUNvbG9yKHVpbnQ2NF90IHZhbHVlKQogewogI2lmIENQVShBRERSRVNTNjQpCi0g
ICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8RXh0ZW5kZWRDb2xvcio+KHZhbHVlICYgY29sb3JWYWx1
ZU1hc2spOworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PE91dE9mTGluZUNvbG9yKj4odmFsdWUg
JiBjb2xvclZhbHVlTWFzayk7CiAjZWxzZQotICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEV4dGVu
ZGVkQ29sb3IqPihzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUgJiBjb2xvclZhbHVlTWFzaykp
OworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PE91dE9mTGluZUNvbG9yKj4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spKTsKICNlbmRpZgogfQogCiBpbmxpbmUg
dm9pZCBDb2xvcjo6c2V0Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IsIE9wdGlvblNldDxGbGFn
c0luY2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQogewogICAgIGZsYWdzLmFkZCh7IEZsYWdzSW5jbHVk
aW5nUHJpdmF0ZTo6VmFsaWQgfSk7Ci0gICAgbV9jb2xvckFuZEZsYWdzID0gZW5jb2RlZElubGlu
ZUNvbG9yKGNvbG9yKSB8IGVuY29kZWRGbGFncyhmbGFncyk7CisgICAgbV9jb2xvckFuZEZsYWdz
ID0gZW5jb2RlZElubGluZUNvbG9yKGNvbG9yKSB8IGVuY29kZWRDb2xvclNwYWNlKENvbG9yU3Bh
Y2U6OlNSR0IpIHwgZW5jb2RlZEZsYWdzKGZsYWdzKTsKICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7
CiB9CiAKLWlubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiBmbGFncykKK2lu
bGluZSB2b2lkIENvbG9yOjpzZXRPdXRPZkxpbmVDb2xvcihSZWY8T3V0T2ZMaW5lQ29sb3I+JiYg
Y29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJp
dmF0ZT4gZmxhZ3MpCiB7Ci0gICAgZmxhZ3MuYWRkKHsgRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpW
YWxpZCwgRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpFeHRlbmRlZCB9KTsKLSAgICBtX2NvbG9yQW5k
RmxhZ3MgPSBlbmNvZGVkRXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGNvbG9yKSkgfCBlbmNvZGVkRmxh
Z3MoZmxhZ3MpOwotICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOworICAgIGZsYWdzLmFkZCh7IEZs
YWdzSW5jbHVkaW5nUHJpdmF0ZTo6VmFsaWQsIEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6T3V0T2ZM
aW5lIH0pOworICAgIG1fY29sb3JBbmRGbGFncyA9IGVuY29kZWRPdXRPZkxpbmVDb2xvcihXVEZN
b3ZlKGNvbG9yKSkgfCBlbmNvZGVkQ29sb3JTcGFjZShjb2xvclNwYWNlKSB8IGVuY29kZWRGbGFn
cyhmbGFncyk7CisgICAgQVNTRVJUKGlzT3V0T2ZMaW5lKCkpOwogfQogCiBpbmxpbmUgYm9vbCBD
b2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTUxOCwxNyArNTY1LDE3
IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQ29sb3I6OmVuY28KIAogICAgIGVuY29k
ZXIgPDwgZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlNlbWFudGljKTsK
ICAgICBlbmNvZGVyIDw8IGZsYWdzKCkuY29udGFpbnMoRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpV
c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7
CisgICAgCisgICAgaWYgKGlzT3V0T2ZMaW5lKCkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVl
OworICAgICAgICBlbmNvZGVyIDw8IGNvbG9yU3BhY2UoKTsKIAotICAgICAgICBhdXRvJiBleHRl
bmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOwotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBo
YV0gPSBleHRlbmRlZENvbG9yLmNvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byYgb3V0T2ZMaW5l
Q29sb3IgPSBhc091dE9mTGluZSgpOworICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0g
PSBvdXRPZkxpbmVDb2xvci5jb21wb25lbnRzKCk7CiAgICAgICAgIGVuY29kZXIgPDwgYzE7CiAg
ICAgICAgIGVuY29kZXIgPDwgYzI7CiAgICAgICAgIGVuY29kZXIgPDwgYzM7CiAgICAgICAgIGVu
Y29kZXIgPDwgYWxwaGE7Ci0gICAgICAgIGVuY29kZXIgPDwgZXh0ZW5kZWRDb2xvci5jb2xvclNw
YWNlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZW5jb2RlciA8PCBmYWxzZTsKQEAg
LTU2MSwyNyArNjA4LDI3IEBAIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPENvbG9y
PiAKICAgICBpZiAodXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKQogICAgICAgICBmbGFn
cy5hZGQoRmxhZ3M6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKIAotICAgIGJvb2wg
aXNFeHRlbmRlZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQorICAgIGJv
b2wgaXNPdXRPZkxpbmU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc091dE9mTGluZSkpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoaXNFeHRlbmRlZCkgewotICAg
ICAgICBmbG9hdCBjMTsKLSAgICAgICAgZmxvYXQgYzI7Ci0gICAgICAgIGZsb2F0IGMzOwotICAg
ICAgICBmbG9hdCBhbHBoYTsKKyAgICBpZiAoaXNPdXRPZkxpbmUpIHsKICAgICAgICAgQ29sb3JT
cGFjZSBjb2xvclNwYWNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2Up
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgZmxvYXQgYzE7CiAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYzEpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICAgICAgZmxvYXQgYzI7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
YzIpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgZmxvYXQgYzM7
CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYzMpKQogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgZmxvYXQgYWxwaGE7CiAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoYWxwaGEpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIHJldHVybiBDb2xvciB7IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSh7
IGMxLCBjMiwgYzMsIGFscGhhIH0sIGNvbG9yU3BhY2UpLCBmbGFncyB9OworICAgICAgICByZXR1
cm4gQ29sb3IgeyBPdXRPZkxpbmVDb2xvcjo6Y3JlYXRlKHsgYzEsIGMyLCBjMywgYWxwaGEgfSks
IGNvbG9yU3BhY2UsIGZsYWdzIH07CiAgICAgfQogCiAgICAgdWludDMyX3QgdmFsdWU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2Vy
aWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI3MzYzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKIAogI2luY2x1ZGUg
IkNvbG9yLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRl
ZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5oCShyZXZpc2lvbiAyNzM2MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvckNv
bnZlcnNpb24uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBl
cy5oIgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRXh0
ZW5kZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKLXB1YmxpYzoK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xv
cj4gY3JlYXRlKGNvbnN0IENvbG9yVHlwZSYpOwotICAgIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xv
cj4gY3JlYXRlKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOwotICAgIAotICAg
IGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9Ci0KLSAgICBj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9jb21wb25lbnRzOyB9Ci0gICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNs
dHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIEV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiwgQ29sb3JTcGFj
ZSk7Ci0KLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsKLSAgICBDb2xv
clNwYWNlIG1fY29sb3JTcGFjZTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
RXh0ZW5kZWRDb2xvciYgYSwgY29uc3QgRXh0ZW5kZWRDb2xvciYgYikKLXsKLSAgICByZXR1cm4g
YS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYS5jb21wb25lbnRzKCkgPT0gYi5j
b21wb25lbnRzKCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRXh0ZW5kZWRD
b2xvciYgYSwgY29uc3QgRXh0ZW5kZWRDb2xvciYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBSZWY8RXh0ZW5kZWRD
b2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihhc0NvbG9yQ29tcG9uZW50cyhj
b2xvciksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPikpOwotfQotCi1pbmxpbmUgUmVmPEV4dGVu
ZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNv
bXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBFeHRlbmRlZENvbG9yKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UpKTsKLX0KLQotaW5saW5l
IEV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21w
b25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi0gICAgOiBtX2NvbXBvbmVudHMoY29tcG9u
ZW50cykKLSAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQotewotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRl
cmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKLXsKLSAgICByZXR1cm4gY2FsbFdp
dGhDb2xvclR5cGUobV9jb21wb25lbnRzLCBtX2NvbG9yU3BhY2UsIHN0ZDo6Zm9yd2FyZDxGdW5j
dG9yPihmdW5jdG9yKSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNzM2MzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODQsMTEgKzg0LDYgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiByb3VuZEFu
ZAogICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNSR0JBPGZsb2F0PiB7
IHIsIGcsIGIsIGEgfSk7CiB9CiAKLUNvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQotICAg
IDogQ29sb3Iocm91bmRBbmRDbGFtcFRvU1JHQkFMb3NzeShjb2xvcikpCi17Ci19Ci0KIENvbG9y
OjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogICAgIDog
Q29sb3Iocm91bmRBbmRDbGFtcFRvU1JHQkFMb3NzeShjb2xvciksIGZsYWdzKQogewpAQCAtMTI4
LDggKzEyMyw4IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENvbG8KIAog
Q0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAo
Y29sb3IuaXNJbmxpbmUoKSkgewotICAgICAgICBzd2l0Y2ggKFBhY2tlZENvbG9yOjpSR0JBIHsg
Y29sb3IuYXNJbmxpbmUoKSB9LnZhbHVlKSB7CisgICAgaWYgKGF1dG8gc3JnYiA9IGNvbG9yLnRy
eUdldEFzU1JHQkFCeXRlcygpKSB7CisgICAgICAgIHN3aXRjaCAoUGFja2VkQ29sb3I6OlJHQkEg
eyAqc3JnYiB9LnZhbHVlKSB7CiAgICAgICAgIGNhc2UgUGFja2VkQ29sb3I6OlJHQkEgeyBDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjayB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMgQ0dDb2xv
clJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CiAgICAgICAgICAg
ICByZXR1cm4gdHJhbnNwYXJlbnRDR0NvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHJldmlzaW9uIDI3MzYzMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NiwxNCArNTYsMTAgQEAgdm9pZCBHcmFkaWVudDo6Y3JlYXRlQ0dH
cmFkaWVudCgpCiAKICAgICBib29sIGhhc0V4dGVuZGVkQ29sb3JzID0gZmFsc2U7CiAgICAgZm9y
IChjb25zdCBhdXRvJiBzdG9wIDogbV9zdG9wcykgewotCiAgICAgICAgIC8vIElmIGFsbCB0aGUg
c3RvcHMgYXJlIHNSR0IsIGl0IGlzIGZhc3RlciB0byBjcmVhdGUgYSBncmFkaWVudCB1c2luZwot
ICAgICAgICAvLyBjb21wb25lbnRzIHRoYW4gQ0dDb2xvcnMuCi0gICAgICAgIC8vIEZJWE1FOiBS
YXRoZXIgdGhhbiBqdXN0IGNoZWNrIGZvciBleHRlbmRlZCBjb2xvcnMsIHdlIHNob3VsZCBjaGVj
ayB0aGUgYWN0dWFsCi0gICAgICAgIC8vIGNvbG9yIHNwYWNlLCBhbmQgd2hldGhlciBvciBub3Qg
dGhlIGNvbXBvbmVudHMgYXJlIG91dHNpZGUgWzAtMV0uCi0gICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS8zMjkyNjYwNj4KKyAgICAgICAgLy8gY29tcG9uZW50cyB0aGFuIENHQ29sb3JzLiA8cmRh
cjovL3Byb2JsZW0vMzI5MjY2MDY+CiAKLSAgICAgICAgaWYgKHN0b3AuY29sb3IuaXNFeHRlbmRl
ZCgpKQorICAgICAgICBpZiAoc3RvcC5jb2xvci5jb2xvclNwYWNlKCkgIT0gQ29sb3JTcGFjZTo6
U1JHQikKICAgICAgICAgICAgIGhhc0V4dGVuZGVkQ29sb3JzID0gdHJ1ZTsKIAogICAgICAgICBh
dXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29sb3IuY29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAJKHJl
dmlzaW9uIDI3MzYzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEy
NCw3IEBAIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWQKICAgICBSRUxF
QVNFX0FTU0VSVChtX2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KTsKICAgICBm
b3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKICAgICAgICAg
bV9vZmZzZXRzW2ldID0gZ3JhZGllbnQuc3RvcHMoKVtpXS5vZmZzZXQ7Ci0gICAgICAgIG1fY29s
b3JzW2ldID0gZ3JhZGllbnQuc3RvcHMoKVtpXS5jb2xvci5hc0lubGluZSgpOworICAgICAgICBt
X2NvbG9yc1tpXSA9ICpncmFkaWVudC5zdG9wcygpW2ldLmNvbG9yLnRyeUdldEFzU1JHQkFCeXRl
cygpOwogICAgIH0KIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIGJvb2wgU2V0SW5saW5lRmlsbEdy
YWRpZW50Ojppc0lubGluZShjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZm9yIChh
dXRvJiBjb2xvclN0b3AgOiBncmFkaWVudC5zdG9wcygpKSB7Ci0gICAgICAgIGlmICghY29sb3JT
dG9wLmNvbG9yLmlzSW5saW5lKCkpCisgICAgICAgIGlmICghY29sb3JTdG9wLmNvbG9yLnRyeUdl
dEFzU1JHQkFCeXRlcygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkocmV2aXNpb24gMjcz
NjMzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMCArNzIsMTAgQEAg
c3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZwogICAgIGlmIChjaGFuZ2VG
bGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdzKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5zdHJva2VD
b2xvci5pc0lubGluZSgpKQorICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tl
Q29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci5pc0lubGluZSgpKQorICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hh
bmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpCkBAIC0xMDQsMTMgKzEwNCwx
MyBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uCiAgICAgfQogCiAg
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VD
b2xvckNoYW5nZSkpCi0gICAgICAgIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oY2hhbmdl
cy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpOworICAgICAgICBhcHBlbmQ8U2V0SW5s
aW5lU3Ryb2tlQ29sb3I+KCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdC
QUJ5dGVzKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQogICAgICAgICBhcHBlbmQ8U2V0U3Ryb2tl
VGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAogICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdl
KSkKLSAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLmZp
bGxDb2xvci5hc0lubGluZSgpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4o
KmNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwogCiAgICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpKQogICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqY2hhbmdl
cy5tX3N0YXRlLmZpbGxHcmFkaWVudCwgY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudFNwYWNl
VHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI3MzYzMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEzLDgg
KzExMyw4IEBAIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICoKIAogTlND
b2xvciAqbnNDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzSW5s
aW5lKCkpIHsKLSAgICAgICAgc3dpdGNoIChQYWNrZWRDb2xvcjo6UkdCQSB7IGNvbG9yLmFzSW5s
aW5lKCkgfS52YWx1ZSkgeworICAgIGlmIChhdXRvIHNyZ2IgPSBjb2xvci50cnlHZXRBc1NSR0JB
Qnl0ZXMoKSkgeworICAgICAgICBzd2l0Y2ggKFBhY2tlZENvbG9yOjpSR0JBIHsgKnNyZ2IgfS52
YWx1ZSkgewogICAgICAgICBjYXNlIFBhY2tlZENvbG9yOjpSR0JBIHsgQ29sb3I6OnRyYW5zcGFy
ZW50QmxhY2sgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJl
dGFpblB0cjxOU0NvbG9yPj4gY2xlYXJDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aFNSR0JSZWQ6
MCBncmVlbjowIGJsdWU6MCBhbHBoYTowXTsKICAgICAgICAgICAgIHJldHVybiBjbGVhckNvbG9y
LmdldCgpLmdldCgpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjczNzE5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDMtMDEgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSB0aGUgc2l6ZSBvZiBleHRlbmRlZCBjb2xvcnMg
Ynkgc3RvcmluZyB0aGUgY29sb3Igc3BhY2UgaW4gZnJlZSBiaXRzIG9mIHRoZSBvd25pbmcgQ29s
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMjU4
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6IFJlbW92ZWQuCisgICAgICAgIFVwZGF0ZSB0
ZXN0cyB0byBhY2NvdW50IGZvciByZW1vdmFsIG9mIHRoZSBFeHRlbmRlZENvbG9yIGNsYXNzLgor
ICAgICAgICBNZXJnZSBFeHRlbmRlZENvbG9yVGVzdHMuY3BwIHRoYXQgc3RpbGwgbWFrZSBzZW5z
ZSBpbnRvIENvbG9yVGVzdHMuY3BwCisKIDIwMjEtMDMtMDEgIEpvbmF0aGFuIEJlZGFyZCAgPGpi
ZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3YmtpdHNjbXB5XSBBZGQgY29tbWl0cyB3aXRo
IGNvbGxpZGluZyB0aW1lc3RhbXBzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDI3MzYzMykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNiBAQCBpZiAoRU5BQkxFX1dFQkNPUkUpCiAg
ICAgICAgIFRlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKICAgICAgICAgVGVzdHMvV2ViQ29y
ZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCiAgICAgICAgIFRlc3RzL1dlYkNvcmUvQ29udGV4
dE1lbnVBY3Rpb24uY3BwCi0gICAgICAgIFRlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3Rz
LmNwcAogICAgICAgICBUZXN0cy9XZWJDb3JlL0ZpbGVNb25pdG9yLmNwcAogICAgICAgICBUZXN0
cy9XZWJDb3JlL0Zsb2F0UG9pbnRUZXN0cy5jcHAKICAgICAgICAgVGVzdHMvV2ViQ29yZS9GbG9h
dFJlY3RUZXN0cy5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzM2
MzMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw2IEBACiAJCTMxMjhBODEz
MjM3NjNGQUMwMEQ5MEQ0MCAvKiBsaW5rLXdpdGgtaW1hZ2UuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4QTgxMjIzNzYzRjBCMDBE
OTBENDAgLyogbGluay13aXRoLWltYWdlLmh0bWwgKi87IH07CiAJCTMxMjhBODE1MjM3NjQxMzMw
MEQ5MEQ0MCAvKiBpbWFnZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxMjhBODE0MjM3NjQwRkQwMEQ5MEQ0MCAvKiBpbWFnZS5odG1s
ICovOyB9OwogCQkzMTNDM0EwMjIxRTU2N0MzMDBEQkE4NkUgLyogU3lzdGVtUHJldmlld0Jsb2JO
YW1pbmcuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTNDM0EwMTIxRTU2NzdBMDBEQkE4NkUgLyogU3lzdGVtUHJldmlld0Jsb2JOYW1p
bmcuaHRtbCAqLzsgfTsKLQkJMzE1MTE4MTAxREIxQUU0MDAwMTc2MzA0IC8qIEV4dGVuZGVkQ29s
b3JUZXN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTUxMTgwRjFEQjFBREQ1MDAxNzYzMDQgLyogRXh0ZW5kZWRDb2xvclRlc3RzLmNwcCAqLzsg
fTsKIAkJMzFCNzZFNDMyMzI5OEUyQzAwN0ZFRDJDIC8qIFN5c3RlbVByZXZpZXcubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUI3NkU0MjIzMjk4RTJC
MDA3RkVEMkMgLyogU3lzdGVtUHJldmlldy5tbSAqLzsgfTsKIAkJMzFCNzZFNDUyMzI5OUJEQzAw
N0ZFRDJDIC8qIHN5c3RlbS1wcmV2aWV3LXRyaWdnZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUI3NkU0NDIzMjk5QkEzMDA3RkVE
MkMgLyogc3lzdGVtLXByZXZpZXctdHJpZ2dlci5odG1sICovOyB9OwogCQkzMUU5QkRBMTI0N0Y0
QzYyMDAyRTUxQTIgLyogV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFOUJEQTAyNDdGNEM2MjAw
MkU1MUEyIC8qIFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5tbSAqLzsgfTsKQEAgLTE5
MzEsNyArMTkzMCw2IEBACiAJCTMxMjhBODEyMjM3NjNGMEIwMEQ5MEQ0MCAvKiBsaW5rLXdpdGgt
aW1hZ2UuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsaW5rLXdpdGgtaW1hZ2UuaHRtbCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxMjhBODE0MjM3NjQwRkQwMEQ5MEQ0MCAvKiBpbWFnZS5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5o
dG1sOyBwYXRoID0gaW1hZ2UuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEz
QzNBMDEyMUU1Njc3QTAwREJBODZFIC8qIFN5c3RlbVByZXZpZXdCbG9iTmFtaW5nLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBTeXN0ZW1QcmV2aWV3QmxvYk5hbWluZy5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTUxMTgwRjFEQjFBREQ1MDAxNzYzMDQgLyog
RXh0ZW5kZWRDb2xvclRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV4dGVuZGVkQ29sb3JUZXN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxQjc2RTQyMjMyOThFMkIwMDdGRUQyQyAvKiBTeXN0ZW1QcmV2aWV3Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtUHJldmlldy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFCNzZFNDQyMzI5OUJBMzAwN0ZFRDJDIC8qIHN5c3RlbS1w
cmV2aWV3LXRyaWdnZXIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJzeXN0ZW0tcHJldmlldy10cmlnZ2VyLmh0
bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUU5QkRBMDI0N0Y0QzYyMDAyRTUx
QTIgLyogV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzU4Miw3ICszNTgwLDYgQEAKIAkJCQkyNkY2RTFFRjFBREM3NDlCMDBE
RTY5NkIgLyogREZBTWluaW1pemVyLmNwcCAqLywKIAkJCQlGNDA5NENDNjI1NTQ1QkQ1MDAzRDcz
RTMgLyogRGlzcGxheUxpc3RUZXN0cy5jcHAgKi8sCiAJCQkJOTM5MTVBMTYyNERCNjZDNzAwMTlG
RjQzIC8qIERvY3VtZW50T3JkZXIuY3BwICovLAotCQkJCTMxNTExODBGMURCMUFERDUwMDE3NjMw
NCAvKiBFeHRlbmRlZENvbG9yVGVzdHMuY3BwICovLAogCQkJCTU3OTY1MUU2MjE2QkZENTMwMDZF
QkZFNSAvKiBGaWRvSGlkTWVzc2FnZVRlc3QuY3BwICovLAogCQkJCTU3MkI0MDM1MjE3NkEwMjkw
MDBBRDQzRSAvKiBGaWRvVGVzdERhdGEuaCAqLywKIAkJCQk3QTMyRDc0OTFGMDIxNTE1MDAxNjJD
NDQgLyogRmlsZU1vbml0b3IuY3BwICovLApAQCAtNTI4Niw3ICs1MjgzLDYgQEAKIAkJCQk1Qzc5
NjQxMDFFQjAyNzhEMDA3NUQ3NEMgLyogRXZlbnRNb2RpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0RBMjlCMjkyMEZEMkE5OTAwRjE1Q0VEIC8qIEV4aXRGdWxsc2NyZWVuT25FbnRlclBp
UC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFEMTJCRUMwMjQ1QkVGODUwMDRDMEI3QSAvKiBFeGl0
UGlQT25TdXNwZW5kVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMzE1MTE4MTAx
REIxQUU0MDAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JUZXN0cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0VGMTFBNDExQUU2MDA0NDdDNEMgLyogRmFpbGVkTG9hZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1Nzk2NTFFNzIxNkJGREVEMDA2RUJGRTUgLyogRmlkb0hpZE1lc3NhZ2VUZXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMzJENzRBMUYwMjE1MTUwMDE2MkM0NCAvKiBGaWxl
TW9uaXRvci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI3MzYzMykKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw5ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAj
aW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yQ29udmVyc2lvbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db2xvclR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTE2NiwyMyArMTY5LDE4IEBAIFRFU1QoQ29sb3IsIFZh
bGlkaXR5KQogewogICAgIENvbG9yIGludmFsaWRDb2xvcjsKICAgICBFWFBFQ1RfRkFMU0UoaW52
YWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGludmFsaWRDb2xvci5pc0V4
dGVuZGVkKCkpOwogCiAgICAgQ29sb3Igb3RoZXJJbnZhbGlkQ29sb3IgPSBpbnZhbGlkQ29sb3I7
CiAgICAgRVhQRUNUX0ZBTFNFKG90aGVySW52YWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKG90aGVySW52YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciB2
YWxpZENvbG9yID0gQ29sb3I6OnJlZDsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFs
aWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAogICAg
IENvbG9yIG90aGVyVmFsaWRDb2xvciA9IHZhbGlkQ29sb3I7CiAgICAgRVhQRUNUX1RSVUUob3Ro
ZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRDb2xv
ci5pc0V4dGVuZGVkKCkpOwogCiAgICAgdmFsaWRDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsgMSwg
MiwgMywgNCB9OwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBF
WFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogICAgIGF1dG8gdmFsaWRDb2xv
ckNvbXBvbmVudHMgPSB2YWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgIEVY
UEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUSh2YWxp
ZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CkBAIC0xOTEsNyArMTg5LDYgQEAgVEVTVChDb2xv
ciwgVmFsaWRpdHkpCiAKICAgICBDb2xvciB5ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZh
bGlkQ29sb3IpKTsKICAgICBFWFBFQ1RfVFJVRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlk
KCkpOwotICAgIEVYUEVDVF9GQUxTRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkp
OwogICAgIGF1dG8geWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0geWV0QW5vdGhlclZh
bGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgRVhQRUNUX0VRKHlldEFub3Ro
ZXJWYWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVy
VmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwpAQCAtMjAwLDcgKzE5Nyw2IEBAIFRFU1Qo
Q29sb3IsIFZhbGlkaXR5KQogCiAgICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90
aGVyVmFsaWRDb2xvcik7CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQo
KSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogICAg
IGF1dG8gb3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JB
TG9zc3k8dWludDhfdD4oKTsKICAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50
cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVu
LCAyKTsKQEAgLTIzMyw0ICsyMjksMTk0IEBAIFRFU1QoQ29sb3IsIEx1bWluYW5jZSkKICAgICBF
WFBFQ1RfRVEoY0RhcmtlbmVkLmJsdWUsIDc2KTsKIH0KIAorVEVTVChDb2xvciwgQ29uc3RydWN0
b3IpCit7CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUs
IDEuMCB9IH07CisKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMxLmNvbG9y
U3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9u
ZW50czsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOworICAgIEVYUEVDVF9GTE9BVF9F
USgwLjUsIGcpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMS4wLCBhbHBoYSk7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzEp
LCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOworfQorCitURVNUKENvbG9yLCBDb3B5
Q29uc3RydWN0b3IpCit7CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAw
LjUsIDAuMjUsIDEuMCB9IH07CisgICAgQ29sb3IgYzIoYzEpOworCisgICAgYXV0byBbY29sb3JT
cGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MS4wLCByKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMC4yNSwgYik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOworICAgIEVYUEVD
VF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4y
NSkiKTsKK30KKworVEVTVChDb2xvciwgQXNzaWdubWVudCkKK3sKKyAgICBDb2xvciBjMSB7IERp
c3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICBDb2xvciBjMiA9
IGMxOworCisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNl
QW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7
CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41
LCBnKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEuMCwgYWxwaGEpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNv
bG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKK30KKworVEVTVChDb2xvciwgRXF1YWxpdHkp
Cit7CisgICAgeworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKKyAgICAgICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsg
MS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgICAgIEVYUEVDVF9FUShjMSwgYzIpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAw
LjUsIDAuMjUsIDEuMCB9IH07CisgICAgICAgIENvbG9yIGMyIHsgU1JHQkE8ZmxvYXQ+IHsgMS4w
LCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgICAgIEVYUEVDVF9ORShjMSwgYzIpOworICAgIH0K
KworICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2
MywgMTI3IH07CisgICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNv
bXBvbmVudEJ5dGVzKSB9OworICAgIENvbG9yIHJnYjIgeyBjb21wb25lbnRCeXRlcyB9OworICAg
IEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKKyAgICBFWFBFQ1RfTkUocmdiMiwgcmdiMSk7Cit9CisK
K1RFU1QoQ29sb3IsIEhhc2gpCit7CisgICAgeworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQ
MzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAgICAgQ29sb3IgYzIgeyBE
aXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgICAgIEVYUEVD
VF9FUShjMS5oYXNoKCksIGMyLmhhc2goKSk7CisgICAgfQorCisgICAgeworICAgICAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAg
ICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAg
ICAgICAgRVhQRUNUX05FKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKKyAgICB9CisKKyAgICBhdXRv
IGNvbXBvbmVudEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9Owor
ICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRl
cykgfTsKKyAgICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKKyAgICBFWFBFQ1RfTkUo
cmdiMS5oYXNoKCksIHJnYjIuaGFzaCgpKTsKK30KKworVEVTVChDb2xvciwgTW92ZUNvbnN0cnVj
dG9yKQoreworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1
LCAxLjAgfSB9OworICAgIENvbG9yIGMyKFdURk1vdmUoYzEpKTsKKworICAgIC8vIFdlIHNob3Vs
ZCBoYXZlIG1vdmVkIHRoZSBvdXQgb2YgbGluZSBjb2xvciBwb2ludGVyIGludG8gYzIsCisgICAg
Ly8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRoYXQgaXQgZG9lc24ndCBjYXVzZSBkZWxldGlv
bi4KKyAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKKworICAgIGF1dG8gW2NvbG9yU3Bh
Y2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBFWFBF
Q1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKworICAgIGF1dG8gW3Is
IGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBy
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4y
NSwgYik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOworICAgIEVYUEVDVF9FUShz
ZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsK
K30KKworVEVTVChDb2xvciwgTW92ZUFzc2lnbm1lbnQpCit7CisgICAgQ29sb3IgYzEgeyBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgQ29sb3IgYzIgPSBX
VEZNb3ZlKGMxKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG1vdmVkIHRoZSBvdXQgb2YgbGlu
ZSBjb2xvciBwb2ludGVyIGludG8gYzIsCisgICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNv
IHRoYXQgaXQgZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KKyAgICBFWFBFQ1RfRkFMU0UoYzEuaXNW
YWxpZCgpKTsKKworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JT
cGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKTsKKworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7
CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41
LCBnKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDEuMCwgYWxwaGEpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNv
bG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKK30KKworQ29sb3IgbWFrZUNvbG9yKCkKK3sK
KyAgICByZXR1cm4gQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEu
MCB9IH07Cit9CisKK1RFU1QoQ29sb3IsIFJldHVyblZhbHVlcykKK3sKKyAgICBDb2xvciBjMiA9
IG1ha2VDb2xvcigpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNv
bG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKK30KKworVEVTVChDb2xvciwgUDNDb252ZXJz
aW9uVG9TUkdCKQoreworICAgIENvbG9yIHAzQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4w
LCAwLjUsIDAuMjUsIDAuNzUgfSB9OworICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOworICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJlZCwg
MS4wZik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNDYyNTMyODJm
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTEyNzQ4Zik7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYWxwaGEsIDAuNzVmKTsKK30KKworVEVTVChD
b2xvciwgTGluZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCit7CisgICAgQ29sb3IgbGluZWFyU1JH
QkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsK
KyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOworICAgIEVY
UEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpOworICAgIEVYUEVD
VF9GTE9BVF9FUShzUkdCQUNvbG9yLmJsdWUsIDAuNTM3MDk4NzA2Zik7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKHNSR0JBQ29sb3IuYWxwaGEsIDAuNzVmKTsKK30KKworVEVTVChDb2xvciwgQ29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkpCit7CisgICAgQ29sb3IgY29sb3IgeyBTUkdCQTxmbG9hdD4g
eyAwLiwgMC4sIDEuLCAwLjYgfSB9OworCisgICAgeworICAgICAgICBDb2xvciBjb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDEuKTsK
KyAgICAgICAgRVhQRUNUX0VRKGNvbG9yLCBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9
IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDAuNSk7CisgICAgICAgIGF1dG8gW2Nv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JT
cGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbG9yU3BhY2UsIENvbG9y
U3BhY2U6OlNSR0IpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7Cisg
ICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShn
LCAwLik7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShiLCAxLik7CisgICAgICAgIEVYUEVDVF9G
TE9BVF9FUShhLCAwLjMpOworICAgIH0KKworICAgIHsKKyAgICAgICAgQ29sb3IgY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgwLik7
CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICAgICAgRVhQRUNUX0VR
KGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6OlNSR0IpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGNvbXBvbmVudHM7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7CisgICAgICAg
IEVYUEVDVF9GTE9BVF9FUShnLCAwLik7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShiLCAxLik7
CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShhLCAwLik7CisgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvRGlzcGxheUxpc3RUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMuY3BwCShyZXZpc2lvbiAyNzM2MzMpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRGlzcGxheUxpc3RUZXN0cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMs
IEFwcGVuZEl0ZW1zKQogICAgICAgICBFWFBFQ1RfVFJVRShoYW5kbGUtPmlzPEZpbGxSZWN0V2l0
aENvbG9yPigpKTsKIAogICAgICAgICBhdXRvJiBpdGVtID0gaGFuZGxlLT5nZXQ8RmlsbFJlY3RX
aXRoQ29sb3I+KCk7Ci0gICAgICAgIEVYUEVDVF9FUShpdGVtLmNvbG9yKCkuYXNJbmxpbmUoKSwg
Q29sb3I6OmJsYWNrKTsKKyAgICAgICAgRVhQRUNUX0VRKCppdGVtLmNvbG9yKCkudHJ5R2V0QXNT
UkdCQUJ5dGVzKCksIENvbG9yOjpibGFjayk7CiAgICAgICAgIEVYUEVDVF9FUShpdGVtLnJlY3Qo
KSwgRmxvYXRSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgfQogCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3Rz
LmNwcAkocmV2aXNpb24gMjczNjMzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRlc3QuaCIK
LSNpbmNsdWRlICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9y
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNlcmlhbGl6YXRpb24uaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgewotCi1URVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQotewot
ICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9
OwotICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICBhdXRvIFtyLCBnLCBi
LCBhbHBoYV0gPSBjMS5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwotCi0gICAgRVhQRUNUX0ZM
T0FUX0VRKDEuMCwgcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDAuMjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKLSAg
ICBFWFBFQ1RfRVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1Rf
RVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMSksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUp
Iik7Ci19Ci0KLVRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQotewotICAgIENv
bG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAg
IEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICBDb2xvciBjMihjMSk7Ci0KLSAg
ICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjMi5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwot
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwg
Zyk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgx
LjAsIGFscGhhKTsKLSAgICBFWFBFQ1RfRVEoMnUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgp
KTsKLSAgICBFWFBFQ1RfRVEoMnUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBF
WFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41
IDAuMjUpIik7Ci19Ci0KLVRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKLXsKLSAgICBD
b2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAg
ICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgQ29sb3IgYzIgPSBjMTsKLQot
ICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGMyLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7
Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41
LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDEuMCwgYWxwaGEpOwotICAgIEVYUEVDVF9FUSgydSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50
KCkpOwotICAgIEVYUEVDVF9FUSgydSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAg
IEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAw
LjUgMC4yNSkiKTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKLXsKLSAgICB7
Ci0gICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAx
LjAgfSB9OwotICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgICAg
IENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9Owot
ICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgICAgIEVYUEVDVF9F
UShjMSwgYzIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8
ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKGMx
LmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICAgICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAs
IDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgp
KTsKLQotICAgICAgICBFWFBFQ1RfTkUoYzEsIGMyKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBv
bmVudEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OwotICAgIENv
bG9yIHJnYjEgeyBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykgfTsK
LSAgICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKLSAgICBFWFBFQ1RfTkUocmdiMSwg
cmdiMik7Ci0gICAgRVhQRUNUX05FKHJnYjIsIHJnYjEpOwotfQotCi1URVNUKEV4dGVuZGVkQ29s
b3IsIEhhc2gpCi17Ci0gICAgewotICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4g
eyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRl
bmRlZCgpKTsKLQotICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsK
LQotICAgICAgICBFWFBFQ1RfRVEoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwotICAgIH0KLQotICAg
IHsKLSAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUs
IDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICAg
ICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAgICAgICBFWFBFQ1RfTkUo
YzEuaGFzaCgpLCBjMi5oYXNoKCkpOwotICAgIH0KLQotICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMg
PSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07Ci0gICAgQ29sb3IgcmdiMSB7
IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9OwotICAgIENvbG9y
IHJnYjIgeyBjb21wb25lbnRCeXRlcyB9OwotICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdi
Mi5oYXNoKCkpOwotfQotCi1URVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKLXsK
LSAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0g
fTsKLSAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgQ29sb3IgYzIoV1RG
TW92ZShjMSkpOwotICAgIC8vIFdlIHNob3VsZCBoYXZlIG1vdmVkIHRoZSBleHRlbmRlZCBjb2xv
ciBwb2ludGVyIGludG8gYzIsCi0gICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRoYXQg
aXQgZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KLSAgICBFWFBFQ1RfRkFMU0UoYzEuaXNFeHRlbmRl
ZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKLQotICAgIGF1dG8gW3IsIGcs
IGIsIGFscGhhXSA9IGMyLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7Ci0KLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoMS4wLCByKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMC4yNSwgYik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwot
ICAgIEVYUEVDVF9FUSgxdSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVD
VF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4y
NSkiKTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkKLXsKLSAgICBD
b2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAg
ICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgQ29sb3IgYzIgPSBXVEZNb3Zl
KGMxKTsKLQotICAgIC8vIFdlIHNob3VsZCBoYXZlIG1vdmVkIHRoZSBleHRlbmRlZCBjb2xvciBw
b2ludGVyIGludG8gYzIsCi0gICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRoYXQgaXQg
ZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KLSAgICBFWFBFQ1RfRkFMU0UoYzEuaXNFeHRlbmRlZCgp
KTsKLSAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKLQotICAgIGF1dG8gW3IsIGcsIGIs
IGFscGhhXSA9IGMyLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7Ci0KLSAgICBFWFBFQ1RfRkxP
QVRfRVEoMS4wLCByKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoMC4yNSwgYik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwotICAg
IEVYUEVDVF9FUSgxdSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9F
UShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSki
KTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aW5nKQotewot
ICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwg
MC4yNSwgMS4wIH0gfTsKLSAgICAKLSAgICBFWFBFQ1RfVFJVRShjMS0+aXNFeHRlbmRlZCgpKTsK
LQotICAgIENvbG9yKiBjMiA9IG5ldyBDb2xvcigqYzEpOwotICAgIENvbG9yKiBjMyA9IG5ldyBD
b2xvcigqYzIpOwotCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gYzItPmFzRXh0ZW5kZWQo
KS5jb21wb25lbnRzKCk7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwotICAgIEVYUEVDVF9FUSgzdSwgYzItPmFzRXh0
ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUygq
YzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotCi0gICAgZGVsZXRlIGMxOwot
ICAgIEVYUEVDVF9FUSgydSwgYzItPmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLQotICAgIGRl
bGV0ZSBjMjsKLSAgICBFWFBFQ1RfRVEoMXUsIGMzLT5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7
Ci0KLSAgICBkZWxldGUgYzM7Ci19Ci0KLUNvbG9yIG1ha2VDb2xvcigpCi17Ci0gICAgQ29sb3Ig
YzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgRVhQ
RUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLSAgICBFWFBFQ1RfRVEoMXUsIGMxLmFzRXh0ZW5k
ZWQoKS5yZWZDb3VudCgpKTsKLQotICAgIHJldHVybiBjMTsKLX0KLQotVEVTVChFeHRlbmRlZENv
bG9yLCBSZXR1cm5WYWx1ZXMpCi17Ci0gICAgQ29sb3IgYzIgPSBtYWtlQ29sb3IoKTsKLSAgICBF
WFBFQ1RfVFJVRShjMi5pc0V4dGVuZGVkKCkpOwotCi0gICAgRVhQRUNUX0VRKDF1LCBjMi5hc0V4
dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1Mo
YzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotfQotCi1URVNUKEV4dGVuZGVk
Q29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKLXsKLSAgICBDb2xvciBwM0NvbG9yIHsgRGlzcGxh
eVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKLSAgICBFWFBFQ1RfVFJVRShw
M0NvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRv
U1JHQkFMb3NzeTxmbG9hdD4oKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQs
IDEuMGYpOwotICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzMjgy
Zik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC4xNDkxMjc0OGYpOwot
ICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmFscGhhLCAwLjc1Zik7Ci19Ci0KLVRFU1Qo
RXh0ZW5kZWRDb2xvciwgTGluZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCi17Ci0gICAgQ29sb3Ig
bGluZWFyU1JHQkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAw
Ljc1IH0gfTsKLSAgICBFWFBFQ1RfVFJVRShsaW5lYXJTUkdCQUNvbG9yLmlzRXh0ZW5kZWQoKSk7
Ci0KLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOwotICAg
IEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpOwotICAgIEVY
UEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmJsdWUsIDAuNTM3MDk4NzA2Zik7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKHNSR0JBQ29sb3IuYWxwaGEsIDAuNzVmKTsKLX0KLQotVEVTVChFeHRlbmRlZENv
bG9yLCBDb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSkKLXsKLSAgICBDb2xvciBjb2xvciB7IFNS
R0JBPGZsb2F0PiB7IDAuLCAwLiwgMS4sIDAuNiB9IH07Ci0gICAgRVhQRUNUX1RSVUUoY29sb3Iu
aXNFeHRlbmRlZCgpKTsKLQotICAgIHsKLSAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgxLik7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmlzRXh0ZW5kZWQoKSk7Ci0g
ICAgICAgIEVYUEVDVF9FUShjb2xvciwgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkpOwotICAg
IH0KLQotICAgIHsKLSAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgPSBj
b2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgwLjUpOwotICAgICAgICBFWFBFQ1RfVFJV
RShjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5pc0V4dGVuZGVkKCkpOwotICAgICAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmFzRXh0ZW5kZWQoKS5j
b21wb25lbnRzKCk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7Ci0gICAgICAgIEVY
UEVDVF9GTE9BVF9FUShnLCAwLik7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShiLCAxLik7Ci0g
ICAgICAgIEVYUEVDVF9GTE9BVF9FUShhLCAwLjMpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAg
Q29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11
bHRpcGxpZWRCeSgwLik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5LmlzRXh0ZW5kZWQoKSk7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKLSAgICAgICAg
RVhQRUNUX0ZMT0FUX0VRKHIsIDAuKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGcsIDAuKTsK
LSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGIsIDEuKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VR
KGEsIDAuKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKClByb3Bl
cnR5IGNoYW5nZXMgb246IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRl
ZENvbG9yVGVzdHMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSAr
MCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpEZWxldGVkOiBz
dm46a2V5d29yZHMKIyMgLTEgKzAsMCAjIwotRGF0ZSBBdXRob3IgSWQgUmV2aXNpb24gSGVhZFVS
TApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421901</attachid>
            <date>2021-03-01 20:31:38 -0800</date>
            <delta_ts>2021-03-02 11:20:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222584-20210301203137.patch</filename>
            <type>text/plain</type>
            <size>65057</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MzcyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIxLTAzLTAxICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2UgdGhlIHNpemUgb2YgZXh0
ZW5kZWQgY29sb3JzIGJ5IHN0b3JpbmcgdGhlIGNvbG9yIHNwYWNlIGluIGZyZWUgYml0cyBvZiB0
aGUgb3duaW5nIENvbG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjI1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWR1Y2UgdGhlIHNpemUgb2Ygbm9uLVNSQkdBPHVpbnQ4X3Q+IGNvbG9ycyBieSBt
b3ZpbmcgdGhlIGNvbG9yIHNwYWNlIGZyb20gdGhlIHJlZiBjb3VudGVkCisgICAgICAgIG91dC1v
Zi1saW5lIGJpdCBpbnRvIHRoZSBmcmVlIGJpdHMgb2YgdGhlIENvbG9yIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIEFsc28sIHRha2UgdGhlIG9wZXJ0dW5pdHkgdG8gbW92ZSBhbmQgcmVuYW1l
IHRoZSBvdXQgb2YgbGluZSBiaXQgZnJvbSBpdCdzIG93biBmaWxlIG5hbWVkCisgICAgICAgIEV4
dGVuZGVkQ29sb3IgdG8gYSBwcml2YXRlIG5lc3RlZCB0eXBlIGNhbGxlZCBPdXRPZkxpbmVDb2xv
ci4KKworICAgICAgICBDb2xvciBub3cgZW5jb2RlcyB0aGUgZm9sbG93aW5nIGRhdGE6CisgICAg
ICAgICAgICB8IDggYml0cyAgfCAgIDggYml0cyAgIHwgICAgICAgICAgICAgNDggYml0cyAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgIEZsYWdzICB8IENvbG9yU3BhY2UgfCAgIElubGlu
ZUNvbG9yRGF0YU9yT3V0T2ZMaW5lUHRyICAgfAorCisgICAgICAgIENvbG9yU3BhY2UgYWN0dWFs
bHkgb25seSB1c2VzIDQgYml0cywgc28gaWYgd2UgbmVlZCBtb3JlIHJvb20gZm9yIGZsYWdzCisg
ICAgICAgIGluIHRoZSBmdXR1cmUsIHdlIGNvdWxkIHBhY2sgdGhpbmdzIGV2ZW4gbW9yZSB0aWdo
dGx5LgorCisgICAgICAgIEFkZGl0aW9uYWwsIHRhbGsgdGhlIG9wZXJ0dW5pdHkgdG8gcmVtb3Zl
IHRoZSBpc0lubGluZS9pc0V4dGVuZGVkIGFuZAorICAgICAgICBhc0lubGluZS9hc0V4dGVuZGVk
IGZ1bmN0aW9ucy4gVGhlIGZ1bmN0aW9uYWxpdHkgb2YgaXNJbmxpbmUvYXNJbmxpbmUKKyAgICAg
ICAgaXMgc3RpbGwgbmVlY2Vzc2FyeSBpbiBzb21lIHBsYWNlcywgYnV0IGNhbiBiZSByZXBsYWNl
ZCBieSBhIHNpbmdsZQorICAgICAgICB0cnlHZXRBc1NSR0JBQnl0ZXMgd2hpY2ggcmV0dXJucyBh
biBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gd2l0aCBhIAorICAgICAgICB2YWxpZCB2YWx1ZSB3
aGVuIHRoZSBzdG9yZWQgdmFsdWUgaXMgaW5saW5lLgorCisgICAgICAgIFNpbmNlIEV4dGVuZGVk
Q29sb3IgaXMgbm8gbG9uZ2VyIGFjY2Vzc2libGUsIGEgZmV3IHRlc3RzIHRoYXQgY2hlY2tlZCB0
aGluZ3MgbGlrZQorICAgICAgICB0aGUgcmVmIGNvdW50IG9mIHRoZSBFeHRlbmRlZENvbG9yIGhh
ZCB0byBiZSBjaGFuZ2VkLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OnNlbWFudGljQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3Bh
Y2VBbmRDb21wb25lbnRzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjppc09wYXF1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWaXNp
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUJ5dGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhhQXNGbG9hdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6T3V0T2ZMaW5lQ29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6T3V0T2ZMaW5lQ29sb3I6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpPdXRPZkxpbmVDb2xvcjo6Y29tcG9uZW50cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6T3V0T2ZMaW5lQ29sb3I6Ok91dE9mTGluZUNvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpzZXRPdXRPZkxpbmVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om91dE9mTGluZUNvbG9yc0VxdWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6Om91dE9mTGluZUNvbG9yc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omhhc2gg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjppc091dE9mTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6aXNJbmxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzT3V0
T2ZMaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc091dE9mTGluZVJlZiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dHJ5R2V0QXNTUkdCQUJ5dGVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGVkRmxhZ3MpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmVuY29kZWRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjplbmNvZGVkT3V0T2ZMaW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29k
ZWRGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlZENvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZWRPdXRPZkxpbmVDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6c2V0Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpzZXRFeHRlbmRlZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmV4dGVuZGVkQ29sb3JzRXF1YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6aXNFeHRlbmRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6YXNFeHRlbmRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6YXNFeHRlbmRlZFJlZiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6ZW5jb2RlZEV4dGVuZGVkQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRlY29kZWRFeHRlbmRlZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlZENH
Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUNHR3JhZGllbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElu
bGluZUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5s
aW5lRmlsbEdyYWRpZW50Ojppc0lubGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6bnNDb2xvcik6CisKIDIwMjEtMDMtMDEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIE1vdmUgc2ltcGxpZmllZCB2ZXJ0aWNhbCBhbGln
bm1lbnQgY29tcHV0YXRpb24gdG8gc3RydWN0IFNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudApJ
bmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNzM3MjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgxLDcgKzExODEsNiBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVm
cmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNo
TW9uaXRvck1hbmFnZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnNHTC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDI3MzcyMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTY4LDcgKzk2OCw2IEBACiAJCTMx
QzBGRjI1MEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFGMEU0Q0VCNkUw
MDdENkZFNSAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZGM0UwRTRD
RUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjNBMEU0Q0VGQUMwMDdENkZFNSAv
KiBKU1dlYktpdEFuaW1hdGlvbkV2ZW50LmggKi87IH07CiAJCTMxQzBGRjQwMEU0Q0VGQUMwMDdE
NkZFNSAvKiBKU1dlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGM0MwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2Vi
S2l0VHJhbnNpdGlvbkV2ZW50LmggKi87IH07Ci0JCTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAv
KiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMURDREY0MjFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMxREVBNDU2MUIz
OUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMURFQTQ1NDFCMzlGNEQ5MDBGNzcxNzgg
LyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5oICovOyB9OwogCQkzMUVBRjk3RTEyMTQzNUE0MDBF
N0MxQkYgLyogRGV2aWNlTW90aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUVBRjk3QzEyMTQzNUE0MDBFN0MxQkYgLyogRGV2aWNl
TW90aW9uQ2xpZW50SU9TLmggKi87IH07CiAJCTMxRUI1NERGMUU3REM3NDQwMEMxNjIzQiAvKiBS
VENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzFFQjU0REQxRTdEQzc0NDAwQzE2MjNCIC8qIFJUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uLmggKi87IH07CkBAIC03NTA0LDcgKzc1MDMsNiBAQAogCQkzMUQyNkJD
NDFGODZEMjY2MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1hcE9wdGlvbnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbWFnZUJpdG1hcE9wdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUQyNkJDNTFGODZEMjY4MDA4RkYyNTUgLyogSlNJ
bWFnZUJpdG1hcE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJ
bWFnZUJpdG1hcE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFEMjZC
QzYxRjg2RDI2OTAwOEZGMjU1IC8qIEpTSW1hZ2VCaXRtYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbWFnZUJpdG1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTMxRENERjQyMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuZGVkQ29sb3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFERUE0NTMxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5
c3RlbUJhY2tkcm9wTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMURFQTQ1NDFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTeXN0ZW1CYWNrZHJvcExheWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRUFGOTdDMTIxNDM1QTQwMEU3QzFC
RiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGV2aWNlTW90aW9uQ2xpZW50SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNjY4NSw3ICsyNjY4Myw2IEBACiAJCQkJMkQyOUVDQzIxOTJFQ0M4MzAwOTg0Qjc4IC8q
IERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oICovLAogCQkJCTJEMjlFQ0MzMTkyRUNDODMw
MDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmNwcCAqLywKIAkJCQkyRDI5
RUNDNDE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oICov
LAotCQkJCTMxRENERjQyMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi8sCiAJ
CQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTC5oICovLAogCQkJCUIy
NzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCAqLywKIAkJCQlCMjc1MzUz
QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICovLApAQCAtMzIxNzksNyArMzIxNzYs
NiBAQAogCQkJCTJEMjkzODZCMjM1RjZCNjkwMEM3RjNCMiAvKiBFeGNlcHRpb25EZXRhaWxzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0QxOTYzMTFENkNBQjc2MDBGQzdFNDcgLyogRXhjZXB0aW9u
T3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzN0ZCMzQ1MUY5RUEwNkQwMEQwRkMzMSAvKiBFeHRl
bmRhYmxlTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkzMURDREY0NDFEQTFDNDU0
MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTkx
MjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU3
MkY1NTAyMjlEQ0QxNzAwQjNFMTUxIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkocmV2aXNpb24gMjczNzIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBkYXJrZW5lZFdoaXRlID0gU1IKIENvbG9yOjpDb2xvcihjb25zdCBD
b2xvciYgb3RoZXIpCiAgICAgOiBtX2NvbG9yQW5kRmxhZ3Mob3RoZXIubV9jb2xvckFuZEZsYWdz
KQogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIGFzRXh0ZW5kZWQoKS5yZWYoKTsK
KyAgICBpZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgYXNPdXRPZkxpbmUoKS5yZWYoKTsKIH0K
IAogQ29sb3I6OkNvbG9yKENvbG9yJiYgb3RoZXIpCkBAIC01MywxMyArNTMsMTMgQEAgQ29sb3Im
IENvbG9yOjpvcGVyYXRvcj0oY29uc3QgQ29sb3ImIG90aAogICAgIGlmICgqdGhpcyA9PSBvdGhl
cikKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAg
ICAgYXNFeHRlbmRlZCgpLmRlcmVmKCk7CisgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCisgICAgICAg
IGFzT3V0T2ZMaW5lKCkuZGVyZWYoKTsKIAogICAgIG1fY29sb3JBbmRGbGFncyA9IG90aGVyLm1f
Y29sb3JBbmRGbGFnczsKIAotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIGFzRXh0ZW5k
ZWQoKS5yZWYoKTsKKyAgICBpZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgYXNPdXRPZkxpbmUo
KS5yZWYoKTsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTY5LDggKzY5LDggQEAgQ29sb3Im
IENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKICAgICBpZiAoKnRoaXMgPT0gb3RoZXIp
CiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAg
IGFzRXh0ZW5kZWQoKS5kZXJlZigpOworICAgIGlmIChpc091dE9mTGluZSgpKQorICAgICAgICBh
c091dE9mTGluZSgpLmRlcmVmKCk7CiAKICAgICBtX2NvbG9yQW5kRmxhZ3MgPSBvdGhlci5tX2Nv
bG9yQW5kRmxhZ3M7CiAgICAgb3RoZXIubV9jb2xvckFuZEZsYWdzID0gaW52YWxpZENvbG9yQW5k
RmxhZ3M7CkBAIC0xNjYsMTUgKzE2NiwxNSBAQCBDb2xvciBDb2xvcjo6c2VtYW50aWNDb2xvcigp
IGNvbnN0CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
IAotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiB7IGFzRXh0ZW5kZWRSZWYo
KSwgRmxhZ3M6OlNlbWFudGljIH07CisgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCisgICAgICAgIHJl
dHVybiB7IGFzT3V0T2ZMaW5lUmVmKCksIGNvbG9yU3BhY2UoKSwgRmxhZ3M6OlNlbWFudGljIH07
CiAgICAgcmV0dXJuIHsgYXNJbmxpbmUoKSwgRmxhZ3M6OlNlbWFudGljIH07CiB9CiAKIHN0ZDo6
cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBDb2xvcjo6Y29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKSBjb25zdAogewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAg
IHJldHVybiB7IGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCksIGFzRXh0ZW5kZWQoKS5jb21wb25l
bnRzKCkgfTsKKyAgICBpZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHsgY29sb3JT
cGFjZSgpLCBhc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSB9OwogICAgIHJldHVybiB7IENvbG9y
U3BhY2U6OlNSR0IsIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+
KGFzSW5saW5lKCkpKSB9OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgJKHJldmlzaW9uIDI3MzcyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsyNSwxNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkNv
bG9yU3BhY2UuaCIKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkV4dGVu
ZGVkQ29sb3IuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogI2lmIFVTRShDRykKQEAgLTcxLDggKzc0LDYg
QEAgcHVibGljOgogCiAgICAgQ29sb3IoU1JHQkE8dWludDhfdD4sIE9wdGlvblNldDxGbGFncz4g
PSB7IH0pOwogICAgIENvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiwgT3B0aW9uU2V0PEZs
YWdzPiA9IHsgfSk7Ci0KLSAgICBDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNw
YWNlLCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29t
cG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0Pj4qID0gbnVsbHB0cj4KICAgICBDb2xvcihjb25z
dCBDb2xvclR5cGUmLCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKQEAgLTk4LDEwICs5OSwxMiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1NlbWFudGljKCkgY29uc3Q7CiAgICAgYm9vbCB1c2VzQ29s
b3JGdW5jdGlvblNlcmlhbGl6YXRpb24oKSBjb25zdDsKIAotICAgIGJvb2wgaXNPcGFxdWUoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA9PSAxLjAg
OiBhc0lubGluZSgpLmFscGhhID09IDI1NTsgfQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiBhc0lu
bGluZSgpLmFscGhhID4gMDsgfQotICAgIHVpbnQ4X3QgYWxwaGFCeXRlKCkgY29uc3QgeyByZXR1
cm4gaXNFeHRlbmRlZCgpID8gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90Pihhc0V4dGVuZGVk
KCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zsb2F0
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiBj
b252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+KGFzSW5saW5lKCkuYWxwaGEpOyB9CisgICAgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKCkgY29uc3Q7CisKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyBy
ZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSA9PSAxLjAgOiBhc0lu
bGluZSgpLmFscGhhID09IDI1NTsgfQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1
cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5l
KCkuYWxwaGEgPiAwOyB9CisgICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBp
c091dE9mTGluZSgpID8gY29udmVydEZsb2F0QWxwaGFUbzx1aW50OF90Pihhc091dE9mTGluZSgp
LmFscGhhKCkpIDogYXNJbmxpbmUoKS5hbHBoYTsgfQorICAgIGZsb2F0IGFscGhhQXNGbG9hdCgp
IGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBhc091dE9mTGluZSgpLmFscGhhKCkgOiBj
b252ZXJ0Qnl0ZUFscGhhVG88ZmxvYXQ+KGFzSW5saW5lKCkuYWxwaGEpOyB9CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBmbG9hdCBsdW1pbmFuY2UoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBm
bG9hdCBsaWdodG5lc3MoKSBjb25zdDsgLy8gRklYTUU6IFJlcGxhY2UgcmVtYWluaW5nIHVzZXMg
d2l0aCBsdW1pbmFuY2UuCkBAIC0xMzYsMTQgKzEzOSwxNyBAQCBwdWJsaWM6CiAKICAgICBDb2xv
ciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSB1bmRlcmx5aW5n
IGNvbG9yIGlmIHRoZSBjb2xvciBzcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFsdWUKKyAgICAvLyBp
cyByZXByZXNlbnRhYmxlIGFzIFNSR0JBPHVpbnQ4X3Q+LgorICAgIE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiB0cnlHZXRBc1NSR0JBQnl0ZXMoKSBjb25zdDsKKwogI2lmIFBMQVRGT1JNKEdUSykK
ICAgICBDb2xvcihjb25zdCBHZGtSR0JBJik7CiAgICAgb3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0
OwogI2VuZGlmCiAKICNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xv
clJlZik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgT3B0aW9uU2V0PEZs
YWdzPik7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ0dDb2xvclJlZiwgT3B0aW9uU2V0PEZs
YWdzPiA9IHsgfSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKQEAgLTE2Nyw0NCArMTcz
LDYxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gZGFya0dyZWVuID0gU1JH
QkE8dWludDhfdD4geyAwLCAxMjgsIDAgfTsKICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gb3Jh
bmdlID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgMCB9OwogCi0gICAgYm9vbCBpc0V4dGVu
ZGVkKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0lubGluZSgpIGNvbnN0OwotCi0gICAgY29uc3QgRXh0
ZW5kZWRDb2xvciYgYXNFeHRlbmRlZCgpIGNvbnN0OwotICAgIFNSR0JBPHVpbnQ4X3Q+IGFzSW5s
aW5lKCkgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJik7
CisgICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJik7CiAKLSAgICAvLyBF
eHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwu
CisgICAgLy8gT3V0IG9mIGxpbmUgYW5kIGlubGluZSBjb2xvcnMgd2lsbCBhbHdheXMgYmUgbm9u
LWVxdWFsLgogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0
IENvbG9yJiBiKTsKICAgICBmcmllbmQgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihj
b25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwotICAgIGZyaWVuZCBib29sIGV4dGVuZGVk
Q29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwotICAgIGZyaWVuZCBib29s
IGV4dGVuZGVkQ29sb3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOwotCi0gICAgc3RhdGljIGJvb2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9y
Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgZnJp
ZW5kIGJvb2wgb3V0T2ZMaW5lQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYp
OworICAgIGZyaWVuZCBib29sIG91dE9mTGluZUNvbG9yc0VxdWFsSWdub3JpbmdTZW1hbnRpY0Nv
bG9yKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZh
dGU6Ci0gICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYsIE9wdGlvblNldDxGbGFncz4gPSB7
IH0pOworICAgIGNsYXNzIE91dE9mTGluZUNvbG9yIDogcHVibGljIFJlZkNvdW50ZWQ8T3V0T2ZM
aW5lQ29sb3I+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWY8T3V0T2ZMaW5lQ29s
b3I+IGNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE91dE9mTGluZUNvbG9yKGNvbXBvbmVu
dHMpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4g
bV9jb21wb25lbnRzWzNdOyB9CisgICAgICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9u
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50czsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgT3V0T2ZMaW5lQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzKQor
ICAgICAgICAgICAgOiBtX2NvbXBvbmVudHMoY29tcG9uZW50cykKKyAgICAgICAgeworICAgICAg
ICB9CiAKLSAgICBlbnVtIGNsYXNzIEZsYWdzSW5jbHVkaW5nUHJpdmF0ZSA6IHVpbnQxNl90IHsK
LSAgICAgICAgU2VtYW50aWMgICAgICAgICAgICAgICAgICAgICAgICA9IHN0YXRpY19jYXN0PHVp
bnQxNl90PihGbGFnczo6U2VtYW50aWMpLAotICAgICAgICBVc2VDb2xvckZ1bmN0aW9uU2VyaWFs
aXphdGlvbiAgID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KEZsYWdzOjpVc2VDb2xvckZ1bmN0aW9u
U2VyaWFsaXphdGlvbiksCisgICAgICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbV9jb21wb25l
bnRzOworICAgIH07CisgICAgQ29sb3IoUmVmPE91dE9mTGluZUNvbG9yPiYmLCBDb2xvclNwYWNl
LCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKKworICAgIGVudW0gY2xhc3MgRmxhZ3NJbmNsdWRp
bmdQcml2YXRlIDogdWludDhfdCB7CisgICAgICAgIFNlbWFudGljICAgICAgICAgICAgICAgICAg
ICAgICAgPSBzdGF0aWNfY2FzdDx1aW50OF90PihGbGFnczo6U2VtYW50aWMpLAorICAgICAgICBV
c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbiAgID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oRmxh
Z3M6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKSwKICAgICAgICAgVmFsaWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwKLSAgICAgICAgRXh0ZW5kZWQgICAgICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAgT3V0T2ZMaW5lICAgICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMywKICAgICAgICAgSGFzaFRhYmxlRW1wdHlWYWx1ZSAgICAgICAgICAg
ICA9IDEgPDwgNCwKICAgICAgICAgSGFzaFRhYmxlRGVsZXRlZFZhbHVlICAgICAgICAgICA9IDEg
PDwgNSwKICAgICB9OwogICAgIHN0YXRpYyBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRl
PiB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKSB7IHJldHVy
biBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPjo6ZnJvbVJhdyhmbGFncy50b1Jhdygp
KTsgfQogCiAgICAgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gZmxhZ3MoKSBjb25z
dDsKKyAgICBib29sIGlzT3V0T2ZMaW5lKCkgY29uc3Q7CisgICAgYm9vbCBpc0lubGluZSgpIGNv
bnN0OwogCiAgICAgdm9pZCBzZXRDb2xvcihTUkdCQTx1aW50OF90PiwgT3B0aW9uU2V0PEZsYWdz
SW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0pOwotICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8
RXh0ZW5kZWRDb2xvcj4mJiwgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0p
OworICAgIHZvaWQgc2V0T3V0T2ZMaW5lQ29sb3IoUmVmPE91dE9mTGluZUNvbG9yPiYmLCBDb2xv
clNwYWNlLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiA9IHsgfSk7CiAKKyAgICBT
UkdCQTx1aW50OF90PiBhc0lubGluZSgpIGNvbnN0OwogICAgIFBhY2tlZENvbG9yOjpSR0JBIGFz
UGFja2VkSW5saW5lKCkgY29uc3Q7Ci0gICAgUmVmPEV4dGVuZGVkQ29sb3I+IGFzRXh0ZW5kZWRS
ZWYoKSBjb25zdDsKKworICAgIGNvbnN0IE91dE9mTGluZUNvbG9yJiBhc091dE9mTGluZSgpIGNv
bnN0OworICAgIFJlZjxPdXRPZkxpbmVDb2xvcj4gYXNPdXRPZkxpbmVSZWYoKSBjb25zdDsKIAog
I2lmIENQVShBRERSRVNTNjQpCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1i
ZXJPZkJpdHNJblBvaW50ZXIgPSA0ODsKQEAgLTIxMiwxNiArMjM1LDIzIEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJPZkJpdHNJblBvaW50ZXIgPSAz
MjsKICNlbmRpZgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgY29sb3JWYWx1ZU1hc2sg
PSAoMVVMTCA8PCBtYXhOdW1iZXJPZkJpdHNJblBvaW50ZXIpIC0gMTsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQ2NF90IGZsYWdzU2l6ZSA9IHNpemVvZihGbGFnc0luY2x1ZGluZ1ByaXZhdGUp
ICogODsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGZsYWdzU2hpZnQgPSBtYXhOdW1i
ZXJPZkJpdHNJblBvaW50ZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBjb2xvclNw
YWNlU2l6ZSA9IHNpemVvZihDb2xvclNwYWNlKSAqIDg7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50NjRfdCBjb2xvclNwYWNlU2hpZnQgPSBtYXhOdW1iZXJPZkJpdHNJblBvaW50ZXIgLSBmbGFn
c1NpemU7CisgICAgc3RhdGljX2Fzc2VydChmbGFnc1NpemUgKyBjb2xvclNwYWNlU2l6ZSArIG1h
eE51bWJlck9mQml0c0luUG9pbnRlciA8PSA2NCk7CiAKICAgICBzdGF0aWMgdWludDY0X3QgZW5j
b2RlZEZsYWdzKE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+KTsKKyAgICBzdGF0aWMg
dWludDY0X3QgZW5jb2RlZENvbG9yU3BhY2UoQ29sb3JTcGFjZSk7CiAgICAgc3RhdGljIHVpbnQ2
NF90IGVuY29kZWRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90Pik7CiAgICAgc3RhdGljIHVpbnQ2
NF90IGVuY29kZWRQYWNrZWRJbmxpbmVDb2xvcihQYWNrZWRDb2xvcjo6UkdCQSk7Ci0gICAgc3Rh
dGljIHVpbnQ2NF90IGVuY29kZWRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsK
KyAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZE91dE9mTGluZUNvbG9yKFJlZjxPdXRPZkxpbmVD
b2xvcj4mJik7CiAKICAgICBzdGF0aWMgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4g
ZGVjb2RlZEZsYWdzKHVpbnQ2NF90KTsKKyAgICBzdGF0aWMgQ29sb3JTcGFjZSBkZWNvZGVkQ29s
b3JTcGFjZSh1aW50NjRfdCk7CiAgICAgc3RhdGljIFNSR0JBPHVpbnQ4X3Q+IGRlY29kZWRJbmxp
bmVDb2xvcih1aW50NjRfdCk7CiAgICAgc3RhdGljIFBhY2tlZENvbG9yOjpSR0JBIGRlY29kZWRQ
YWNrZWRJbmxpbmVDb2xvcih1aW50NjRfdCk7Ci0gICAgc3RhdGljIEV4dGVuZGVkQ29sb3ImIGRl
Y29kZWRFeHRlbmRlZENvbG9yKHVpbnQ2NF90KTsKKyAgICBzdGF0aWMgT3V0T2ZMaW5lQ29sb3Im
IGRlY29kZWRPdXRPZkxpbmVDb2xvcih1aW50NjRfdCk7CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ2NF90IGludmFsaWRDb2xvckFuZEZsYWdzID0gMDsKICAgICB1aW50NjRfdCBtX2NvbG9y
QW5kRmxhZ3MgeyBpbnZhbGlkQ29sb3JBbmRGbGFncyB9OwpAQCAtMjMwLDkgKzI2MCw5IEBAIHBy
aXZhdGU6CiBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogYm9v
bCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAotLy8gT25lIG9yIGJv
dGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMuCi1ib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29u
c3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwotYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsSWdub3Jp
bmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKKy8vIE9uZSBvciBi
b3RoIG11c3QgYmUgb3V0IG9mIGxpbmUgY29sb3JzLgorYm9vbCBvdXRPZkxpbmVDb2xvcnNFcXVh
bChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Citib29sIG91dE9mTGluZUNvbG9yc0VxdWFs
SWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAogI2lm
IFVTRShDRykKIFdFQkNPUkVfRVhQT1JUIENHQ29sb3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBD
b2xvciYpOwpAQCAtMjQyLDggKzI3Miw4IEBAIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3IKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29u
c3QgQ29sb3ImIGIpCiB7Ci0gICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgp
KQotICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKKyAgICBpZiAoYS5p
c091dE9mTGluZSgpIHx8IGIuaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIG91dE9mTGlu
ZUNvbG9yc0VxdWFsKGEsIGIpOwogICAgIHJldHVybiBhLm1fY29sb3JBbmRGbGFncyA9PSBiLm1f
Y29sb3JBbmRGbGFnczsKIH0KIApAQCAtMjUyLDMxICsyODIsMzEgQEAgaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBDb2xvciYgYSwgYwogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWlu
bGluZSBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9y
JiBiKQoraW5saW5lIGJvb2wgb3V0T2ZMaW5lQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNv
bnN0IENvbG9yJiBiKQogewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQo
KSkKLSAgICAgICAgcmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpICYmIGEu
ZmxhZ3MoKSA9PSBiLmZsYWdzKCk7CisgICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0
T2ZMaW5lKCkpCisgICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09
IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xv
clNwYWNlKCkgJiYgYS5mbGFncygpID09IGIuZmxhZ3MoKTsKIAotICAgIEFTU0VSVChhLmlzRXh0
ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7CisgICAgQVNTRVJUKGEuaXNPdXRPZkxpbmUoKSB8
fCBiLmlzT3V0T2ZMaW5lKCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIGJvb2wg
ZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwg
Y29uc3QgQ29sb3ImIGIpCitpbmxpbmUgYm9vbCBvdXRPZkxpbmVDb2xvcnNFcXVhbElnbm9yaW5n
U2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7Ci0gICAgaWYg
KGEuaXNFeHRlbmRlZCgpICYmIGIuaXNFeHRlbmRlZCgpKSB7CisgICAgaWYgKGEuaXNPdXRPZkxp
bmUoKSAmJiBiLmlzT3V0T2ZMaW5lKCkpIHsKICAgICAgICAgYXV0byBhRmxhZ3MgPSBhLmZsYWdz
KCkgLSBDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1hbnRpYzsKICAgICAgICAgYXV0
byBiRmxhZ3MgPSBiLmZsYWdzKCkgLSBDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1h
bnRpYzsKLSAgICAgICAgcmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpICYm
IGFGbGFncyA9PSBiRmxhZ3M7CisgICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9u
ZW50cygpID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkg
PT0gYi5jb2xvclNwYWNlKCkgJiYgYUZsYWdzID09IGJGbGFnczsKICAgICB9CiAKLSAgICBBU1NF
UlQoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpOworICAgIEFTU0VSVChhLmlzT3V0
T2ZMaW5lKCkgfHwgYi5pc091dE9mTGluZSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGlu
bGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKIHsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9y
KGEsIGIpOworICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkgfHwgYi5pc091dE9mTGluZSgpKQorICAg
ICAgICByZXR1cm4gb3V0T2ZMaW5lQ29sb3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoYSwg
Yik7CiAKICAgICBhdXRvIGFGbGFncyA9IGEuZmxhZ3MoKSAtIENvbG9yOjpGbGFnc0luY2x1ZGlu
Z1ByaXZhdGU6OlNlbWFudGljOwogICAgIGF1dG8gYkZsYWdzID0gYi5mbGFncygpIC0gQ29sb3I6
OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7CkBAIC0yOTQsMjcgKzMyNCwyMiBAQCBp
bmxpbmUgQ29sb3I6OkNvbG9yKE9wdGlvbmFsPFNSR0JBPHVpbnQ4CiAgICAgICAgIHNldENvbG9y
KCpjb2xvciwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKIH0KIAotaW5saW5lIENv
bG9yOjpDb2xvcihDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKLXsKLSAgICBzZXRFeHRlbmRlZENv
bG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb21wb25lbnRzLCBjb2xvclNwYWNlKSwgdG9GbGFn
c0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKLX0KLQogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZl90PElzQ29sb3JUeXBlV2l0aENvbXBvbmVudFR5
cGU8Q29sb3JUeXBlLCBmbG9hdD4+Kj4KIGlubGluZSBDb2xvcjo6Q29sb3IoY29uc3QgQ29sb3JU
eXBlJiBjb2xvciwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKIHsKLSAgICBzZXRFeHRlbmRlZENv
bG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjb2xvciksIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRl
KGZsYWdzKSk7CisgICAgc2V0T3V0T2ZMaW5lQ29sb3IoT3V0T2ZMaW5lQ29sb3I6OmNyZWF0ZShh
c0NvbG9yQ29tcG9uZW50cyhjb2xvcikpLCBDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4sIHRvRmxh
Z3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9y
VHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbG9yVHlwZVdpdGhDb21wb25lbnRU
eXBlPENvbG9yVHlwZSwgZmxvYXQ+Pio+CiBpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IE9wdGlv
bmFsPENvbG9yVHlwZT4mIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewogICAgIGlm
IChjb2xvcikKLSAgICAgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUo
KmNvbG9yKSwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICAgICAgc2V0T3V0
T2ZMaW5lQ29sb3IoT3V0T2ZMaW5lQ29sb3I6OmNyZWF0ZShhc0NvbG9yQ29tcG9uZW50cygqY29s
b3IpKSwgQ29sb3JTcGFjZUZvcjxDb2xvclR5cGU+LCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShm
bGFncykpOwogfQogCi1pbmxpbmUgQ29sb3I6OkNvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4
dGVuZGVkQ29sb3IsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCitpbmxpbmUgQ29sb3I6OkNvbG9y
KFJlZjxPdXRPZkxpbmVDb2xvcj4mJiBvdXRPZkxpbmVDb2xvciwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldEV4dGVuZGVkQ29sb3IoV1RG
TW92ZShleHRlbmRlZENvbG9yKSwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAg
ICBzZXRPdXRPZkxpbmVDb2xvcihXVEZNb3ZlKG91dE9mTGluZUNvbG9yKSwgY29sb3JTcGFjZSwg
dG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKIH0KIAogaW5saW5lIENvbG9yOjpDb2xv
cihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQpAQCAtMzM0LDE0ICszNTksMTQgQEAgaW5s
aW5lIGJvb2wgQ29sb3I6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbAogCiBpbmxpbmUgQ29sb3I6On5D
b2xvcigpCiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgYXNFeHRlbmRlZCgpLmRl
cmVmKCk7CisgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCisgICAgICAgIGFzT3V0T2ZMaW5lKCkuZGVy
ZWYoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsKLSAgICBp
ZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNFeHRlbmRlZCgp
LmNvbXBvbmVudHMoKSwgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgZmxhZ3MoKS50b1Jhdygp
KTsKKyAgICBpZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFz
T3V0T2ZMaW5lKCkuY29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIGZsYWdzKCkudG9SYXcoKSk7
CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUsIGZsYWdzKCku
dG9SYXcoKSk7CiB9CiAKQEAgLTM2MCwxMCArMzg1LDE1IEBAIGlubGluZSBib29sIENvbG9yOjp1
c2VzQ29sb3JGdW5jdGlvblNlcmkKICAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhGbGFnc0lu
Y2x1ZGluZ1ByaXZhdGU6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKIH0KIAoraW5s
aW5lIENvbG9yU3BhY2UgQ29sb3I6OmNvbG9yU3BhY2UoKSBjb25zdAoreworICAgIHJldHVybiBk
ZWNvZGVkQ29sb3JTcGFjZShtX2NvbG9yQW5kRmxhZ3MpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVu
Y3RvciYmIGZ1bmN0b3IpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAg
cmV0dXJuIGFzRXh0ZW5kZWQoKS5jYWxsT25VbmRlcmx5aW5nVHlwZShzdGQ6OmZvcndhcmQ8RnVu
Y3Rvcj4oZnVuY3RvcikpOworICAgIGlmIChpc091dE9mTGluZSgpKQorICAgICAgICByZXR1cm4g
Y2FsbFdpdGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCksIGNvbG9yU3BhY2Uo
KSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICByZXR1cm4gc3RkOjppbnZv
a2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBhc0lubGluZSgpKTsKIH0KIApAQCAt
Mzk5LDI2ICs0MjksMjYgQEAgaW5saW5lIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQ
cgogICAgIHJldHVybiBkZWNvZGVkRmxhZ3MobV9jb2xvckFuZEZsYWdzKTsKIH0KIAotaW5saW5l
IGJvb2wgQ29sb3I6OmlzRXh0ZW5kZWQoKSBjb25zdAoraW5saW5lIGJvb2wgQ29sb3I6OmlzT3V0
T2ZMaW5lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1
ZGluZ1ByaXZhdGU6OkV4dGVuZGVkKTsKKyAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhGbGFn
c0luY2x1ZGluZ1ByaXZhdGU6Ok91dE9mTGluZSk7CiB9CiAKIGlubGluZSBib29sIENvbG9yOjpp
c0lubGluZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5j
bHVkaW5nUHJpdmF0ZTo6RXh0ZW5kZWQpOworICAgIHJldHVybiAhZmxhZ3MoKS5jb250YWlucyhG
bGFnc0luY2x1ZGluZ1ByaXZhdGU6Ok91dE9mTGluZSk7CiB9CiAKLWlubGluZSBjb25zdCBFeHRl
bmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0CitpbmxpbmUgY29uc3QgQ29sb3I6
Ok91dE9mTGluZUNvbG9yJiBDb2xvcjo6YXNPdXRPZkxpbmUoKSBjb25zdAogewotICAgIEFTU0VS
VChpc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiBkZWNvZGVkRXh0ZW5kZWRDb2xvcihtX2NvbG9y
QW5kRmxhZ3MpOworICAgIEFTU0VSVChpc091dE9mTGluZSgpKTsKKyAgICByZXR1cm4gZGVjb2Rl
ZE91dE9mTGluZUNvbG9yKG1fY29sb3JBbmRGbGFncyk7CiB9CiAKLWlubGluZSBSZWY8RXh0ZW5k
ZWRDb2xvcj4gQ29sb3I6OmFzRXh0ZW5kZWRSZWYoKSBjb25zdAoraW5saW5lIFJlZjxDb2xvcjo6
T3V0T2ZMaW5lQ29sb3I+IENvbG9yOjphc091dE9mTGluZVJlZigpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKGlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIGRlY29kZWRFeHRlbmRlZENvbG9yKG1fY29s
b3JBbmRGbGFncyk7CisgICAgQVNTRVJUKGlzT3V0T2ZMaW5lKCkpOworICAgIHJldHVybiBkZWNv
ZGVkT3V0T2ZMaW5lQ29sb3IobV9jb2xvckFuZEZsYWdzKTsKIH0KIAogaW5saW5lIFNSR0JBPHVp
bnQ4X3Q+IENvbG9yOjphc0lubGluZSgpIGNvbnN0CkBAIC00MzMsOSArNDYzLDIxIEBAIGlubGlu
ZSBQYWNrZWRDb2xvcjo6UkdCQSBDb2xvcjo6YXNQYWNrZWQKICAgICByZXR1cm4gZGVjb2RlZFBh
Y2tlZElubGluZUNvbG9yKG1fY29sb3JBbmRGbGFncyk7CiB9CiAKK2lubGluZSBPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gQ29sb3I6OnRyeUdldEFzU1JHQkFCeXRlcygpIGNvbnN0Cit7CisgICAg
aWYgKGlzSW5saW5lKCkpCisgICAgICAgIHJldHVybiBhc0lubGluZSgpOworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Cit9CisKIGlubGluZSB1aW50NjRfdCBDb2xvcjo6ZW5jb2RlZEZsYWdzKE9w
dGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oZmxhZ3MudG9SYXcoKSkgPDwgbWF4TnVtYmVyT2ZCaXRzSW5Qb2lu
dGVyOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZmxhZ3MudG9SYXcoKSkgPDwg
ZmxhZ3NTaGlmdDsKK30KKworaW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkQ29sb3JTcGFj
ZShDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2
NF90Pihjb2xvclNwYWNlKSA8PCBjb2xvclNwYWNlU2hpZnQ7CiB9CiAKIGlubGluZSB1aW50NjRf
dCBDb2xvcjo6ZW5jb2RlZElubGluZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQpAQCAtNDQ4
LDE4ICs0OTAsMjMgQEAgaW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkUGFja2VkSW5saQog
ICAgIHJldHVybiBjb2xvci52YWx1ZTsKIH0KIAotaW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNv
ZGVkRXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiBleHRlbmRlZENvbG9yKQoraW5s
aW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkT3V0T2ZMaW5lQ29sb3IoUmVmPE91dE9mTGluZUNv
bG9yPiYmIG91dE9mTGluZUNvbG9yKQogewogI2lmIENQVShBRERSRVNTNjQpCi0gICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oJmV4dGVuZGVkQ29sb3IubGVha1JlZigpKTsKKyAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pigmb3V0T2ZMaW5lQ29sb3IubGVha1JlZigpKTsK
ICNlbHNlCi0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oJmV4dGVuZGVkQ29sb3Iu
bGVha1JlZigpKTsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQzMl90Pigmb3V0T2ZMaW5l
Q29sb3IubGVha1JlZigpKTsKICNlbmRpZgogfQogCiBpbmxpbmUgT3B0aW9uU2V0PENvbG9yOjpG
bGFnc0luY2x1ZGluZ1ByaXZhdGU+IENvbG9yOjpkZWNvZGVkRmxhZ3ModWludDY0X3QgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlPjo6
ZnJvbVJhdyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUgPj4gbWF4TnVtYmVyT2ZCaXRzSW5Q
b2ludGVyKSk7CisgICAgcmV0dXJuIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2
YXRlPjo6ZnJvbVJhdyhzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiBmbGFnc1NoaWZ0KSk7
Cit9CisKK2lubGluZSBDb2xvclNwYWNlIENvbG9yOjpkZWNvZGVkQ29sb3JTcGFjZSh1aW50NjRf
dCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sb3JTcGFjZT4oc3RhdGljX2Nh
c3Q8dWludDhfdD4odmFsdWUgPj4gY29sb3JTcGFjZVNoaWZ0KSk7CiB9CiAKIGlubGluZSBTUkdC
QTx1aW50OF90PiBDb2xvcjo6ZGVjb2RlZElubGluZUNvbG9yKHVpbnQ2NF90IHZhbHVlKQpAQCAt
NDcyLDI3ICs1MTksMjcgQEAgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIENvbG9yOjpkZWNvZGVk
UAogICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2
YWx1ZSAmIGNvbG9yVmFsdWVNYXNrKSB9OwogfQogCi1pbmxpbmUgRXh0ZW5kZWRDb2xvciYgQ29s
b3I6OmRlY29kZWRFeHRlbmRlZENvbG9yKHVpbnQ2NF90IHZhbHVlKQoraW5saW5lIENvbG9yOjpP
dXRPZkxpbmVDb2xvciYgQ29sb3I6OmRlY29kZWRPdXRPZkxpbmVDb2xvcih1aW50NjRfdCB2YWx1
ZSkKIHsKICNpZiBDUFUoQUREUkVTUzY0KQotICAgIHJldHVybiAqYml0d2lzZV9jYXN0PEV4dGVu
ZGVkQ29sb3IqPih2YWx1ZSAmIGNvbG9yVmFsdWVNYXNrKTsKKyAgICByZXR1cm4gKmJpdHdpc2Vf
Y2FzdDxPdXRPZkxpbmVDb2xvcio+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spOwogI2Vsc2UKLSAg
ICByZXR1cm4gKmJpdHdpc2VfY2FzdDxFeHRlbmRlZENvbG9yKj4oc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spKTsKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxP
dXRPZkxpbmVDb2xvcio+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSAmIGNvbG9yVmFsdWVN
YXNrKSk7CiAjZW5kaWYKIH0KIAogaW5saW5lIHZvaWQgQ29sb3I6OnNldENvbG9yKFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiBmbGFncykKIHsK
ICAgICBmbGFncy5hZGQoeyBGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlZhbGlkIH0pOwotICAgIG1f
Y29sb3JBbmRGbGFncyA9IGVuY29kZWRJbmxpbmVDb2xvcihjb2xvcikgfCBlbmNvZGVkRmxhZ3Mo
ZmxhZ3MpOworICAgIG1fY29sb3JBbmRGbGFncyA9IGVuY29kZWRJbmxpbmVDb2xvcihjb2xvcikg
fCBlbmNvZGVkQ29sb3JTcGFjZShDb2xvclNwYWNlOjpTUkdCKSB8IGVuY29kZWRGbGFncyhmbGFn
cyk7CiAgICAgQVNTRVJUKGlzSW5saW5lKCkpOwogfQogCi1pbmxpbmUgdm9pZCBDb2xvcjo6c2V0
RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiBjb2xvciwgT3B0aW9uU2V0PEZsYWdz
SW5jbHVkaW5nUHJpdmF0ZT4gZmxhZ3MpCitpbmxpbmUgdm9pZCBDb2xvcjo6c2V0T3V0T2ZMaW5l
Q29sb3IoUmVmPE91dE9mTGluZUNvbG9yPiYmIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQogewotICAgIGZsYWdzLmFk
ZCh7IEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6VmFsaWQsIEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6
RXh0ZW5kZWQgfSk7Ci0gICAgbV9jb2xvckFuZEZsYWdzID0gZW5jb2RlZEV4dGVuZGVkQ29sb3Io
V1RGTW92ZShjb2xvcikpIHwgZW5jb2RlZEZsYWdzKGZsYWdzKTsKLSAgICBBU1NFUlQoaXNFeHRl
bmRlZCgpKTsKKyAgICBmbGFncy5hZGQoeyBGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlZhbGlkLCBG
bGFnc0luY2x1ZGluZ1ByaXZhdGU6Ok91dE9mTGluZSB9KTsKKyAgICBtX2NvbG9yQW5kRmxhZ3Mg
PSBlbmNvZGVkT3V0T2ZMaW5lQ29sb3IoV1RGTW92ZShjb2xvcikpIHwgZW5jb2RlZENvbG9yU3Bh
Y2UoY29sb3JTcGFjZSkgfCBlbmNvZGVkRmxhZ3MoZmxhZ3MpOworICAgIEFTU0VSVChpc091dE9m
TGluZSgpKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBDb2xvcjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CkBAIC01MDUsMTcgKzU1MiwxNyBAQCB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIENvbG9yOjplbmNvCiAKICAgICBlbmNvZGVyIDw8IGZsYWdzKCku
Y29udGFpbnMoRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1hbnRpYyk7CiAgICAgZW5jb2RlciA8
PCBmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6VXNlQ29sb3JGdW5jdGlv
blNlcmlhbGl6YXRpb24pOwotCi0gICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgIAorICAgIGlm
IChpc091dE9mTGluZSgpKSB7CiAgICAgICAgIGVuY29kZXIgPDwgdHJ1ZTsKKyAgICAgICAgZW5j
b2RlciA8PCBjb2xvclNwYWNlKCk7CiAKLSAgICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFz
RXh0ZW5kZWQoKTsKLSAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gZXh0ZW5kZWRD
b2xvci5jb21wb25lbnRzKCk7CisgICAgICAgIGF1dG8mIG91dE9mTGluZUNvbG9yID0gYXNPdXRP
ZkxpbmUoKTsKKyAgICAgICAgYXV0byBbYzEsIGMyLCBjMywgYWxwaGFdID0gb3V0T2ZMaW5lQ29s
b3IuY29tcG9uZW50cygpOwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNvZGVy
IDw8IGMyOwogICAgICAgICBlbmNvZGVyIDw8IGMzOwogICAgICAgICBlbmNvZGVyIDw8IGFscGhh
OwotICAgICAgICBlbmNvZGVyIDw8IGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGVuY29kZXIgPDwgZmFsc2U7CkBAIC01NDgsMjcgKzU5NSwy
NyBAQCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxDb2xvcj4gCiAgICAgaWYgKHVz
ZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKICAgICAgICAgZmxhZ3MuYWRkKEZsYWdzOjpV
c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CiAKLSAgICBib29sIGlzRXh0ZW5kZWQ7Ci0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0V4dGVuZGVkKSkKKyAgICBib29sIGlzT3V0T2ZMaW5l
OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNPdXRPZkxpbmUpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGlzRXh0ZW5kZWQpIHsKLSAgICAgICAgZmxvYXQgYzE7
Ci0gICAgICAgIGZsb2F0IGMyOwotICAgICAgICBmbG9hdCBjMzsKLSAgICAgICAgZmxvYXQgYWxw
aGE7CisgICAgaWYgKGlzT3V0T2ZMaW5lKSB7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFj
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGZsb2F0IGMxOwogICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGMxKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIGZsb2F0IGMyOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGMyKSkKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGZsb2F0IGMzOwogICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGMzKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIGZsb2F0IGFscGhhOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY29sb3JTcGFjZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAg
ICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoeyBjMSwgYzIsIGMzLCBh
bHBoYSB9LCBjb2xvclNwYWNlKSwgZmxhZ3MgfTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgT3V0
T2ZMaW5lQ29sb3I6OmNyZWF0ZSh7IGMxLCBjMiwgYzMsIGFscGhhIH0pLCBjb2xvclNwYWNlLCBm
bGFncyB9OwogICAgIH0KIAogICAgIHVpbnQzMl90IHZhbHVlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3Bw
CShyZXZpc2lvbiAyNzM3MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAj
aW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aAkocmV2aXNpb24gMjczNzIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5oCShub25leGlzdGVudCkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCi0jaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCi0j
aW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKLSNpbmNsdWRl
IDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV4dGVuZGVkQ29sb3IgOiBw
dWJsaWMgUmVmQ291bnRlZDxFeHRlbmRlZENvbG9yPiB7Ci1wdWJsaWM6Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShjb25z
dCBDb2xvclR5cGUmKTsKLSAgICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+LCBDb2xvclNwYWNlKTsKLSAgICAKLSAgICBmbG9hdCBhbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQotCi0gICAgY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0PiYgY29tcG9uZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9uZW50czsg
fQotICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFj
ZTsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gZGVjbHR5cGUoYXV0bykgY2Fs
bE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBFeHRl
bmRlZENvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOwotCi0gICAgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiBtX2NvbXBvbmVudHM7Ci0gICAgQ29sb3JTcGFjZSBtX2NvbG9y
U3BhY2U7Ci19OwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV4dGVuZGVkQ29sb3Im
IGEsIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGIpCi17Ci0gICAgcmV0dXJuIGEuY29sb3JTcGFjZSgp
ID09IGIuY29sb3JTcGFjZSgpICYmIGEuY29tcG9uZW50cygpID09IGIuY29tcG9uZW50cygpOwot
fQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVkQ29sb3ImIGEsIGNvbnN0
IEV4dGVuZGVkQ29sb3ImIGIpCi17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBpbmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVk
Q29sb3I6OmNyZWF0ZShjb25zdCBDb2xvclR5cGUmIGNvbG9yKQotewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEV4dGVuZGVkQ29sb3IoYXNDb2xvckNvbXBvbmVudHMoY29sb3IpLCBDb2xvclNw
YWNlRm9yPENvbG9yVHlwZT4pKTsKLX0KLQotaW5saW5lIFJlZjxFeHRlbmRlZENvbG9yPiBFeHRl
bmRlZENvbG9yOjpjcmVhdGUoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRD
b2xvcihjb21wb25lbnRzLCBjb2xvclNwYWNlKSk7Ci19Ci0KLWlubGluZSBFeHRlbmRlZENvbG9y
OjpFeHRlbmRlZENvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50cywgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQotICAgIDogbV9jb21wb25lbnRzKGNvbXBvbmVudHMpCi0gICAgLCBt
X2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKLXsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gZGVjbHR5cGUoYXV0bykgRXh0ZW5kZWRDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVu
Y3RvciYmIGZ1bmN0b3IpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNhbGxXaXRoQ29sb3JUeXBlKG1f
Y29tcG9uZW50cywgbV9jb2xvclNwYWNlLCBzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rvcikp
OwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xv
ckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAkocmV2aXNpb24gMjczNzIyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDExICs4NCw2
IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50OF90Pj4gcm91bmRBbmQKICAgICByZXR1cm4g
Y29udmVydENvbG9yPFNSR0JBPHVpbnQ4X3Q+PihTUkdCQTxmbG9hdD4geyByLCBnLCBiLCBhIH0p
OwogfQogCi1Db2xvcjo6Q29sb3IoQ0dDb2xvclJlZiBjb2xvcikKLSAgICA6IENvbG9yKHJvdW5k
QW5kQ2xhbXBUb1NSR0JBTG9zc3koY29sb3IpKQotewotfQotCiBDb2xvcjo6Q29sb3IoQ0dDb2xv
clJlZiBjb2xvciwgT3B0aW9uU2V0PEZsYWdzPiBmbGFncykKICAgICA6IENvbG9yKHJvdW5kQW5k
Q2xhbXBUb1NSR0JBTG9zc3koY29sb3IpLCBmbGFncykKIHsKQEAgLTEyOCw4ICsxMjMsOCBAQCBz
dGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25zdCBDb2xvCiAKIENHQ29sb3JSZWYgY2Fj
aGVkQ0dDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yLmlzSW5saW5l
KCkpIHsKLSAgICAgICAgc3dpdGNoIChQYWNrZWRDb2xvcjo6UkdCQSB7IGNvbG9yLmFzSW5saW5l
KCkgfS52YWx1ZSkgeworICAgIGlmIChhdXRvIHNyZ2IgPSBjb2xvci50cnlHZXRBc1NSR0JBQnl0
ZXMoKSkgeworICAgICAgICBzd2l0Y2ggKFBhY2tlZENvbG9yOjpSR0JBIHsgKnNyZ2IgfS52YWx1
ZSkgewogICAgICAgICBjYXNlIFBhY2tlZENvbG9yOjpSR0JBIHsgQ29sb3I6OnRyYW5zcGFyZW50
QmxhY2sgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIENHQ29sb3JSZWYgdHJhbnNwYXJl
bnRDR0NvbG9yID0gbGVha0NHQ29sb3IoY29sb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRyYW5z
cGFyZW50Q0dDb2xvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYWRpZW50Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCShyZXZpc2lvbiAyNzM3MjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsMTQgKzU2LDEwIEBAIHZvaWQgR3JhZGllbnQ6OmNyZWF0ZUNHR3JhZGllbnQoKQogCiAg
ICAgYm9vbCBoYXNFeHRlbmRlZENvbG9ycyA9IGZhbHNlOwogICAgIGZvciAoY29uc3QgYXV0byYg
c3RvcCA6IG1fc3RvcHMpIHsKLQogICAgICAgICAvLyBJZiBhbGwgdGhlIHN0b3BzIGFyZSBzUkdC
LCBpdCBpcyBmYXN0ZXIgdG8gY3JlYXRlIGEgZ3JhZGllbnQgdXNpbmcKLSAgICAgICAgLy8gY29t
cG9uZW50cyB0aGFuIENHQ29sb3JzLgotICAgICAgICAvLyBGSVhNRTogUmF0aGVyIHRoYW4ganVz
dCBjaGVjayBmb3IgZXh0ZW5kZWQgY29sb3JzLCB3ZSBzaG91bGQgY2hlY2sgdGhlIGFjdHVhbAot
ICAgICAgICAvLyBjb2xvciBzcGFjZSwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZSBjb21wb25lbnRz
IGFyZSBvdXRzaWRlIFswLTFdLgotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzI5MjY2MDY+
CisgICAgICAgIC8vIGNvbXBvbmVudHMgdGhhbiBDR0NvbG9ycy4gPHJkYXI6Ly9wcm9ibGVtLzMy
OTI2NjA2PgogCi0gICAgICAgIGlmIChzdG9wLmNvbG9yLmlzRXh0ZW5kZWQoKSkKKyAgICAgICAg
aWYgKHN0b3AuY29sb3IuY29sb3JTcGFjZSgpICE9IENvbG9yU3BhY2U6OlNSR0IpCiAgICAgICAg
ICAgICBoYXNFeHRlbmRlZENvbG9ycyA9IHRydWU7CiAKICAgICAgICAgYXV0byBbY29sb3JTcGFj
ZSwgY29tcG9uZW50c10gPSBzdG9wLmNvbG9yLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCShyZXZpc2lvbiAyNzM3MjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkCiAgICAgUkVMRUFTRV9BU1NFUlQobV9j
b2xvclN0b3BDb3VudCA8PSBtYXhDb2xvclN0b3BDb3VudCk7CiAgICAgZm9yICh1aW50OF90IGkg
PSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKSB7CiAgICAgICAgIG1fb2Zmc2V0c1tpXSA9
IGdyYWRpZW50LnN0b3BzKClbaV0ub2Zmc2V0OwotICAgICAgICBtX2NvbG9yc1tpXSA9IGdyYWRp
ZW50LnN0b3BzKClbaV0uY29sb3IuYXNJbmxpbmUoKTsKKyAgICAgICAgbV9jb2xvcnNbaV0gPSAq
Z3JhZGllbnQuc3RvcHMoKVtpXS5jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMoKTsKICAgICB9CiB9
CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBib29sIFNldElubGluZUZpbGxHcmFkaWVudDo6aXNJbmxp
bmUoY29uCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoYXV0byYgY29sb3JTdG9w
IDogZ3JhZGllbnQuc3RvcHMoKSkgewotICAgICAgICBpZiAoIWNvbG9yU3RvcC5jb2xvci5pc0lu
bGluZSgpKQorICAgICAgICBpZiAoIWNvbG9yU3RvcC5jb2xvci50cnlHZXRBc1NSR0JBQnl0ZXMo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAJKHJldmlzaW9uIDI3MzcyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDEwIEBAIHN0YXRpYyBib29sIGNv
bnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmcKICAgICBpZiAoY2hhbmdlRmxhZ3MgIT0gKGNoYW5n
ZUZsYWdzICYgaW5saW5lU3RhdGVDaGFuZ2VGbGFncykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IuaXNJbmxpbmUo
KSkKKyAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFz
U1JHQkFCeXRlcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkgJiYgIWNo
YW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuaXNJbmxpbmUoKSkKKyAgICBpZiAoY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkgJiYgIWNoYW5n
ZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKQpAQCAtMTA0LDEzICsxMDQsMTMgQEAgdm9pZCBSZWNv
cmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbgogICAgIH0KIAogICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQot
ICAgICAgICBhcHBlbmQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGNoYW5nZXMubV9zdGF0ZS5zdHJv
a2VDb2xvci5hc0lubGluZSgpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZVN0cm9rZUNvbG9y
PigqY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKTsKIAog
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlKSkKICAgICAgICAgYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oY2hh
bmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIGFw
cGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuYXNJbmxp
bmUoKSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KCpjaGFuZ2VzLm1fc3Rh
dGUuZmlsbENvbG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKTsKIAogICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKICAg
ICAgICAgYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVudD4oKmNoYW5nZXMubV9zdGF0ZS5maWxs
R3JhZGllbnQsIGNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFj
Lm1tCShyZXZpc2lvbiAyNzM3MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsOCBAQCBDb2xv
ciBzZW1hbnRpY0NvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqCiAKIE5TQ29sb3IgKm5zQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChjb2xvci5pc0lubGluZSgpKSB7Ci0gICAg
ICAgIHN3aXRjaCAoUGFja2VkQ29sb3I6OlJHQkEgeyBjb2xvci5hc0lubGluZSgpIH0udmFsdWUp
IHsKKyAgICBpZiAoYXV0byBzcmdiID0gY29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChQYWNrZWRDb2xvcjo6UkdCQSB7ICpzcmdiIH0udmFsdWUpIHsKICAgICAg
ICAgY2FzZSBQYWNrZWRDb2xvcjo6UkdCQSB7IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrIH0udmFs
dWU6IHsKICAgICAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNDb2xv
cj4+IGNsZWFyQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhTUkdCUmVkOjAgZ3JlZW46MCBibHVl
OjAgYWxwaGE6MF07CiAgICAgICAgICAgICByZXR1cm4gY2xlYXJDb2xvci5nZXQoKS5nZXQoKTsK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MzcyMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIxIEBACisyMDIxLTAzLTAxICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZWR1Y2UgdGhlIHNpemUgb2YgZXh0ZW5kZWQgY29sb3JzIGJ5IHN0b3JpbmcgdGhl
IGNvbG9yIHNwYWNlIGluIGZyZWUgYml0cyBvZiB0aGUgb3duaW5nIENvbG9yCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI1ODQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjptYWtlQ29sb3IpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9EaXNwbGF5TGlzdFRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRl
ZENvbG9yVGVzdHMuY3BwOiBSZW1vdmVkLgorICAgICAgICBVcGRhdGUgdGVzdHMgdG8gYWNjb3Vu
dCBmb3IgcmVtb3ZhbCBvZiB0aGUgRXh0ZW5kZWRDb2xvciBjbGFzcy4KKyAgICAgICAgTWVyZ2Ug
RXh0ZW5kZWRDb2xvclRlc3RzLmNwcCB0aGF0IHN0aWxsIG1ha2Ugc2Vuc2UgaW50byBDb2xvclRl
c3RzLmNwcAorCiAyMDIxLTAzLTAxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KIAogICAgICAgICBbd2JraXRzY21weV0gQWRkIGNvbW1pdHMgd2l0aCBjb2xsaWRpbmcgdGlt
ZXN0YW1wcwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNzM3
MjIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsNyArMTcwLDYgQEAgaWYgKEVOQUJMRV9XRUJDT1JFKQogICAgICAgICBUZXN0cy9X
ZWJDb3JlL0NvbG9yVGVzdHMuY3BwCiAgICAgICAgIFRlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRD
b250cm9sbGVyLmNwcAogICAgICAgICBUZXN0cy9XZWJDb3JlL0NvbnRleHRNZW51QWN0aW9uLmNw
cAotICAgICAgICBUZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKICAgICAgICAg
VGVzdHMvV2ViQ29yZS9GaWxlTW9uaXRvci5jcHAKICAgICAgICAgVGVzdHMvV2ViQ29yZS9GbG9h
dFBvaW50VGVzdHMuY3BwCiAgICAgICAgIFRlc3RzL1dlYkNvcmUvRmxvYXRSZWN0VGVzdHMuY3Bw
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjczNzIyKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNiBAQAogCQkzMTI4QTgxMzIzNzYzRkFDMDBEOTBE
NDAgLyogbGluay13aXRoLWltYWdlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyOEE4MTIyMzc2M0YwQjAwRDkwRDQwIC8qIGxpbmst
d2l0aC1pbWFnZS5odG1sICovOyB9OwogCQkzMTI4QTgxNTIzNzY0MTMzMDBEOTBENDAgLyogaW1h
Z2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTI4QTgxNDIzNzY0MEZEMDBEOTBENDAgLyogaW1hZ2UuaHRtbCAqLzsgfTsKIAkJMzEz
QzNBMDIyMUU1NjdDMzAwREJBODZFIC8qIFN5c3RlbVByZXZpZXdCbG9iTmFtaW5nLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQzNB
MDEyMUU1Njc3QTAwREJBODZFIC8qIFN5c3RlbVByZXZpZXdCbG9iTmFtaW5nLmh0bWwgKi87IH07
Ci0JCTMxNTExODEwMURCMUFFNDAwMDE3NjMwNCAvKiBFeHRlbmRlZENvbG9yVGVzdHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE1MTE4MEYxREIx
QURENTAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JUZXN0cy5jcHAgKi87IH07CiAJCTMxQjc2RTQz
MjMyOThFMkMwMDdGRUQyQyAvKiBTeXN0ZW1QcmV2aWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFCNzZFNDIyMzI5OEUyQjAwN0ZFRDJDIC8qIFN5
c3RlbVByZXZpZXcubW0gKi87IH07CiAJCTMxQjc2RTQ1MjMyOTlCREMwMDdGRUQyQyAvKiBzeXN0
ZW0tcHJldmlldy10cmlnZ2VyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzFCNzZFNDQyMzI5OUJBMzAwN0ZFRDJDIC8qIHN5c3RlbS1w
cmV2aWV3LXRyaWdnZXIuaHRtbCAqLzsgfTsKIAkJMzFFOUJEQTEyNDdGNEM2MjAwMkU1MUEyIC8q
IFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRTlCREEwMjQ3RjRDNjIwMDJFNTFBMiAvKiBXZWJH
TFByZXBhcmVEaXNwbGF5T25XZWJUaHJlYWQubW0gKi87IH07CkBAIC0xOTMyLDcgKzE5MzEsNiBA
QAogCQkzMTI4QTgxMjIzNzYzRjBCMDBEOTBENDAgLyogbGluay13aXRoLWltYWdlLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSAibGluay13aXRoLWltYWdlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTI4QTgxNDIzNzY0MEZEMDBEOTBENDAgLyogaW1hZ2UuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGlt
YWdlLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxM0MzQTAxMjFFNTY3N0Ew
MERCQTg2RSAvKiBTeXN0ZW1QcmV2aWV3QmxvYk5hbWluZy5odG1sICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5o
dG1sOyBwYXRoID0gU3lzdGVtUHJldmlld0Jsb2JOYW1pbmcuaHRtbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMzE1MTE4MEYxREIxQURENTAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JU
ZXN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbmRlZENv
bG9yVGVzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUI3NkU0MjIzMjk4
RTJCMDA3RkVEMkMgLyogU3lzdGVtUHJldmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFN5c3RlbVByZXZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxQjc2RTQ0MjMyOTlCQTMwMDdGRUQyQyAvKiBzeXN0ZW0tcHJldmlldy10cmlnZ2Vy
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAic3lzdGVtLXByZXZpZXctdHJpZ2dlci5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFFOUJEQTAyNDdGNEM2MjAwMkU1MUEyIC8qIFdlYkdMUHJl
cGFyZURpc3BsYXlPbldlYlRocmVhZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdMUHJl
cGFyZURpc3BsYXlPbldlYlRocmVhZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM1ODUsNyArMzU4Myw2IEBACiAJCQkJMjZGNkUxRUYxQURDNzQ5QjAwREU2OTZCIC8qIERGQU1p
bmltaXplci5jcHAgKi8sCiAJCQkJRjQwOTRDQzYyNTU0NUJENTAwM0Q3M0UzIC8qIERpc3BsYXlM
aXN0VGVzdHMuY3BwICovLAogCQkJCTkzOTE1QTE2MjREQjY2QzcwMDE5RkY0MyAvKiBEb2N1bWVu
dE9yZGVyLmNwcCAqLywKLQkJCQkzMTUxMTgwRjFEQjFBREQ1MDAxNzYzMDQgLyogRXh0ZW5kZWRD
b2xvclRlc3RzLmNwcCAqLywKIAkJCQk1Nzk2NTFFNjIxNkJGRDUzMDA2RUJGRTUgLyogRmlkb0hp
ZE1lc3NhZ2VUZXN0LmNwcCAqLywKIAkJCQk1NzJCNDAzNTIxNzZBMDI5MDAwQUQ0M0UgLyogRmlk
b1Rlc3REYXRhLmggKi8sCiAJCQkJN0EzMkQ3NDkxRjAyMTUxNTAwMTYyQzQ0IC8qIEZpbGVNb25p
dG9yLmNwcCAqLywKQEAgLTUyOTEsNyArNTI4OCw2IEBACiAJCQkJNUM3OTY0MTAxRUIwMjc4RDAw
NzVENzRDIC8qIEV2ZW50TW9kaWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTI5QjI5
MjBGRDJBOTkwMEYxNUNFRCAvKiBFeGl0RnVsbHNjcmVlbk9uRW50ZXJQaVAubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxRDEyQkVDMDI0NUJFRjg1MDA0QzBCN0EgLyogRXhpdFBpUE9uU3VzcGVuZFZp
ZGVvRWxlbWVudC5tbSBpbiBTb3VyY2VzICovLAotCQkJCTMxNTExODEwMURCMUFFNDAwMDE3NjMw
NCAvKiBFeHRlbmRlZENvbG9yVGVzdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRjEx
QTQxMUFFNjAwNDQ3QzRDIC8qIEZhaWxlZExvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTc5
NjUxRTcyMTZCRkRFRDAwNkVCRkU1IC8qIEZpZG9IaWRNZXNzYWdlVGVzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QTMyRDc0QTFGMDIxNTE1MDAxNjJDNDQgLyogRmlsZU1vbml0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29s
b3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNzM3MjIpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsOSArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgIlRlc3Qu
aCIKKyNpbmNsdWRlICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nv
bG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvckNvbnZlcnNpb24uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvbG9yU2VyaWFsaXphdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JUeXBl
cy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCkBAIC0xNjYsMjMgKzE2OSwxOCBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKIHsKICAg
ICBDb2xvciBpbnZhbGlkQ29sb3I7CiAgICAgRVhQRUNUX0ZBTFNFKGludmFsaWRDb2xvci5pc1Zh
bGlkKCkpOwotICAgIEVYUEVDVF9GQUxTRShpbnZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAog
ICAgIENvbG9yIG90aGVySW52YWxpZENvbG9yID0gaW52YWxpZENvbG9yOwogICAgIEVYUEVDVF9G
QUxTRShvdGhlckludmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIEVYUEVDVF9GQUxTRShvdGhl
ckludmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgdmFsaWRDb2xvciA9IENv
bG9yOjpyZWQ7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIEVY
UEVDVF9GQUxTRSh2YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBvdGhlclZh
bGlkQ29sb3IgPSB2YWxpZENvbG9yOwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5p
c1ZhbGlkKCkpOwotICAgIEVYUEVDVF9GQUxTRShvdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgp
KTsKIAogICAgIHZhbGlkQ29sb3IgPSBTUkdCQTx1aW50OF90PiB7IDEsIDIsIDMsIDQgfTsKICAg
ICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZh
bGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAgICBhdXRvIHZhbGlkQ29sb3JDb21wb25lbnRzID0g
dmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICBFWFBFQ1RfRVEodmFsaWRD
b2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVu
dHMuZ3JlZW4sIDIpOwpAQCAtMTkxLDcgKzE4OSw2IEBAIFRFU1QoQ29sb3IsIFZhbGlkaXR5KQog
CiAgICAgQ29sb3IgeWV0QW5vdGhlclZhbGlkQ29sb3IoV1RGTW92ZSh2YWxpZENvbG9yKSk7CiAg
ICAgRVhQRUNUX1RSVUUoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBFWFBF
Q1RfRkFMU0UoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAgICBhdXRvIHll
dEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNv
bXBvbmVudHMucmVkLCAxKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21w
b25lbnRzLmdyZWVuLCAyKTsKQEAgLTIwMCw3ICsxOTcsNiBAQCBURVNUKENvbG9yLCBWYWxpZGl0
eSkKIAogICAgIG90aGVyVmFsaWRDb2xvciA9IFdURk1vdmUoeWV0QW5vdGhlclZhbGlkQ29sb3Ip
OwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIEVYUEVD
VF9GQUxTRShvdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAgICBhdXRvIG90aGVyVmFs
aWRDb2xvckNvbXBvbmVudHMgPSBvdGhlclZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CiAgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKICAg
ICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CkBAIC0yMzMs
NCArMjI5LDE5NCBAQCBURVNUKENvbG9yLCBMdW1pbmFuY2UpCiAgICAgRVhQRUNUX0VRKGNEYXJr
ZW5lZC5ibHVlLCA3Nik7CiB9CiAKK1RFU1QoQ29sb3IsIENvbnN0cnVjdG9yKQoreworICAgIENv
bG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworCisg
ICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMS5jb2xvclNwYWNlQW5kQ29tcG9u
ZW50cygpOworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxw
aGEpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMxKSwgImNvbG9yKGRpc3Bs
YXktcDMgMSAwLjUgMC4yNSkiKTsKK30KKworVEVTVChDb2xvciwgQ29weUNvbnN0cnVjdG9yKQor
eworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAg
fSB9OworICAgIENvbG9yIGMyKGMxKTsKKworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVu
dHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
bHBoYV0gPSBjb21wb25lbnRzOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKKyAgICBFWFBFQ1RfRVEoc2VyaWFsaXph
dGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7Cit9CisKK1RF
U1QoQ29sb3IsIEFzc2lnbm1lbnQpCit7CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+
IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgQ29sb3IgYzIgPSBjMTsKKworICAgIGF1
dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMo
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEuMCwgcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAuMjUsIGIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsK
KyAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAz
IDEgMC41IDAuMjUpIik7Cit9CisKK1RFU1QoQ29sb3IsIEVxdWFsaXR5KQoreworICAgIHsKKyAg
ICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9
IH07CisgICAgICAgIENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1
LCAxLjAgfSB9OworICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAg
fSB9OworICAgICAgICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAx
LjAgfSB9OworICAgICAgICBFWFBFQ1RfTkUoYzEsIGMyKTsKKyAgICB9CisKKyAgICBhdXRvIGNv
bXBvbmVudEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OworICAg
IENvbG9yIHJnYjEgeyBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykg
fTsKKyAgICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKKyAgICBFWFBFQ1RfTkUocmdi
MSwgcmdiMik7CisgICAgRVhQRUNUX05FKHJnYjIsIHJnYjEpOworfQorCitURVNUKENvbG9yLCBI
YXNoKQoreworICAgIHsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4w
LCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgICAgIENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworICAgICAgICBFWFBFQ1RfRVEoYzEuaGFzaCgp
LCBjMi5oYXNoKCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5
UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgICAgIENvbG9yIGMyIHsg
U1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgICAgIEVYUEVDVF9O
RShjMS5oYXNoKCksIGMyLmhhc2goKSk7CisgICAgfQorCisgICAgYXV0byBjb21wb25lbnRCeXRl
cyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAxMjgsIDYzLCAxMjcgfTsKKyAgICBDb2xvciByZ2Ix
IHsgY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29tcG9uZW50Qnl0ZXMpIH07CisgICAgQ29s
b3IgcmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07CisgICAgRVhQRUNUX05FKHJnYjEuaGFzaCgpLCBy
Z2IyLmhhc2goKSk7Cit9CisKK1RFU1QoQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKK3sKKyAgICBD
b2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAg
ICBDb2xvciBjMihXVEZNb3ZlKGMxKSk7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBtb3ZlZCB0
aGUgb3V0IG9mIGxpbmUgY29sb3IgcG9pbnRlciBpbnRvIGMyLAorICAgIC8vIGFuZCBzZXQgYzEg
dG8gaW52YWxpZCBzbyB0aGF0IGl0IGRvZXNuJ3QgY2F1c2UgZGVsZXRpb24uCisgICAgRVhQRUNU
X0ZBTFNFKGMxLmlzVmFsaWQoKSk7CisKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRz
XSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgRVhQRUNUX0VRKGNvbG9yU3Bh
Y2UsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0g
PSBjb21wb25lbnRzOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDAuNSwgZyk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKKyAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZv
ckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7Cit9CisKK1RFU1QoQ29s
b3IsIE1vdmVBc3NpZ25tZW50KQoreworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7
IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworICAgIENvbG9yIGMyID0gV1RGTW92ZShjMSk7CisK
KyAgICAvLyBXZSBzaG91bGQgaGF2ZSBtb3ZlZCB0aGUgb3V0IG9mIGxpbmUgY29sb3IgcG9pbnRl
ciBpbnRvIGMyLAorICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0aGF0IGl0IGRvZXNu
J3QgY2F1c2UgZGVsZXRpb24uCisgICAgRVhQRUNUX0ZBTFNFKGMxLmlzVmFsaWQoKSk7CisKKyAg
ICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25l
bnRzKCk7CisgICAgRVhQRUNUX0VRKGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7
CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEuMCwgcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAuMjUsIGIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsK
KyAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAz
IDEgMC41IDAuMjUpIik7Cit9CisKK0NvbG9yIG1ha2VDb2xvcigpCit7CisgICAgcmV0dXJuIENv
bG9yIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworfQorCitU
RVNUKENvbG9yLCBSZXR1cm5WYWx1ZXMpCit7CisgICAgQ29sb3IgYzIgPSBtYWtlQ29sb3IoKTsK
KyAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAz
IDEgMC41IDAuMjUpIik7Cit9CisKK1RFU1QoQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKK3sK
KyAgICBDb2xvciBwM0NvbG9yIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAw
Ljc1IH0gfTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOworICAgIEVY
UEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzMjgyZik7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC4xNDkxMjc0OGYpOworICAgIEVYUEVDVF9GTE9B
VF9FUShzUkdCQUNvbG9yLmFscGhhLCAwLjc1Zik7Cit9CisKK1RFU1QoQ29sb3IsIExpbmVhclNS
R0JDb252ZXJzaW9uVG9TUkdCKQoreworICAgIENvbG9yIGxpbmVhclNSR0JBQ29sb3IgeyBMaW5l
YXJTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07CisgICAgYXV0byBzUkdC
QUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IucmVkLCAxLjBmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
c1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc1JH
QkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpOworICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNv
bG9yLmFscGhhLCAwLjc1Zik7Cit9CisKK1RFU1QoQ29sb3IsIENvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KQoreworICAgIENvbG9yIGNvbG9yIHsgU1JHQkE8ZmxvYXQ+IHsgMC4sIDAuLCAxLiwg
MC42IH0gfTsKKworICAgIHsKKyAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgxLik7CisgICAgICAgIEVYUEVD
VF9FUShjb2xvciwgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgPSBjb2xvci5jb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeSgwLjUpOworICAgICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21w
b25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNvbG9yU3BhY2VBbmRDb21wb25l
bnRzKCk7CisgICAgICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpTUkdCKTsK
KyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRzOworICAgICAgICBFWFBFQ1Rf
RkxPQVRfRVEociwgMC4pOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZywgMC4pOworICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEoYiwgMS4pOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoYSwgMC4z
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5ID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoMC4pOworICAgICAgICBhdXRv
IFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBD
b2xvclNwYWNlOjpTUkdCKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb21wb25lbnRz
OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOworICAgICAgICBFWFBFQ1RfRkxPQVRf
RVEoZywgMC4pOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoYiwgMS4pOworICAgICAgICBFWFBF
Q1RfRkxPQVRfRVEoYSwgMC4pOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0
VGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9EaXNwbGF5TGlzdFRlc3RzLmNwcAkocmV2aXNpb24gMjczNzIyKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTIsNyArMTUyLDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBBcHBlbmRJdGVtcykK
ICAgICAgICAgRVhQRUNUX1RSVUUoaGFuZGxlLT5pczxGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CiAK
ICAgICAgICAgYXV0byYgaXRlbSA9IGhhbmRsZS0+Z2V0PEZpbGxSZWN0V2l0aENvbG9yPigpOwot
ICAgICAgICBFWFBFQ1RfRVEoaXRlbS5jb2xvcigpLmFzSW5saW5lKCksIENvbG9yOjpibGFjayk7
CisgICAgICAgIEVYUEVDVF9FUSgqaXRlbS5jb2xvcigpLnRyeUdldEFzU1JHQkFCeXRlcygpLCBD
b2xvcjo6YmxhY2spOwogICAgICAgICBFWFBFQ1RfRVEoaXRlbS5yZWN0KCksIEZsb2F0UmVjdCgw
LCAwLCAxMDAsIDEwMCkpOwogICAgIH0KIApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9u
IDI3MzcyMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENv
bG9yVGVzdHMuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjkwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJUZXN0LmgiCi0jaW5jbHVkZSAiV1RG
U3RyaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
IHsKLQotVEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKLXsKLSAgICBDb2xvciBjMSB7
IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICBFWFBFQ1Rf
VFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gYzEu
YXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKLQotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIp
OwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1
LCBiKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7Ci0gICAgRVhQRUNUX0VRKDF1
LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRp
b25Gb3JDU1MoYzEpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotfQotCi1URVNU
KEV4dGVuZGVkQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKLXsKLSAgICBDb2xvciBjMSB7IERpc3Bs
YXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICBFWFBFQ1RfVFJVRShj
MS5pc0V4dGVuZGVkKCkpOwotCi0gICAgQ29sb3IgYzIoYzEpOwotCi0gICAgYXV0byBbciwgZywg
YiwgYWxwaGFdID0gYzIuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKLQotICAgIEVYUEVDVF9G
TE9BVF9FUSgxLjAsIHIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOwotICAgIEVYUEVD
VF9GTE9BVF9FUSgwLjI1LCBiKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7Ci0g
ICAgRVhQRUNUX0VRKDJ1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNU
X0VRKDJ1LCBjMi5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKHNlcmlh
bGl6YXRpb25Gb3JDU1MoYzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotfQot
Ci1URVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCi17Ci0gICAgQ29sb3IgYzEgeyBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgRVhQRUNUX1RSVUUo
YzEuaXNFeHRlbmRlZCgpKTsKLQotICAgIENvbG9yIGMyID0gYzE7Ci0KLSAgICBhdXRvIFtyLCBn
LCBiLCBhbHBoYV0gPSBjMi5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwotCi0gICAgRVhQRUNU
X0ZMT0FUX0VRKDEuMCwgcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7Ci0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsK
LSAgICBFWFBFQ1RfRVEoMnUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBF
Q1RfRVEoMnUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoc2Vy
aWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7Ci19
Ci0KLVRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCi17Ci0gICAgewotICAgICAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAgICAgICBDb2xvciBjMiB7IERp
c3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKLSAg
ICB9Ci0KLSAgICB7Ci0gICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwg
MC41LCAwLjI1LCAxLjAgfSB9OwotICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkp
OwotCi0gICAgICAgIENvbG9yIGMyIHsgU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEu
MCB9IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICAgICAg
RVhQRUNUX05FKGMxLCBjMik7Ci0gICAgfQotCi0gICAgYXV0byBjb21wb25lbnRCeXRlcyA9IFNS
R0JBPHVpbnQ4X3Q+IHsgMjU1LCAxMjgsIDYzLCAxMjcgfTsKLSAgICBDb2xvciByZ2IxIHsgY29u
dmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29tcG9uZW50Qnl0ZXMpIH07Ci0gICAgQ29sb3Igcmdi
MiB7IGNvbXBvbmVudEJ5dGVzIH07Ci0gICAgRVhQRUNUX05FKHJnYjEsIHJnYjIpOwotICAgIEVY
UEVDVF9ORShyZ2IyLCByZ2IxKTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQotewot
ICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAu
MjUsIDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAg
ICAgICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9
IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICAgICAgRVhQ
RUNUX0VRKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIENv
bG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAg
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgICAgIENvbG9yIGMyIHsg
U1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICAgICAgRVhQRUNUX05FKGMxLmhhc2goKSwgYzIu
aGFzaCgpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBvbmVudEJ5dGVzID0gU1JHQkE8dWludDhf
dD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OwotICAgIENvbG9yIHJnYjEgeyBjb252ZXJ0Q29sb3I8
U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykgfTsKLSAgICBDb2xvciByZ2IyIHsgY29tcG9u
ZW50Qnl0ZXMgfTsKLSAgICBFWFBFQ1RfTkUocmdiMS5oYXNoKCksIHJnYjIuaGFzaCgpKTsKLX0K
LQotVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCi17Ci0gICAgQ29sb3IgYzEg
eyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgRVhQRUNU
X1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAgIENvbG9yIGMyKFdURk1vdmUoYzEpKTsKLSAg
ICAvLyBXZSBzaG91bGQgaGF2ZSBtb3ZlZCB0aGUgZXh0ZW5kZWQgY29sb3IgcG9pbnRlciBpbnRv
IGMyLAotICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0aGF0IGl0IGRvZXNuJ3QgY2F1
c2UgZGVsZXRpb24uCi0gICAgRVhQRUNUX0ZBTFNFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKGMxLmlzVmFsaWQoKSk7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBj
Mi5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwg
cik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAu
MjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKLSAgICBFWFBFQ1RfRVEo
MXUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoc2VyaWFsaXph
dGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7Ci19Ci0KLVRF
U1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCi17Ci0gICAgQ29sb3IgYzEgeyBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgRVhQRUNUX1RSVUUo
YzEuaXNFeHRlbmRlZCgpKTsKLQotICAgIENvbG9yIGMyID0gV1RGTW92ZShjMSk7Ci0KLSAgICAv
LyBXZSBzaG91bGQgaGF2ZSBtb3ZlZCB0aGUgZXh0ZW5kZWQgY29sb3IgcG9pbnRlciBpbnRvIGMy
LAotICAgIC8vIGFuZCBzZXQgYzEgdG8gaW52YWxpZCBzbyB0aGF0IGl0IGRvZXNuJ3QgY2F1c2Ug
ZGVsZXRpb24uCi0gICAgRVhQRUNUX0ZBTFNFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0gICAgRVhQRUNU
X0ZBTFNFKGMxLmlzVmFsaWQoKSk7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjMi5h
c0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUs
IGIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKLSAgICBFWFBFQ1RfRVEoMXUs
IGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlv
bkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7Ci19Ci0KLVRFU1Qo
RXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGluZykKLXsKLSAgICBDb2xvciogYzEg
PSBuZXcgQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07
Ci0gICAgCi0gICAgRVhQRUNUX1RSVUUoYzEtPmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICBDb2xvciog
YzIgPSBuZXcgQ29sb3IoKmMxKTsKLSAgICBDb2xvciogYzMgPSBuZXcgQ29sb3IoKmMyKTsKLQot
ICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGMyLT5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygp
OwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAu
NSwgZyk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9F
USgxLjAsIGFscGhhKTsKLSAgICBFWFBFQ1RfRVEoM3UsIGMyLT5hc0V4dGVuZGVkKCkucmVmQ291
bnQoKSk7Ci0gICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoKmMyKSwgImNvbG9yKGRp
c3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKLQotICAgIGRlbGV0ZSBjMTsKLSAgICBFWFBFQ1RfRVEo
MnUsIGMyLT5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0KLSAgICBkZWxldGUgYzI7Ci0gICAg
RVhQRUNUX0VRKDF1LCBjMy0+YXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotCi0gICAgZGVsZXRl
IGMzOwotfQotCi1Db2xvciBtYWtlQ29sb3IoKQotewotICAgIENvbG9yIGMxIHsgRGlzcGxheVAz
PGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7Ci0gICAgRVhQRUNUX0VRKDF1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291bnQo
KSk7Ci0KLSAgICByZXR1cm4gYzE7Ci19Ci0KLVRFU1QoRXh0ZW5kZWRDb2xvciwgUmV0dXJuVmFs
dWVzKQotewotICAgIENvbG9yIGMyID0gbWFrZUNvbG9yKCk7Ci0gICAgRVhQRUNUX1RSVUUoYzIu
aXNFeHRlbmRlZCgpKTsKLQotICAgIEVYUEVDVF9FUSgxdSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNv
dW50KCkpOwotICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRp
c3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZl
cnNpb25Ub1NSR0IpCi17Ci0gICAgQ29sb3IgcDNDb2xvciB7IERpc3BsYXlQMzxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMC43NSB9IH07Ci0gICAgRVhQRUNUX1RSVUUocDNDb2xvci5pc0V4dGVu
ZGVkKCkpOwotCi0gICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JBTG9zc3k8Zmxv
YXQ+KCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IucmVkLCAxLjBmKTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ncmVlbiwgMC40NjI1MzI4MmYpOwotICAgIEVYUEVD
VF9GTE9BVF9FUShzUkdCQUNvbG9yLmJsdWUsIDAuMTQ5MTI3NDhmKTsKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoc1JHQkFDb2xvci5hbHBoYSwgMC43NWYpOwotfQotCi1URVNUKEV4dGVuZGVkQ29sb3Is
IExpbmVhclNSR0JDb252ZXJzaW9uVG9TUkdCKQotewotICAgIENvbG9yIGxpbmVhclNSR0JBQ29s
b3IgeyBMaW5lYXJTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07Ci0gICAg
RVhQRUNUX1RSVUUobGluZWFyU1JHQkFDb2xvci5pc0V4dGVuZGVkKCkpOwotCi0gICAgYXV0byBz
UkdCQUNvbG9yID0gbGluZWFyU1JHQkFDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IucmVkLCAxLjBmKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
c1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpOwotICAgIEVYUEVDVF9GTE9BVF9FUShzUkdC
QUNvbG9yLmFscGhhLCAwLjc1Zik7Ci19Ci0KLVRFU1QoRXh0ZW5kZWRDb2xvciwgQ29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnkpCi17Ci0gICAgQ29sb3IgY29sb3IgeyBTUkdCQTxmbG9hdD4geyAw
LiwgMC4sIDEuLCAwLjYgfSB9OwotICAgIEVYUEVDVF9UUlVFKGNvbG9yLmlzRXh0ZW5kZWQoKSk7
Ci0KLSAgICB7Ci0gICAgICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0gY29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoMS4pOwotICAgICAgICBFWFBFQ1RfVFJVRShj
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5pc0V4dGVuZGVkKCkpOwotICAgICAgICBFWFBFQ1Rf
RVEoY29sb3IsIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KTsKLSAgICB9Ci0KLSAgICB7Ci0g
ICAgICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0gY29sb3IuY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnkoMC41KTsKLSAgICAgICAgRVhQRUNUX1RSVUUoY29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkuaXNFeHRlbmRlZCgpKTsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwot
ICAgICAgICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEo
ZywgMC4pOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoYiwgMS4pOwotICAgICAgICBFWFBFQ1Rf
RkxPQVRfRVEoYSwgMC4zKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIENvbG9yIGNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5ID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoMC4p
OwotICAgICAgICBFWFBFQ1RfVFJVRShjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5pc0V4dGVu
ZGVkKCkpOwotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5LmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9F
UShyLCAwLik7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShnLCAwLik7Ci0gICAgICAgIEVYUEVD
VF9GTE9BVF9FUShiLCAxLik7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShhLCAwLik7Ci0gICAg
fQotfQotCi19IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZl
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKRGVsZXRlZDogc3ZuOmtleXdvcmRzCiMj
IC0xICswLDAgIyMKLURhdGUgQXV0aG9yIElkIFJldmlzaW9uIEhlYWRVUkwKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421968</attachid>
            <date>2021-03-02 11:20:57 -0800</date>
            <delta_ts>2021-03-02 16:16:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222584-20210302112056.patch</filename>
            <type>text/plain</type>
            <size>65347</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mzc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIxLTAzLTAxICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2UgdGhlIHNpemUgb2YgZXh0
ZW5kZWQgY29sb3JzIGJ5IHN0b3JpbmcgdGhlIGNvbG9yIHNwYWNlIGluIGZyZWUgYml0cyBvZiB0
aGUgb3duaW5nIENvbG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjI1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWR1Y2UgdGhlIHNpemUgb2Ygbm9uLVNSQkdBPHVpbnQ4X3Q+IGNvbG9ycyBieSBt
b3ZpbmcgdGhlIGNvbG9yIHNwYWNlIGZyb20gdGhlIHJlZiBjb3VudGVkCisgICAgICAgIG91dC1v
Zi1saW5lIGJpdCBpbnRvIHRoZSBmcmVlIGJpdHMgb2YgdGhlIENvbG9yIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIEFsc28sIHRha2UgdGhlIG9wZXJ0dW5pdHkgdG8gbW92ZSBhbmQgcmVuYW1l
IHRoZSBvdXQgb2YgbGluZSBiaXQgZnJvbSBpdCdzIG93biBmaWxlIG5hbWVkCisgICAgICAgIEV4
dGVuZGVkQ29sb3IgdG8gYSBwcml2YXRlIG5lc3RlZCB0eXBlIGNhbGxlZCBPdXRPZkxpbmVDb21w
b25lbnRzLgorCisgICAgICAgIENvbG9yIG5vdyBlbmNvZGVzIHRoZSBmb2xsb3dpbmcgZGF0YToK
KyAgICAgICAgICAgIHwgICA4IGJpdHMgICB8ICAgOCBiaXRzICAgfCAgICAgICAgICA0OCAob3Ig
MzIpIGJpdHMgICAgICAgICAgfAorICAgICAgICAgICAgfCBDb2xvclNwYWNlIHwgICAgRmxhZ3Mg
ICB8ICAgSW5saW5lQ29sb3JEYXRhT3JPdXRPZkxpbmVQdHIgICB8CisKKyAgICAgICAgQ29sb3JT
cGFjZSBhY3R1YWxseSBvbmx5IHVzZXMgNCBiaXRzLCBzbyBpZiB3ZSBuZWVkIG1vcmUgcm9vbSBm
b3IgZmxhZ3MKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSwgd2UgY291bGQgcGFjayB0aGluZ3MgZXZl
biBtb3JlIHRpZ2h0bHkuCisKKyAgICAgICAgQWRkaXRpb25hbCwgdGFsayB0aGUgb3BlcnR1bml0
eSB0byByZW1vdmUgdGhlIGlzSW5saW5lL2lzRXh0ZW5kZWQgYW5kCisgICAgICAgIGFzSW5saW5l
L2FzRXh0ZW5kZWQgZnVuY3Rpb25zLiBUaGUgZnVuY3Rpb25hbGl0eSBvZiBpc0lubGluZS9hc0lu
bGluZQorICAgICAgICBpcyBzdGlsbCBuZWVjZXNzYXJ5IGluIHNvbWUgcGxhY2VzLCBidXQgY2Fu
IGJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlCisgICAgICAgIHRyeUdldEFzU1JHQkFCeXRlcyB3aGlj
aCByZXR1cm5zIGFuIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiB3aXRoIGEgCisgICAgICAgIHZh
bGlkIHZhbHVlIHdoZW4gdGhlIHN0b3JlZCB2YWx1ZSBpcyBpbmxpbmUuCisKKyAgICAgICAgU2lu
Y2UgRXh0ZW5kZWRDb2xvciBpcyBubyBsb25nZXIgYWNjZXNzaWJsZSwgYSBmZXcgdGVzdHMgdGhh
dCBjaGVja2VkIHRoaW5ncyBsaWtlCisgICAgICAgIHRoZSByZWYgY291bnQgb2YgdGhlIEV4dGVu
ZGVkQ29sb3IgaGFkIHRvIGJlIGNoYW5nZWQuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmlzT3BhcXVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjppc1Zpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhhQnl0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFBc0Zsb2F0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVudHM6OmFscGhhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpPdXRPZkxpbmVDb21wb25lbnRzOjpjb21wb25l
bnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpPdXRPZkxpbmVDb21wb25lbnRz
OjpPdXRPZkxpbmVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRPdXRP
ZkxpbmVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6b3V0T2ZMaW5lQ29tcG9uZW50c0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6
Om91dE9mTGluZUNvbXBvbmVudHNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjplcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6fkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpoYXNoIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6aXNPdXRPZkxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmlzSW5saW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc091dE9mTGluZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YXNPdXRPZkxpbmVSZWYgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRyeUdldEFzU1JHQkFCeXRlcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2RlZEZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjplbmNvZGVkQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZW5jb2Rl
ZE91dE9mTGluZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZWRG
bGFncyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlZENvbG9yU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZWRPdXRPZkxpbmVDb21wb25lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpzZXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OnNldEV4dGVuZGVkQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZXh0ZW5kZWRDb2xvcnNFcXVhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpleHRlbmRlZENvbG9yc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjppc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkUmVmIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjplbmNvZGVkRXh0ZW5kZWRDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlZEV4dGVuZGVkQ29sb3IpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVk
Q0dDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRlQ0dHcmFkaWVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6U2V0
SW5saW5lRmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ6OmlzSW5saW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpuc0NvbG9yKToKKwogMjAyMS0wMy0wMiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggLVdyZXR1cm4tdHlwZSB3YXJuaW5n
cyBhZnRlciByMjczNTUwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI3Mzc0MSkK
KysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTExODEs
NyArMTE4MSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uc0dMLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50M0QuaApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjczNzQxKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05Njgs
NyArOTY4LDYgQEAKIAkJMzFDMEZGMjUwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5zaXRp
b25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFDMEZGMUYwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5oICovOyB9
OwogCQkzMUMwRkYzRTBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGM0Ew
RTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFD
MEZGNDAwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYzQzBFNENFRkFD
MDA3RDZGRTUgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsKLQkJMzFEQ0RGNDQx
REExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRENERjQyMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRl
bmRlZENvbG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzFERUE0NTYxQjM5RjREOTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxREVBNDU0
MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggKi87IH07CiAJCTMx
RUFGOTdFMTIxNDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRUFGOTdDMTIxNDM1QTQw
MEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCAqLzsgfTsKIAkJMzFFQjU0REYxRTdE
Qzc0NDAwQzE2MjNCIC8qIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUVCNTRERDFFN0RDNzQ0MDBDMTYy
M0IgLyogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24uaCAqLzsgfTsKQEAgLTc1MDQsNyArNzUw
Myw2IEBACiAJCTMxRDI2QkM0MUY4NkQyNjYwMDhGRjI1NSAvKiBKU0ltYWdlQml0bWFwT3B0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ltYWdlQml0bWFw
T3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDI2QkM1MUY4NkQy
NjgwMDhGRjI1NSAvKiBKU0ltYWdlQml0bWFwT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0ltYWdlQml0bWFwT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMUQyNkJDNjFGODZEMjY5MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1hcC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ltYWdlQml0bWFwLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8q
IEV4dGVuZGVkQ29sb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5k
ZWRDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMURFQTQ1MzFCMzlGNEQ5
MDBGNzcxNzggLyogV2ViU3lzdGVtQmFja2Ryb3BMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxREVBNDU0MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0
ZW1CYWNrZHJvcExheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN5
c3RlbUJhY2tkcm9wTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFFQUY5
N0MxMjE0MzVBNDAwRTdDMUJGIC8qIERldmljZU1vdGlvbkNsaWVudElPUy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEZXZpY2VNb3Rpb25DbGllbnRJT1MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2Njg1LDcgKzI2NjgzLDYgQEAKIAkJCQkyRDI5RUNDMjE5
MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmggKi8sCiAJCQkJ
MkQyOUVDQzMxOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIu
Y3BwICovLAogCQkJCTJEMjlFQ0M0MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1v
bml0b3JNYW5hZ2VyLmggKi8sCi0JCQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVu
ZGVkQ29sb3IuaCAqLywKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9u
c0dMLmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3Bw
ICovLAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8sCkBA
IC0zMjE3OSw3ICszMjE3Niw2IEBACiAJCQkJMkQyOTM4NkIyMzVGNkI2OTAwQzdGM0IyIC8qIEV4
Y2VwdGlvbkRldGFpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDE5NjMxMUQ2Q0FCNzYwMEZD
N0U0NyAvKiBFeGNlcHRpb25Pci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM3RkIzNDUxRjlFQTA2
RDAwRDBGQzMxIC8qIEV4dGVuZGFibGVNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2RTcyRjU1MDIyOURDRDE3MDBCM0UxNTEgLyogRXh0ZW5zaW9uc0dMQU5H
TEUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRl
bnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNzM3NDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDggKzM5LDggQEAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIGRhcmtlbmVkV2hpdGUgPSBTUgogQ29s
b3I6OkNvbG9yKGNvbnN0IENvbG9yJiBvdGhlcikKICAgICA6IG1fY29sb3JBbmRGbGFncyhvdGhl
ci5tX2NvbG9yQW5kRmxhZ3MpCiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgYXNF
eHRlbmRlZCgpLnJlZigpOworICAgIGlmIChpc091dE9mTGluZSgpKQorICAgICAgICBhc091dE9m
TGluZSgpLnJlZigpOwogfQogCiBDb2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKQEAgLTUzLDEz
ICs1MywxMyBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoCiAgICAg
aWYgKCp0aGlzID09IG90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBpZiAoaXNF
eHRlbmRlZCgpKQotICAgICAgICBhc0V4dGVuZGVkKCkuZGVyZWYoKTsKKyAgICBpZiAoaXNPdXRP
ZkxpbmUoKSkKKyAgICAgICAgYXNPdXRPZkxpbmUoKS5kZXJlZigpOwogCiAgICAgbV9jb2xvckFu
ZEZsYWdzID0gb3RoZXIubV9jb2xvckFuZEZsYWdzOwogCi0gICAgaWYgKGlzRXh0ZW5kZWQoKSkK
LSAgICAgICAgYXNFeHRlbmRlZCgpLnJlZigpOworICAgIGlmIChpc091dE9mTGluZSgpKQorICAg
ICAgICBhc091dE9mTGluZSgpLnJlZigpOwogCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtNjks
OCArNjksOCBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShDb2xvciYmIG90aGVyKQogICAgIGlm
ICgqdGhpcyA9PSBvdGhlcikKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgaWYgKGlzRXh0
ZW5kZWQoKSkKLSAgICAgICAgYXNFeHRlbmRlZCgpLmRlcmVmKCk7CisgICAgaWYgKGlzT3V0T2ZM
aW5lKCkpCisgICAgICAgIGFzT3V0T2ZMaW5lKCkuZGVyZWYoKTsKIAogICAgIG1fY29sb3JBbmRG
bGFncyA9IG90aGVyLm1fY29sb3JBbmRGbGFnczsKICAgICBvdGhlci5tX2NvbG9yQW5kRmxhZ3Mg
PSBpbnZhbGlkQ29sb3JBbmRGbGFnczsKQEAgLTE2NiwxNSArMTY2LDE1IEBAIENvbG9yIENvbG9y
OjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICBpZiAoaXNTZW1hbnRpYygpKQogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgCi0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJu
IHsgYXNFeHRlbmRlZFJlZigpLCBGbGFnczo6U2VtYW50aWMgfTsKKyAgICBpZiAoaXNPdXRPZkxp
bmUoKSkKKyAgICAgICAgcmV0dXJuIHsgYXNPdXRPZkxpbmVSZWYoKSwgY29sb3JTcGFjZSgpLCBG
bGFnczo6U2VtYW50aWMgfTsKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFnczo6U2VtYW50
aWMgfTsKIH0KIAogc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+
IENvbG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0
ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgYXNF
eHRlbmRlZCgpLmNvbXBvbmVudHMoKSB9OworICAgIGlmIChpc091dE9mTGluZSgpKQorICAgICAg
ICByZXR1cm4geyBjb2xvclNwYWNlKCksIGFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpIH07CiAg
ICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29udmVydENv
bG9yPFNSR0JBPGZsb2F0Pj4oYXNJbmxpbmUoKSkpIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjczNzQxKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTQgKzI1LDE3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9u
LmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAjaWYgVVNFKENH
KQpAQCAtNzEsOCArNzQsNiBAQCBwdWJsaWM6CiAKICAgICBDb2xvcihTUkdCQTx1aW50OF90Piwg
T3B0aW9uU2V0PEZsYWdzPiA9IHsgfSk7CiAgICAgQ29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhf
dD4+LCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKLQotICAgIENvbG9yKENvbG9yQ29tcG9uZW50
czxmbG9hdD4sIENvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOwogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJ
c0NvbG9yVHlwZVdpdGhDb21wb25lbnRUeXBlPENvbG9yVHlwZSwgZmxvYXQ+PiogPSBudWxscHRy
PgogICAgIENvbG9yKGNvbnN0IENvbG9yVHlwZSYsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOwpA
QCAtOTgsMTAgKzk5LDEyIEBAIHB1YmxpYzoKICAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdDsK
ICAgICBib29sIHVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbigpIGNvbnN0OwogCi0gICAg
Ym9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQo
KS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBp
c1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxw
aGEoKSA+IDAuMCA6IGFzSW5saW5lKCkuYWxwaGEgPiAwOyB9Ci0gICAgdWludDhfdCBhbHBoYUJ5
dGUoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVp
bnQ4X3Q+KGFzRXh0ZW5kZWQoKS5hbHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KLSAgICBm
bG9hdCBhbHBoYUFzRmxvYXQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVu
ZGVkKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBo
YSk7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKKworICAgIGJvb2wgaXNP
cGFxdWUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBo
YSgpID09IDEuMCA6IGFzSW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9CisgICAgYm9vbCBpc1Zpc2li
bGUoKSBjb25zdCB7IHJldHVybiBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgp
ID4gMC4wIDogYXNJbmxpbmUoKS5hbHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgp
IGNvbnN0IHsgcmV0dXJuIGlzT3V0T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4
X3Q+KGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9CisgICAgZmxv
YXQgYWxwaGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZM
aW5lKCkuYWxwaGEoKSA6IGNvbnZlcnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBo
YSk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OwogICAg
IFdFQkNPUkVfRVhQT1JUIGZsb2F0IGxpZ2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFj
ZSByZW1haW5pbmcgdXNlcyB3aXRoIGx1bWluYW5jZS4KQEAgLTEzNiwxNCArMTM5LDE3IEBAIHB1
YmxpYzoKIAogICAgIENvbG9yIHNlbWFudGljQ29sb3IoKSBjb25zdDsKIAorICAgIC8vIFJldHVy
bnMgdGhlIHVuZGVybHlpbmcgY29sb3IgaWYgdGhlIGNvbG9yIHNwYWNlIGlzIHNSR0IgYW5kIHRo
ZSB2YWx1ZQorICAgIC8vIGlzIHJlcHJlc2VudGFibGUgYXMgU1JHQkE8dWludDhfdD4uCisgICAg
T3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHRyeUdldEFzU1JHQkFCeXRlcygpIGNvbnN0OworCiAj
aWYgUExBVEZPUk0oR1RLKQogICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsKICAgICBvcGVyYXRv
ciBHZGtSR0JBKCkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VY
UE9SVCBDb2xvcihDR0NvbG9yUmVmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9y
UmVmLCBPcHRpb25TZXQ8RmxhZ3M+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9y
UmVmLCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lO
KQpAQCAtMTY3LDQ0ICsxNzMsNjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0
byBkYXJrR3JlZW4gPSBTUkdCQTx1aW50OF90PiB7IDAsIDEyOCwgMCB9OwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYXV0byBvcmFuZ2UgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCAwIH07CiAK
LSAgICBib29sIGlzRXh0ZW5kZWQoKSBjb25zdDsKLSAgICBib29sIGlzSW5saW5lKCkgY29uc3Q7
Ci0KLSAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7Ci0gICAgU1JH
QkE8dWludDhfdD4gYXNJbmxpbmUoKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29s
b3IoY29uc3QgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29s
b3ImKTsKIAotICAgIC8vIEV4dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdpbGwgYWx3
YXlzIGJlIG5vbi1lcXVhbC4KKyAgICAvLyBPdXQgb2YgbGluZSBhbmQgaW5saW5lIGNvbG9ycyB3
aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3Jp
bmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7Ci0gICAgZnJp
ZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7
Ci0gICAgZnJpZW5kIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xv
cihjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0JsYWNr
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3Qg
Q29sb3ImKTsKKyAgICBmcmllbmQgYm9vbCBvdXRPZkxpbmVDb21wb25lbnRzc0VxdWFsKGNvbnN0
IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKKyAgICBmcmllbmQgYm9vbCBvdXRPZkxpbmVDb21wb25l
bnRzc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3Im
KTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+
IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29s
b3I+JiYsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOworICAgIGNsYXNzIE91dE9mTGluZUNvbXBv
bmVudHMgOiBwdWJsaWMgUmVmQ291bnRlZDxPdXRPZkxpbmVDb21wb25lbnRzPiB7CisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgUmVmPE91dE9mTGluZUNvbXBvbmVudHM+IGNyZWF0ZShDb2xv
ckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IE91dE9mTGluZUNvbXBvbmVudHMoY29tcG9uZW50cykpOworICAg
ICAgICB9CisKKyAgICAgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVu
dHNbM107IH0KKyAgICAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9jb21wb25lbnRzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBPdXRP
ZkxpbmVDb21wb25lbnRzKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50cykKKyAgICAg
ICAgICAgIDogbV9jb21wb25lbnRzKGNvbXBvbmVudHMpCisgICAgICAgIHsKKyAgICAgICAgfQog
Ci0gICAgZW51bSBjbGFzcyBGbGFnc0luY2x1ZGluZ1ByaXZhdGUgOiB1aW50MTZfdCB7Ci0gICAg
ICAgIFNlbWFudGljICAgICAgICAgICAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDx1aW50MTZf
dD4oRmxhZ3M6OlNlbWFudGljKSwKLSAgICAgICAgVXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRp
b24gICA9IHN0YXRpY19jYXN0PHVpbnQxNl90PihGbGFnczo6VXNlQ29sb3JGdW5jdGlvblNlcmlh
bGl6YXRpb24pLAorICAgICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsK
KyAgICB9OworICAgIENvbG9yKFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmLCBDb2xvclNwYWNl
LCBPcHRpb25TZXQ8RmxhZ3M+ID0geyB9KTsKKworICAgIGVudW0gY2xhc3MgRmxhZ3NJbmNsdWRp
bmdQcml2YXRlIDogdWludDhfdCB7CisgICAgICAgIFNlbWFudGljICAgICAgICAgICAgICAgICAg
ICAgICAgPSBzdGF0aWNfY2FzdDx1aW50OF90PihGbGFnczo6U2VtYW50aWMpLAorICAgICAgICBV
c2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbiAgID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oRmxh
Z3M6OlVzZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKSwKICAgICAgICAgVmFsaWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMiwKLSAgICAgICAgRXh0ZW5kZWQgICAgICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICAgICAgT3V0T2ZMaW5lICAgICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMywKICAgICAgICAgSGFzaFRhYmxlRW1wdHlWYWx1ZSAgICAgICAgICAg
ICA9IDEgPDwgNCwKICAgICAgICAgSGFzaFRhYmxlRGVsZXRlZFZhbHVlICAgICAgICAgICA9IDEg
PDwgNSwKICAgICB9OwogICAgIHN0YXRpYyBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRl
PiB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKSB7IHJldHVy
biBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPjo6ZnJvbVJhdyhmbGFncy50b1Jhdygp
KTsgfQogCiAgICAgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gZmxhZ3MoKSBjb25z
dDsKKyAgICBib29sIGlzT3V0T2ZMaW5lKCkgY29uc3Q7CisgICAgYm9vbCBpc0lubGluZSgpIGNv
bnN0OwogCiAgICAgdm9pZCBzZXRDb2xvcihTUkdCQTx1aW50OF90PiwgT3B0aW9uU2V0PEZsYWdz
SW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0pOwotICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8
RXh0ZW5kZWRDb2xvcj4mJiwgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0p
OworICAgIHZvaWQgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhSZWY8T3V0T2ZMaW5lQ29tcG9uZW50
cz4mJiwgQ29sb3JTcGFjZSwgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0p
OwogCisgICAgU1JHQkE8dWludDhfdD4gYXNJbmxpbmUoKSBjb25zdDsKICAgICBQYWNrZWRDb2xv
cjo6UkdCQSBhc1BhY2tlZElubGluZSgpIGNvbnN0OwotICAgIFJlZjxFeHRlbmRlZENvbG9yPiBh
c0V4dGVuZGVkUmVmKCkgY29uc3Q7CisKKyAgICBjb25zdCBPdXRPZkxpbmVDb21wb25lbnRzJiBh
c091dE9mTGluZSgpIGNvbnN0OworICAgIFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiBhc091dE9m
TGluZVJlZigpIGNvbnN0OwogCiAjaWYgQ1BVKEFERFJFU1M2NCkKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIG1heE51bWJlck9mQml0c0luUG9pbnRlciA9IDQ4OwpAQCAtMjEyLDE2ICsy
MzUsMjMgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJl
ck9mQml0c0luUG9pbnRlciA9IDMyOwogI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
NjRfdCBjb2xvclZhbHVlTWFzayA9ICgxVUxMIDw8IG1heE51bWJlck9mQml0c0luUG9pbnRlcikg
LSAxOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZmxhZ3NTaXplID0gc2l6ZW9mKEZs
YWdzSW5jbHVkaW5nUHJpdmF0ZSkgKiA4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3Qg
ZmxhZ3NTaGlmdCA9IG1heE51bWJlck9mQml0c0luUG9pbnRlcjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQ2NF90IGNvbG9yU3BhY2VTaXplID0gc2l6ZW9mKENvbG9yU3BhY2UpICogODsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGNvbG9yU3BhY2VTaGlmdCA9IGZsYWdzU2hpZnQg
KyBmbGFnc1NpemU7CisgICAgc3RhdGljX2Fzc2VydChmbGFnc1NpemUgKyBjb2xvclNwYWNlU2l6
ZSArIG1heE51bWJlck9mQml0c0luUG9pbnRlciA8PSA2NCk7CiAKICAgICBzdGF0aWMgdWludDY0
X3QgZW5jb2RlZEZsYWdzKE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+KTsKKyAgICBz
dGF0aWMgdWludDY0X3QgZW5jb2RlZENvbG9yU3BhY2UoQ29sb3JTcGFjZSk7CiAgICAgc3RhdGlj
IHVpbnQ2NF90IGVuY29kZWRJbmxpbmVDb2xvcihTUkdCQTx1aW50OF90Pik7CiAgICAgc3RhdGlj
IHVpbnQ2NF90IGVuY29kZWRQYWNrZWRJbmxpbmVDb2xvcihQYWNrZWRDb2xvcjo6UkdCQSk7Ci0g
ICAgc3RhdGljIHVpbnQ2NF90IGVuY29kZWRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9y
PiYmKTsKKyAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZE91dE9mTGluZUNvbXBvbmVudHMoUmVm
PE91dE9mTGluZUNvbXBvbmVudHM+JiYpOwogCiAgICAgc3RhdGljIE9wdGlvblNldDxGbGFnc0lu
Y2x1ZGluZ1ByaXZhdGU+IGRlY29kZWRGbGFncyh1aW50NjRfdCk7CisgICAgc3RhdGljIENvbG9y
U3BhY2UgZGVjb2RlZENvbG9yU3BhY2UodWludDY0X3QpOwogICAgIHN0YXRpYyBTUkdCQTx1aW50
OF90PiBkZWNvZGVkSW5saW5lQ29sb3IodWludDY0X3QpOwogICAgIHN0YXRpYyBQYWNrZWRDb2xv
cjo6UkdCQSBkZWNvZGVkUGFja2VkSW5saW5lQ29sb3IodWludDY0X3QpOwotICAgIHN0YXRpYyBF
eHRlbmRlZENvbG9yJiBkZWNvZGVkRXh0ZW5kZWRDb2xvcih1aW50NjRfdCk7CisgICAgc3RhdGlj
IE91dE9mTGluZUNvbXBvbmVudHMmIGRlY29kZWRPdXRPZkxpbmVDb21wb25lbnRzKHVpbnQ2NF90
KTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgaW52YWxpZENvbG9yQW5kRmxhZ3Mg
PSAwOwogICAgIHVpbnQ2NF90IG1fY29sb3JBbmRGbGFncyB7IGludmFsaWRDb2xvckFuZEZsYWdz
IH07CkBAIC0yMzAsOSArMjYwLDkgQEAgcHJpdmF0ZToKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
b2xvciYsIGNvbnN0IENvbG9yJik7CiBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImLCBjb25z
dCBDb2xvciYpOwogCi0vLyBPbmUgb3IgYm90aCBtdXN0IGJlIGV4dGVuZGVkIGNvbG9ycy4KLWJv
b2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci1ib29s
IGV4dGVuZGVkQ29sb3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOworLy8gT25lIG9yIGJvdGggbXVzdCBiZSBvdXQgb2YgbGluZSBjb2xvcnMu
Citib29sIG91dE9mTGluZUNvbXBvbmVudHNzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xv
ciYpOworYm9vbCBvdXRPZkxpbmVDb21wb25lbnRzc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9y
KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAogI2lmIFVTRShDRykKIFdFQkNPUkVfRVhQ
T1JUIENHQ29sb3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMjQyLDggKzI3
Miw4IEBAIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3IKIAogaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7Ci0gICAg
aWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gZXh0
ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKKyAgICBpZiAoYS5pc091dE9mTGluZSgpIHx8IGIuaXNP
dXRPZkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUNvbXBvbmVudHNzRXF1YWwoYSwg
Yik7CiAgICAgcmV0dXJuIGEubV9jb2xvckFuZEZsYWdzID09IGIubV9jb2xvckFuZEZsYWdzOwog
fQogCkBAIC0yNTIsMzEgKzI4MiwzMSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENv
bG9yJiBhLCBjCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotaW5saW5lIGJvb2wgZXh0ZW5k
ZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCitpbmxpbmUgYm9v
bCBvdXRPZkxpbmVDb21wb25lbnRzc0VxdWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
YikKIHsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCi0gICAgICAg
IHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKSAmJiBhLmZsYWdzKCkgPT0g
Yi5mbGFncygpOworICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkgJiYgYi5pc091dE9mTGluZSgpKQor
ICAgICAgICByZXR1cm4gYS5hc091dE9mTGluZSgpLmNvbXBvbmVudHMoKSA9PSBiLmFzT3V0T2ZM
aW5lKCkuY29tcG9uZW50cygpICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYm
IGEuZmxhZ3MoKSA9PSBiLmZsYWdzKCk7CiAKLSAgICBBU1NFUlQoYS5pc0V4dGVuZGVkKCkgfHwg
Yi5pc0V4dGVuZGVkKCkpOworICAgIEFTU0VSVChhLmlzT3V0T2ZMaW5lKCkgfHwgYi5pc091dE9m
TGluZSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBib29sIGV4dGVuZGVkQ29s
b3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9y
JiBiKQoraW5saW5lIGJvb2wgb3V0T2ZMaW5lQ29tcG9uZW50c3NFcXVhbElnbm9yaW5nU2VtYW50
aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7Ci0gICAgaWYgKGEuaXNF
eHRlbmRlZCgpICYmIGIuaXNFeHRlbmRlZCgpKSB7CisgICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAm
JiBiLmlzT3V0T2ZMaW5lKCkpIHsKICAgICAgICAgYXV0byBhRmxhZ3MgPSBhLmZsYWdzKCkgLSBD
b2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1hbnRpYzsKICAgICAgICAgYXV0byBiRmxh
Z3MgPSBiLmZsYWdzKCkgLSBDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1hbnRpYzsK
LSAgICAgICAgcmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpICYmIGFGbGFn
cyA9PSBiRmxhZ3M7CisgICAgICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygp
ID09IGIuYXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5j
b2xvclNwYWNlKCkgJiYgYUZsYWdzID09IGJGbGFnczsKICAgICB9CiAKLSAgICBBU1NFUlQoYS5p
c0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpOworICAgIEFTU0VSVChhLmlzT3V0T2ZMaW5l
KCkgfHwgYi5pc091dE9mTGluZSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGlubGluZSBi
b29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xv
ciYgYikKIHsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGEsIGIp
OworICAgIGlmIChhLmlzT3V0T2ZMaW5lKCkgfHwgYi5pc091dE9mTGluZSgpKQorICAgICAgICBy
ZXR1cm4gb3V0T2ZMaW5lQ29tcG9uZW50c3NFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihhLCBi
KTsKIAogICAgIGF1dG8gYUZsYWdzID0gYS5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5n
UHJpdmF0ZTo6U2VtYW50aWM7CiAgICAgYXV0byBiRmxhZ3MgPSBiLmZsYWdzKCkgLSBDb2xvcjo6
RmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1hbnRpYzsKQEAgLTI5NCwyNyArMzI0LDIyIEBAIGlu
bGluZSBDb2xvcjo6Q29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDgKICAgICAgICAgc2V0Q29sb3Io
KmNvbG9yLCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCi1pbmxpbmUgQ29s
b3I6OkNvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQotewotICAgIHNldEV4dGVuZGVkQ29s
b3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UpLCB0b0ZsYWdz
SW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5
cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlw
ZTxDb2xvclR5cGUsIGZsb2F0Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5
cGUmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldEV4dGVuZGVkQ29s
b3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbG9yKSwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUo
ZmxhZ3MpKTsKKyAgICBzZXRPdXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGluZUNvbXBvbmVudHM6
OmNyZWF0ZShhc0NvbG9yQ29tcG9uZW50cyhjb2xvcikpLCBDb2xvclNwYWNlRm9yPENvbG9yVHlw
ZT4sIHRvRmxhZ3NJbmNsdWRpbmdQcml2YXRlKGZsYWdzKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIENvbG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbG9yVHlwZVdpdGhD
b21wb25lbnRUeXBlPENvbG9yVHlwZSwgZmxvYXQ+Pio+CiBpbmxpbmUgQ29sb3I6OkNvbG9yKGNv
bnN0IE9wdGlvbmFsPENvbG9yVHlwZT4mIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQog
ewogICAgIGlmIChjb2xvcikKLSAgICAgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9y
OjpjcmVhdGUoKmNvbG9yKSwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICAg
ICAgc2V0T3V0T2ZMaW5lQ29tcG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXND
b2xvckNvbXBvbmVudHMoKmNvbG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFn
c0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKIH0KIAotaW5saW5lIENvbG9yOjpDb2xvcihSZWY8
RXh0ZW5kZWRDb2xvcj4mJiBleHRlbmRlZENvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQor
aW5saW5lIENvbG9yOjpDb2xvcihSZWY8T3V0T2ZMaW5lQ29tcG9uZW50cz4mJiBvdXRPZkxpbmVD
b21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFncz4gZmxhZ3Mp
CiB7Ci0gICAgc2V0RXh0ZW5kZWRDb2xvcihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpLCB0b0ZsYWdz
SW5jbHVkaW5nUHJpdmF0ZShmbGFncykpOworICAgIHNldE91dE9mTGluZUNvbXBvbmVudHMoV1RG
TW92ZShvdXRPZkxpbmVDb21wb25lbnRzKSwgY29sb3JTcGFjZSwgdG9GbGFnc0luY2x1ZGluZ1By
aXZhdGUoZmxhZ3MpKTsKIH0KIAogaW5saW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJsZUVt
cHR5VmFsdWVUeXBlKQpAQCAtMzM0LDE0ICszNTksMTQgQEAgaW5saW5lIGJvb2wgQ29sb3I6Omlz
SGFzaFRhYmxlRGVsZXRlZFZhbAogCiBpbmxpbmUgQ29sb3I6On5Db2xvcigpCiB7Ci0gICAgaWYg
KGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgYXNFeHRlbmRlZCgpLmRlcmVmKCk7CisgICAgaWYgKGlz
T3V0T2ZMaW5lKCkpCisgICAgICAgIGFzT3V0T2ZMaW5lKCkuZGVyZWYoKTsKIH0KIAogaW5saW5l
IHVuc2lnbmVkIENvbG9yOjpoYXNoKCkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQot
ICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSwgYXNF
eHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgZmxhZ3MoKS50b1JhdygpKTsKKyAgICBpZiAoaXNPdXRP
ZkxpbmUoKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzT3V0T2ZMaW5lKCkuY29tcG9u
ZW50cygpLCBjb2xvclNwYWNlKCksIGZsYWdzKCkudG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1
dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUsIGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAg
LTM2MCwxMCArMzg1LDE1IEBAIGlubGluZSBib29sIENvbG9yOjp1c2VzQ29sb3JGdW5jdGlvblNl
cmkKICAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlVz
ZUNvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKTsKIH0KIAoraW5saW5lIENvbG9yU3BhY2UgQ29s
b3I6OmNvbG9yU3BhY2UoKSBjb25zdAoreworICAgIHJldHVybiBkZWNvZGVkQ29sb3JTcGFjZSht
X2NvbG9yQW5kRmxhZ3MpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlw
ZShhdXRvKSBDb2xvcjo6Y2FsbE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQo
KS5jYWxsT25VbmRlcmx5aW5nVHlwZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwor
ICAgIGlmIChpc091dE9mTGluZSgpKQorICAgICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUo
YXNPdXRPZkxpbmUoKS5jb21wb25lbnRzKCksIGNvbG9yU3BhY2UoKSwgc3RkOjpmb3J3YXJkPEZ1
bmN0b3I+KGZ1bmN0b3IpKTsKICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1
bmN0b3I+KGZ1bmN0b3IpLCBhc0lubGluZSgpKTsKIH0KIApAQCAtMzk5LDI2ICs0MjksMjYgQEAg
aW5saW5lIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcgogICAgIHJldHVybiBkZWNv
ZGVkRmxhZ3MobV9jb2xvckFuZEZsYWdzKTsKIH0KIAotaW5saW5lIGJvb2wgQ29sb3I6OmlzRXh0
ZW5kZWQoKSBjb25zdAoraW5saW5lIGJvb2wgQ29sb3I6OmlzT3V0T2ZMaW5lKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OkV4dGVu
ZGVkKTsKKyAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6
Ok91dE9mTGluZSk7CiB9CiAKIGlubGluZSBib29sIENvbG9yOjppc0lubGluZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuICFmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6RXh0
ZW5kZWQpOworICAgIHJldHVybiAhZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZh
dGU6Ok91dE9mTGluZSk7CiB9CiAKLWlubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6
YXNFeHRlbmRlZCgpIGNvbnN0CitpbmxpbmUgY29uc3QgQ29sb3I6Ok91dE9mTGluZUNvbXBvbmVu
dHMmIENvbG9yOjphc091dE9mTGluZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzRXh0ZW5kZWQo
KSk7Ci0gICAgcmV0dXJuIGRlY29kZWRFeHRlbmRlZENvbG9yKG1fY29sb3JBbmRGbGFncyk7Cisg
ICAgQVNTRVJUKGlzT3V0T2ZMaW5lKCkpOworICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29t
cG9uZW50cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCi1pbmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+
IENvbG9yOjphc0V4dGVuZGVkUmVmKCkgY29uc3QKK2lubGluZSBSZWY8Q29sb3I6Ok91dE9mTGlu
ZUNvbXBvbmVudHM+IENvbG9yOjphc091dE9mTGluZVJlZigpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KGlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIGRlY29kZWRFeHRlbmRlZENvbG9yKG1fY29sb3JB
bmRGbGFncyk7CisgICAgQVNTRVJUKGlzT3V0T2ZMaW5lKCkpOworICAgIHJldHVybiBkZWNvZGVk
T3V0T2ZMaW5lQ29tcG9uZW50cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCiBpbmxpbmUgU1JHQkE8
dWludDhfdD4gQ29sb3I6OmFzSW5saW5lKCkgY29uc3QKQEAgLTQzMyw5ICs0NjMsMjEgQEAgaW5s
aW5lIFBhY2tlZENvbG9yOjpSR0JBIENvbG9yOjphc1BhY2tlZAogICAgIHJldHVybiBkZWNvZGVk
UGFja2VkSW5saW5lQ29sb3IobV9jb2xvckFuZEZsYWdzKTsKIH0KIAoraW5saW5lIE9wdGlvbmFs
PFNSR0JBPHVpbnQ4X3Q+PiBDb2xvcjo6dHJ5R2V0QXNTUkdCQUJ5dGVzKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgcmV0dXJuIGFzSW5saW5lKCk7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKK30KKwogaW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkRmxhZ3Mo
T3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihmbGFncy50b1JhdygpKSA8PCBtYXhOdW1iZXJPZkJpdHNJblBv
aW50ZXI7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90PihmbGFncy50b1JhdygpKSA8
PCBmbGFnc1NoaWZ0OworfQorCitpbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRDb2xvclNw
YWNlKENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGNvbG9yU3BhY2UpIDw8IGNvbG9yU3BhY2VTaGlmdDsKIH0KIAogaW5saW5lIHVpbnQ2
NF90IENvbG9yOjplbmNvZGVkSW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCkBAIC00
NDgsMTggKzQ5MCwyMyBAQCBpbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRQYWNrZWRJbmxp
CiAgICAgcmV0dXJuIGNvbG9yLnZhbHVlOwogfQogCi1pbmxpbmUgdWludDY0X3QgQ29sb3I6OmVu
Y29kZWRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCitp
bmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRP
ZkxpbmVDb21wb25lbnRzPiYmIG91dE9mTGluZUNvbXBvbmVudHMpCiB7CiAjaWYgQ1BVKEFERFJF
U1M2NCkKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90PigmZXh0ZW5kZWRDb2xvci5s
ZWFrUmVmKCkpOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KCZvdXRPZkxpbmVD
b21wb25lbnRzLmxlYWtSZWYoKSk7CiAjZWxzZQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWlu
dDMyX3Q+KCZleHRlbmRlZENvbG9yLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oJm91dE9mTGluZUNvbXBvbmVudHMubGVha1JlZigpKTsKICNlbmRpZgogfQog
CiBpbmxpbmUgT3B0aW9uU2V0PENvbG9yOjpGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IENvbG9yOjpk
ZWNvZGVkRmxhZ3ModWludDY0X3QgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIE9wdGlvblNldDxDb2xv
cjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlPjo6ZnJvbVJhdyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dmFsdWUgPj4gbWF4TnVtYmVyT2ZCaXRzSW5Qb2ludGVyKSk7CisgICAgcmV0dXJuIE9wdGlvblNl
dDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlPjo6ZnJvbVJhdyhzdGF0aWNfY2FzdDx1aW50
OF90Pih2YWx1ZSA+PiBmbGFnc1NoaWZ0KSk7Cit9CisKK2lubGluZSBDb2xvclNwYWNlIENvbG9y
OjpkZWNvZGVkQ29sb3JTcGFjZSh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29sb3JTcGFjZT4oc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gY29sb3JTcGFj
ZVNoaWZ0KSk7CiB9CiAKIGlubGluZSBTUkdCQTx1aW50OF90PiBDb2xvcjo6ZGVjb2RlZElubGlu
ZUNvbG9yKHVpbnQ2NF90IHZhbHVlKQpAQCAtNDcyLDI3ICs1MTksMjcgQEAgaW5saW5lIFBhY2tl
ZENvbG9yOjpSR0JBIENvbG9yOjpkZWNvZGVkUAogICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdC
QSB7IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSAmIGNvbG9yVmFsdWVNYXNrKSB9OwogfQog
Ci1pbmxpbmUgRXh0ZW5kZWRDb2xvciYgQ29sb3I6OmRlY29kZWRFeHRlbmRlZENvbG9yKHVpbnQ2
NF90IHZhbHVlKQoraW5saW5lIENvbG9yOjpPdXRPZkxpbmVDb21wb25lbnRzJiBDb2xvcjo6ZGVj
b2RlZE91dE9mTGluZUNvbXBvbmVudHModWludDY0X3QgdmFsdWUpCiB7CiAjaWYgQ1BVKEFERFJF
U1M2NCkKLSAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxFeHRlbmRlZENvbG9yKj4odmFsdWUgJiBj
b2xvclZhbHVlTWFzayk7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8T3V0T2ZMaW5lQ29tcG9u
ZW50cyo+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spOwogI2Vsc2UKLSAgICByZXR1cm4gKmJpdHdp
c2VfY2FzdDxFeHRlbmRlZENvbG9yKj4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlICYgY29s
b3JWYWx1ZU1hc2spKTsKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxPdXRPZkxpbmVDb21wb25l
bnRzKj4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spKTsKICNl
bmRpZgogfQogCiBpbmxpbmUgdm9pZCBDb2xvcjo6c2V0Q29sb3IoU1JHQkE8dWludDhfdD4gY29s
b3IsIE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQogewogICAgIGZsYWdz
LmFkZCh7IEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6VmFsaWQgfSk7Ci0gICAgbV9jb2xvckFuZEZs
YWdzID0gZW5jb2RlZElubGluZUNvbG9yKGNvbG9yKSB8IGVuY29kZWRGbGFncyhmbGFncyk7Cisg
ICAgbV9jb2xvckFuZEZsYWdzID0gZW5jb2RlZElubGluZUNvbG9yKGNvbG9yKSB8IGVuY29kZWRD
b2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpIHwgZW5jb2RlZEZsYWdzKGZsYWdzKTsKICAgICBB
U1NFUlQoaXNJbmxpbmUoKSk7CiB9CiAKLWlubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQ
cml2YXRlPiBmbGFncykKK2lubGluZSB2b2lkIENvbG9yOjpzZXRPdXRPZkxpbmVDb21wb25lbnRz
KFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQogewotICAgIGZsYWdzLmFk
ZCh7IEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6VmFsaWQsIEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6
RXh0ZW5kZWQgfSk7Ci0gICAgbV9jb2xvckFuZEZsYWdzID0gZW5jb2RlZEV4dGVuZGVkQ29sb3Io
V1RGTW92ZShjb2xvcikpIHwgZW5jb2RlZEZsYWdzKGZsYWdzKTsKLSAgICBBU1NFUlQoaXNFeHRl
bmRlZCgpKTsKKyAgICBmbGFncy5hZGQoeyBGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlZhbGlkLCBG
bGFnc0luY2x1ZGluZ1ByaXZhdGU6Ok91dE9mTGluZSB9KTsKKyAgICBtX2NvbG9yQW5kRmxhZ3Mg
PSBlbmNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50cyhXVEZNb3ZlKGNvbG9yKSkgfCBlbmNvZGVkQ29s
b3JTcGFjZShjb2xvclNwYWNlKSB8IGVuY29kZWRGbGFncyhmbGFncyk7CisgICAgQVNTRVJUKGlz
T3V0T2ZMaW5lKCkpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIENvbG9yOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKQEAgLTUwNSwxNyArNTUyLDE3IEBAIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgQ29sb3I6OmVuY28KIAogICAgIGVuY29kZXIgPDwgZmxh
Z3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlNlbWFudGljKTsKICAgICBlbmNv
ZGVyIDw8IGZsYWdzKCkuY29udGFpbnMoRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpVc2VDb2xvckZ1
bmN0aW9uU2VyaWFsaXphdGlvbik7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgCisg
ICAgaWYgKGlzT3V0T2ZMaW5lKCkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAg
ICBlbmNvZGVyIDw8IGNvbG9yU3BhY2UoKTsKIAotICAgICAgICBhdXRvJiBleHRlbmRlZENvbG9y
ID0gYXNFeHRlbmRlZCgpOwotICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBleHRl
bmRlZENvbG9yLmNvbXBvbmVudHMoKTsKKyAgICAgICAgYXV0byYgb3V0T2ZMaW5lQ29tcG9uZW50
cyA9IGFzT3V0T2ZMaW5lKCk7CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IG91
dE9mTGluZUNvbXBvbmVudHMuY29tcG9uZW50cygpOwogICAgICAgICBlbmNvZGVyIDw8IGMxOwog
ICAgICAgICBlbmNvZGVyIDw8IGMyOwogICAgICAgICBlbmNvZGVyIDw8IGMzOwogICAgICAgICBl
bmNvZGVyIDw8IGFscGhhOwotICAgICAgICBlbmNvZGVyIDw8IGV4dGVuZGVkQ29sb3IuY29sb3JT
cGFjZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGVuY29kZXIgPDwgZmFsc2U7CkBA
IC01NDgsMjcgKzU5NSwyNyBAQCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxDb2xv
cj4gCiAgICAgaWYgKHVzZXNDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKICAgICAgICAgZmxh
Z3MuYWRkKEZsYWdzOjpVc2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CiAKLSAgICBib29s
IGlzRXh0ZW5kZWQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0V4dGVuZGVkKSkKKyAgICBi
b29sIGlzT3V0T2ZMaW5lOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNPdXRPZkxpbmUpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgaWYgKGlzRXh0ZW5kZWQpIHsKLSAg
ICAgICAgZmxvYXQgYzE7Ci0gICAgICAgIGZsb2F0IGMyOwotICAgICAgICBmbG9hdCBjMzsKLSAg
ICAgICAgZmxvYXQgYWxwaGE7CisgICAgaWYgKGlzT3V0T2ZMaW5lKSB7CiAgICAgICAgIENvbG9y
U3BhY2UgY29sb3JTcGFjZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNl
KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGZsb2F0IGMxOwog
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGMxKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIGZsb2F0IGMyOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGMyKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGZsb2F0IGMz
OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGMzKSkKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIGZsb2F0IGFscGhhOwogICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGFscGhhKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUo
eyBjMSwgYzIsIGMzLCBhbHBoYSB9LCBjb2xvclNwYWNlKSwgZmxhZ3MgfTsKKyAgICAgICAgcmV0
dXJuIENvbG9yIHsgT3V0T2ZMaW5lQ29tcG9uZW50czo6Y3JlYXRlKHsgYzEsIGMyLCBjMywgYWxw
aGEgfSksIGNvbG9yU3BhY2UsIGZsYWdzIH07CiAgICAgfQogCiAgICAgdWludDMyX3QgdmFsdWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yU2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDI3Mzc0MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKIAogI2lu
Y2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbmRlZENvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5oCShyZXZpc2lvbiAyNzM3NDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJD
b2xvckNvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiQ29s
b3JUeXBlcy5oIgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRXh0ZW5kZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKLXB1
YmxpYzoKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBSZWY8RXh0ZW5k
ZWRDb2xvcj4gY3JlYXRlKGNvbnN0IENvbG9yVHlwZSYpOwotICAgIHN0YXRpYyBSZWY8RXh0ZW5k
ZWRDb2xvcj4gY3JlYXRlKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOwotICAg
IAotICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9Ci0K
LSAgICBjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb21wb25lbnRzOyB9Ci0gICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xvclNwYWNlOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiBkZWNsdHlwZShhdXRvKSBjYWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIEV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiwgQ29s
b3JTcGFjZSk7Ci0KLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsKLSAg
ICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgRXh0ZW5kZWRDb2xvciYgYSwgY29uc3QgRXh0ZW5kZWRDb2xvciYgYikKLXsKLSAgICBy
ZXR1cm4gYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYS5jb21wb25lbnRzKCkg
PT0gYi5jb21wb25lbnRzKCk7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRXh0
ZW5kZWRDb2xvciYgYSwgY29uc3QgRXh0ZW5kZWRDb2xvciYgYikKLXsKLSAgICByZXR1cm4gIShh
ID09IGIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBSZWY8RXh0
ZW5kZWRDb2xvcj4gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3Ip
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihhc0NvbG9yQ29tcG9u
ZW50cyhjb2xvciksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPikpOwotfQotCi1pbmxpbmUgUmVm
PEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShDb2xvckNvbXBvbmVudHM8Zmxv
YXQ+IGNvbXBvbmVudHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBFeHRlbmRlZENvbG9yKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UpKTsKLX0KLQot
aW5saW5lIEV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0
PiBjb21wb25lbnRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi0gICAgOiBtX2NvbXBvbmVudHMo
Y29tcG9uZW50cykKLSAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQotewotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBFeHRlbmRlZENvbG9yOjpjYWxs
T25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYgZnVuY3RvcikgY29uc3QKLXsKLSAgICByZXR1cm4g
Y2FsbFdpdGhDb2xvclR5cGUobV9jb21wb25lbnRzLCBtX2NvbG9yU3BhY2UsIHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNzM3NDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsMTEgKzg0LDYgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBy
b3VuZEFuZAogICAgIHJldHVybiBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNSR0JBPGZs
b2F0PiB7IHIsIGcsIGIsIGEgfSk7CiB9CiAKLUNvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9y
KQotICAgIDogQ29sb3Iocm91bmRBbmRDbGFtcFRvU1JHQkFMb3NzeShjb2xvcikpCi17Ci19Ci0K
IENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQog
ICAgIDogQ29sb3Iocm91bmRBbmRDbGFtcFRvU1JHQkFMb3NzeShjb2xvciksIGZsYWdzKQogewpA
QCAtMTI4LDggKzEyMyw4IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENv
bG8KIAogQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBpZiAoY29sb3IuaXNJbmxpbmUoKSkgewotICAgICAgICBzd2l0Y2ggKFBhY2tlZENvbG9yOjpS
R0JBIHsgY29sb3IuYXNJbmxpbmUoKSB9LnZhbHVlKSB7CisgICAgaWYgKGF1dG8gc3JnYiA9IGNv
bG9yLnRyeUdldEFzU1JHQkFCeXRlcygpKSB7CisgICAgICAgIHN3aXRjaCAoUGFja2VkQ29sb3I6
OlJHQkEgeyAqc3JnYiB9LnZhbHVlKSB7CiAgICAgICAgIGNhc2UgUGFja2VkQ29sb3I6OlJHQkEg
eyBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMg
Q0dDb2xvclJlZiB0cmFuc3BhcmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CiAgICAg
ICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRDR0NvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHJldmlzaW9uIDI3
Mzc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxNCArNTYsMTAgQEAgdm9pZCBHcmFkaWVudDo6Y3Jl
YXRlQ0dHcmFkaWVudCgpCiAKICAgICBib29sIGhhc0V4dGVuZGVkQ29sb3JzID0gZmFsc2U7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBzdG9wIDogbV9zdG9wcykgewotCiAgICAgICAgIC8vIElmIGFs
bCB0aGUgc3RvcHMgYXJlIHNSR0IsIGl0IGlzIGZhc3RlciB0byBjcmVhdGUgYSBncmFkaWVudCB1
c2luZwotICAgICAgICAvLyBjb21wb25lbnRzIHRoYW4gQ0dDb2xvcnMuCi0gICAgICAgIC8vIEZJ
WE1FOiBSYXRoZXIgdGhhbiBqdXN0IGNoZWNrIGZvciBleHRlbmRlZCBjb2xvcnMsIHdlIHNob3Vs
ZCBjaGVjayB0aGUgYWN0dWFsCi0gICAgICAgIC8vIGNvbG9yIHNwYWNlLCBhbmQgd2hldGhlciBv
ciBub3QgdGhlIGNvbXBvbmVudHMgYXJlIG91dHNpZGUgWzAtMV0uCi0gICAgICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS8zMjkyNjYwNj4KKyAgICAgICAgLy8gY29tcG9uZW50cyB0aGFuIENHQ29sb3Jz
LiA8cmRhcjovL3Byb2JsZW0vMzI5MjY2MDY+CiAKLSAgICAgICAgaWYgKHN0b3AuY29sb3IuaXNF
eHRlbmRlZCgpKQorICAgICAgICBpZiAoc3RvcC5jb2xvci5jb2xvclNwYWNlKCkgIT0gQ29sb3JT
cGFjZTo6U1JHQikKICAgICAgICAgICAgIGhhc0V4dGVuZGVkQ29sb3JzID0gdHJ1ZTsKIAogICAg
ICAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IHN0b3AuY29sb3IuY29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAJKHJldmlzaW9uIDI3Mzc0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0
LDcgKzEyNCw3IEBAIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWQKICAg
ICBSRUxFQVNFX0FTU0VSVChtX2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KTsK
ICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKICAg
ICAgICAgbV9vZmZzZXRzW2ldID0gZ3JhZGllbnQuc3RvcHMoKVtpXS5vZmZzZXQ7Ci0gICAgICAg
IG1fY29sb3JzW2ldID0gZ3JhZGllbnQuc3RvcHMoKVtpXS5jb2xvci5hc0lubGluZSgpOworICAg
ICAgICBtX2NvbG9yc1tpXSA9ICpncmFkaWVudC5zdG9wcygpW2ldLmNvbG9yLnRyeUdldEFzU1JH
QkFCeXRlcygpOwogICAgIH0KIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIGJvb2wgU2V0SW5saW5l
RmlsbEdyYWRpZW50Ojppc0lubGluZShjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Zm9yIChhdXRvJiBjb2xvclN0b3AgOiBncmFkaWVudC5zdG9wcygpKSB7Ci0gICAgICAgIGlmICgh
Y29sb3JTdG9wLmNvbG9yLmlzSW5saW5lKCkpCisgICAgICAgIGlmICghY29sb3JTdG9wLmNvbG9y
LnRyeUdldEFzU1JHQkFCeXRlcygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkocmV2aXNp
b24gMjczNzQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMCArNzIs
MTAgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZwogICAgIGlmIChj
aGFuZ2VGbGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdzKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5z
dHJva2VDb2xvci5pc0lubGluZSgpKQorICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUu
c3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci5pc0lubGluZSgpKQor
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0
ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpCkBAIC0xMDQsMTMg
KzEwNCwxMyBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uCiAgICAg
fQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4o
Y2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpOworICAgICAgICBhcHBlbmQ8
U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0
QXNTUkdCQUJ5dGVzKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQogICAgICAgICBhcHBlbmQ8U2V0
U3Ryb2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAogICAg
IGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlKSkKLSAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oY2hhbmdlcy5tX3N0
YXRlLmZpbGxDb2xvci5hc0lubGluZSgpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxD
b2xvcj4oKmNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwog
CiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
R3JhZGllbnRDaGFuZ2UpKQogICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50Pigq
Y2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudCwgY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI3Mzc0MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTEzLDggKzExMyw4IEBAIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICoK
IAogTlNDb2xvciAqbnNDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9y
LmlzSW5saW5lKCkpIHsKLSAgICAgICAgc3dpdGNoIChQYWNrZWRDb2xvcjo6UkdCQSB7IGNvbG9y
LmFzSW5saW5lKCkgfS52YWx1ZSkgeworICAgIGlmIChhdXRvIHNyZ2IgPSBjb2xvci50cnlHZXRB
c1NSR0JBQnl0ZXMoKSkgeworICAgICAgICBzd2l0Y2ggKFBhY2tlZENvbG9yOjpSR0JBIHsgKnNy
Z2IgfS52YWx1ZSkgewogICAgICAgICBjYXNlIFBhY2tlZENvbG9yOjpSR0JBIHsgQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2sgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJldGFpblB0cjxOU0NvbG9yPj4gY2xlYXJDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aFNS
R0JSZWQ6MCBncmVlbjowIGJsdWU6MCBhbHBoYTowXTsKICAgICAgICAgICAgIHJldHVybiBjbGVh
ckNvbG9yLmdldCgpLmdldCgpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjczNzQxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDMtMDEgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSB0aGUgc2l6ZSBvZiBleHRlbmRlZCBj
b2xvcnMgYnkgc3RvcmluZyB0aGUgY29sb3Igc3BhY2UgaW4gZnJlZSBiaXRzIG9mIHRoZSBvd25p
bmcgQ29sb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMjU4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMuY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6IFJlbW92ZWQuCisgICAgICAgIFVw
ZGF0ZSB0ZXN0cyB0byBhY2NvdW50IGZvciByZW1vdmFsIG9mIHRoZSBFeHRlbmRlZENvbG9yIGNs
YXNzLgorICAgICAgICBNZXJnZSBFeHRlbmRlZENvbG9yVGVzdHMuY3BwIHRoYXQgc3RpbGwgbWFr
ZSBzZW5zZSBpbnRvIENvbG9yVGVzdHMuY3BwCisKIDIwMjEtMDMtMDIgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2MzA5
NCk6IFtHVEtdW1dQRV0gQVBJIHRlc3QgL3dlYmtpdC9XZWJLaXRXZWJDb250ZXh0L2xhbmd1YWdl
cyBpcyBmYWlsaW5nCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDI3Mzc0MSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTE3MCw3ICsxNzAsNiBAQCBpZiAoRU5BQkxFX1dFQkNPUkUpCiAgICAgICAgIFRl
c3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKICAgICAgICAgVGVzdHMvV2ViQ29yZS9Db21wbGV4
VGV4dENvbnRyb2xsZXIuY3BwCiAgICAgICAgIFRlc3RzL1dlYkNvcmUvQ29udGV4dE1lbnVBY3Rp
b24uY3BwCi0gICAgICAgIFRlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAogICAg
ICAgICBUZXN0cy9XZWJDb3JlL0ZpbGVNb25pdG9yLmNwcAogICAgICAgICBUZXN0cy9XZWJDb3Jl
L0Zsb2F0UG9pbnRUZXN0cy5jcHAKICAgICAgICAgVGVzdHMvV2ViQ29yZS9GbG9hdFJlY3RUZXN0
cy5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzM3NDEpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw2IEBACiAJCTMxMjhBODEzMjM3NjNGQUMw
MEQ5MEQ0MCAvKiBsaW5rLXdpdGgtaW1hZ2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTI4QTgxMjIzNzYzRjBCMDBEOTBENDAgLyog
bGluay13aXRoLWltYWdlLmh0bWwgKi87IH07CiAJCTMxMjhBODE1MjM3NjQxMzMwMEQ5MEQ0MCAv
KiBpbWFnZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMjhBODE0MjM3NjQwRkQwMEQ5MEQ0MCAvKiBpbWFnZS5odG1sICovOyB9Owog
CQkzMTNDM0EwMjIxRTU2N0MzMDBEQkE4NkUgLyogU3lzdGVtUHJldmlld0Jsb2JOYW1pbmcuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTNDM0EwMTIxRTU2NzdBMDBEQkE4NkUgLyogU3lzdGVtUHJldmlld0Jsb2JOYW1pbmcuaHRtbCAq
LzsgfTsKLQkJMzE1MTE4MTAxREIxQUU0MDAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JUZXN0cy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTUxMTgw
RjFEQjFBREQ1MDAxNzYzMDQgLyogRXh0ZW5kZWRDb2xvclRlc3RzLmNwcCAqLzsgfTsKIAkJMzFC
NzZFNDMyMzI5OEUyQzAwN0ZFRDJDIC8qIFN5c3RlbVByZXZpZXcubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUI3NkU0MjIzMjk4RTJCMDA3RkVEMkMg
LyogU3lzdGVtUHJldmlldy5tbSAqLzsgfTsKIAkJMzFCNzZFNDUyMzI5OUJEQzAwN0ZFRDJDIC8q
IHN5c3RlbS1wcmV2aWV3LXRyaWdnZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUI3NkU0NDIzMjk5QkEzMDA3RkVEMkMgLyogc3lz
dGVtLXByZXZpZXctdHJpZ2dlci5odG1sICovOyB9OwogCQkzMUU5QkRBMTI0N0Y0QzYyMDAyRTUx
QTIgLyogV2ViR0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFOUJEQTAyNDdGNEM2MjAwMkU1MUEyIC8q
IFdlYkdMUHJlcGFyZURpc3BsYXlPbldlYlRocmVhZC5tbSAqLzsgfTsKQEAgLTE5MzIsNyArMTkz
MSw2IEBACiAJCTMxMjhBODEyMjM3NjNGMEIwMEQ5MEQ0MCAvKiBsaW5rLXdpdGgtaW1hZ2UuaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
aHRtbDsgcGF0aCA9ICJsaW5rLXdpdGgtaW1hZ2UuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxMjhBODE0MjM3NjQwRkQwMEQ5MEQ0MCAvKiBpbWFnZS5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gaW1hZ2UuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEzQzNBMDEyMUU1
Njc3QTAwREJBODZFIC8qIFN5c3RlbVByZXZpZXdCbG9iTmFtaW5nLmh0bWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSBTeXN0ZW1QcmV2aWV3QmxvYk5hbWluZy5odG1sOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzMTUxMTgwRjFEQjFBREQ1MDAxNzYzMDQgLyogRXh0ZW5kZWRD
b2xvclRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVu
ZGVkQ29sb3JUZXN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxQjc2RTQy
MjMyOThFMkIwMDdGRUQyQyAvKiBTeXN0ZW1QcmV2aWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU3lzdGVtUHJldmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzFCNzZFNDQyMzI5OUJBMzAwN0ZFRDJDIC8qIHN5c3RlbS1wcmV2aWV3LXRy
aWdnZXIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJzeXN0ZW0tcHJldmlldy10cmlnZ2VyLmh0bWwiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUU5QkRBMDI0N0Y0QzYyMDAyRTUxQTIgLyogV2Vi
R0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
R0xQcmVwYXJlRGlzcGxheU9uV2ViVGhyZWFkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzU4NSw3ICszNTgzLDYgQEAKIAkJCQkyNkY2RTFFRjFBREM3NDlCMDBERTY5NkIgLyog
REZBTWluaW1pemVyLmNwcCAqLywKIAkJCQlGNDA5NENDNjI1NTQ1QkQ1MDAzRDczRTMgLyogRGlz
cGxheUxpc3RUZXN0cy5jcHAgKi8sCiAJCQkJOTM5MTVBMTYyNERCNjZDNzAwMTlGRjQzIC8qIERv
Y3VtZW50T3JkZXIuY3BwICovLAotCQkJCTMxNTExODBGMURCMUFERDUwMDE3NjMwNCAvKiBFeHRl
bmRlZENvbG9yVGVzdHMuY3BwICovLAogCQkJCTU3OTY1MUU2MjE2QkZENTMwMDZFQkZFNSAvKiBG
aWRvSGlkTWVzc2FnZVRlc3QuY3BwICovLAogCQkJCTU3MkI0MDM1MjE3NkEwMjkwMDBBRDQzRSAv
KiBGaWRvVGVzdERhdGEuaCAqLywKIAkJCQk3QTMyRDc0OTFGMDIxNTE1MDAxNjJDNDQgLyogRmls
ZU1vbml0b3IuY3BwICovLApAQCAtNTI5MSw3ICs1Mjg4LDYgQEAKIAkJCQk1Qzc5NjQxMDFFQjAy
NzhEMDA3NUQ3NEMgLyogRXZlbnRNb2RpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RB
MjlCMjkyMEZEMkE5OTAwRjE1Q0VEIC8qIEV4aXRGdWxsc2NyZWVuT25FbnRlclBpUC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFEMTJCRUMwMjQ1QkVGODUwMDRDMEI3QSAvKiBFeGl0UGlQT25TdXNw
ZW5kVmlkZW9FbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJMzE1MTE4MTAxREIxQUU0MDAw
MTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JUZXN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VGMTFBNDExQUU2MDA0NDdDNEMgLyogRmFpbGVkTG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1Nzk2NTFFNzIxNkJGREVEMDA2RUJGRTUgLyogRmlkb0hpZE1lc3NhZ2VUZXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdBMzJENzRBMUYwMjE1MTUwMDE2MkM0NCAvKiBGaWxlTW9uaXRvci5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI3Mzc0MSkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw5ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAi
VGVzdC5oIgorI2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQ29sb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yQ29udmVyc2lvbi5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xv
clR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTE2NiwyMyArMTY5LDE4IEBAIFRFU1QoQ29sb3IsIFZhbGlkaXR5KQog
ewogICAgIENvbG9yIGludmFsaWRDb2xvcjsKICAgICBFWFBFQ1RfRkFMU0UoaW52YWxpZENvbG9y
LmlzVmFsaWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGludmFsaWRDb2xvci5pc0V4dGVuZGVkKCkp
OwogCiAgICAgQ29sb3Igb3RoZXJJbnZhbGlkQ29sb3IgPSBpbnZhbGlkQ29sb3I7CiAgICAgRVhQ
RUNUX0ZBTFNFKG90aGVySW52YWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KG90aGVySW52YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciB2YWxpZENvbG9y
ID0gQ29sb3I6OnJlZDsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0g
ICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIG90
aGVyVmFsaWRDb2xvciA9IHZhbGlkQ29sb3I7CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENv
bG9yLmlzVmFsaWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVu
ZGVkKCkpOwogCiAgICAgdmFsaWRDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsgMSwgMiwgMywgNCB9
OwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBFWFBFQ1RfRkFM
U0UodmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVu
dHMgPSB2YWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgIEVYUEVDVF9FUSh2
YWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29t
cG9uZW50cy5ncmVlbiwgMik7CkBAIC0xOTEsNyArMTg5LDYgQEAgVEVTVChDb2xvciwgVmFsaWRp
dHkpCiAKICAgICBDb2xvciB5ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3Ip
KTsKICAgICBFWFBFQ1RfVFJVRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAg
IEVYUEVDVF9GQUxTRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogICAgIGF1
dG8geWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0geWV0QW5vdGhlclZhbGlkQ29sb3Iu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENv
bG9yQ29tcG9uZW50cy5yZWQsIDEpOwogICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xv
ckNvbXBvbmVudHMuZ3JlZW4sIDIpOwpAQCAtMjAwLDcgKzE5Nyw2IEBAIFRFU1QoQ29sb3IsIFZh
bGlkaXR5KQogCiAgICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90aGVyVmFsaWRD
b2xvcik7CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAg
RVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogICAgIGF1dG8gb3Ro
ZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKICAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEp
OwogICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAyKTsKQEAg
LTIzMyw0ICsyMjksMTk0IEBAIFRFU1QoQ29sb3IsIEx1bWluYW5jZSkKICAgICBFWFBFQ1RfRVEo
Y0RhcmtlbmVkLmJsdWUsIDc2KTsKIH0KIAorVEVTVChDb2xvciwgQ29uc3RydWN0b3IpCit7Cisg
ICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07
CisKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMxLmNvbG9yU3BhY2VBbmRD
b21wb25lbnRzKCk7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4w
LCBhbHBoYSk7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzEpLCAiY29sb3Io
ZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOworfQorCitURVNUKENvbG9yLCBDb3B5Q29uc3RydWN0
b3IpCit7CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUs
IDEuMCB9IH07CisgICAgQ29sb3IgYzIoYzEpOworCisgICAgYXV0byBbY29sb3JTcGFjZSwgY29t
cG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwg
Yik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOworICAgIEVYUEVDVF9FUShzZXJp
YWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKK30K
KworVEVTVChDb2xvciwgQXNzaWdubWVudCkKK3sKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxm
bG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICBDb2xvciBjMiA9IGMxOworCisg
ICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9u
ZW50cygpOworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxw
aGEpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3Bs
YXktcDMgMSAwLjUgMC4yNSkiKTsKK30KKworVEVTVChDb2xvciwgRXF1YWxpdHkpCit7CisgICAg
eworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwg
MS4wIH0gfTsKKyAgICAgICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUs
IDAuMjUsIDEuMCB9IH07CisgICAgICAgIEVYUEVDVF9FUShjMSwgYzIpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUs
IDEuMCB9IH07CisgICAgICAgIENvbG9yIGMyIHsgU1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAu
MjUsIDEuMCB9IH07CisgICAgICAgIEVYUEVDVF9ORShjMSwgYzIpOworICAgIH0KKworICAgIGF1
dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07
CisgICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbXBvbmVudEJ5
dGVzKSB9OworICAgIENvbG9yIHJnYjIgeyBjb21wb25lbnRCeXRlcyB9OworICAgIEVYUEVDVF9O
RShyZ2IxLCByZ2IyKTsKKyAgICBFWFBFQ1RfTkUocmdiMiwgcmdiMSk7Cit9CisKK1RFU1QoQ29s
b3IsIEhhc2gpCit7CisgICAgeworICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4g
eyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAgICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8
ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgICAgIEVYUEVDVF9FUShjMS5o
YXNoKCksIGMyLmhhc2goKSk7CisgICAgfQorCisgICAgeworICAgICAgICBDb2xvciBjMSB7IERp
c3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAgICAgQ29sb3Ig
YzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAgICAgRVhQ
RUNUX05FKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKKyAgICB9CisKKyAgICBhdXRvIGNvbXBvbmVu
dEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OworICAgIENvbG9y
IHJnYjEgeyBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykgfTsKKyAg
ICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKKyAgICBFWFBFQ1RfTkUocmdiMS5oYXNo
KCksIHJnYjIuaGFzaCgpKTsKK30KKworVEVTVChDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQorewor
ICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9
OworICAgIENvbG9yIGMyKFdURk1vdmUoYzEpKTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG1v
dmVkIHRoZSBvdXQgb2YgbGluZSBjb2xvciBwb2ludGVyIGludG8gYzIsCisgICAgLy8gYW5kIHNl
dCBjMSB0byBpbnZhbGlkIHNvIHRoYXQgaXQgZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KKyAgICBF
WFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKKworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBv
bmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICBFWFBFQ1RfRVEoY29s
b3JTcGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKworICAgIGF1dG8gW3IsIGcsIGIsIGFs
cGhhXSA9IGNvbXBvbmVudHM7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0
aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKK30KKworVEVT
VChDb2xvciwgTW92ZUFzc2lnbm1lbnQpCit7CisgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMx
KTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG1vdmVkIHRoZSBvdXQgb2YgbGluZSBjb2xvciBw
b2ludGVyIGludG8gYzIsCisgICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRoYXQgaXQg
ZG9lc24ndCBjYXVzZSBkZWxldGlvbi4KKyAgICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsK
KworICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzIuY29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKTsKKyAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6RGlzcGxh
eVAzKTsKKworICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGNvbXBvbmVudHM7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxw
aGEpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3Bs
YXktcDMgMSAwLjUgMC4yNSkiKTsKK30KKworQ29sb3IgbWFrZUNvbG9yKCkKK3sKKyAgICByZXR1
cm4gQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Cit9
CisKK1RFU1QoQ29sb3IsIFJldHVyblZhbHVlcykKK3sKKyAgICBDb2xvciBjMiA9IG1ha2VDb2xv
cigpOworICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3Bs
YXktcDMgMSAwLjUgMC4yNSkiKTsKK30KKworVEVTVChDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdC
KQoreworICAgIENvbG9yIHAzQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAu
MjUsIDAuNzUgfSB9OworICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOworICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJlZCwgMS4wZik7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNDYyNTMyODJmKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTEyNzQ4Zik7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKHNSR0JBQ29sb3IuYWxwaGEsIDAuNzVmKTsKK30KKworVEVTVChDb2xvciwgTGlu
ZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCit7CisgICAgQ29sb3IgbGluZWFyU1JHQkFDb2xvciB7
IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKKyAgICBhdXRv
IHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOworICAgIEVYUEVDVF9GTE9B
VF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpOworICAgIEVYUEVDVF9GTE9BVF9F
UShzUkdCQUNvbG9yLmJsdWUsIDAuNTM3MDk4NzA2Zik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHNS
R0JBQ29sb3IuYWxwaGEsIDAuNzVmKTsKK30KKworVEVTVChDb2xvciwgQ29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkpCit7CisgICAgQ29sb3IgY29sb3IgeyBTUkdCQTxmbG9hdD4geyAwLiwgMC4s
IDEuLCAwLjYgfSB9OworCisgICAgeworICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDEuKTsKKyAgICAgICAg
RVhQRUNUX0VRKGNvbG9yLCBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSk7CisgICAgfQorCisg
ICAgeworICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNv
bG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDAuNSk7CisgICAgICAgIGF1dG8gW2NvbG9yU3BhY2Us
IGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuY29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbG9yU3BhY2UsIENvbG9yU3BhY2U6OlNS
R0IpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBvbmVudHM7CisgICAgICAgIEVY
UEVDVF9GTE9BVF9FUShyLCAwLik7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShnLCAwLik7Cisg
ICAgICAgIEVYUEVDVF9GTE9BVF9FUShiLCAxLik7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShh
LCAwLjMpOworICAgIH0KKworICAgIHsKKyAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgwLik7CisgICAgICAg
IGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbG9yU3Bh
Y2UsIENvbG9yU3BhY2U6OlNSR0IpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbXBv
bmVudHM7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7CisgICAgICAgIEVYUEVDVF9G
TE9BVF9FUShnLCAwLik7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUShiLCAxLik7CisgICAgICAg
IEVYUEVDVF9GTE9BVF9FUShhLCAwLik7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRGlzcGxh
eUxpc3RUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMuY3BwCShyZXZpc2lvbiAyNzM3NDEpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRGlzcGxheUxpc3RUZXN0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIEFwcGVuZEl0
ZW1zKQogICAgICAgICBFWFBFQ1RfVFJVRShoYW5kbGUtPmlzPEZpbGxSZWN0V2l0aENvbG9yPigp
KTsKIAogICAgICAgICBhdXRvJiBpdGVtID0gaGFuZGxlLT5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+
KCk7Ci0gICAgICAgIEVYUEVDVF9FUShpdGVtLmNvbG9yKCkuYXNJbmxpbmUoKSwgQ29sb3I6OmJs
YWNrKTsKKyAgICAgICAgRVhQRUNUX0VRKCppdGVtLmNvbG9yKCkudHJ5R2V0QXNTUkdCQUJ5dGVz
KCksIENvbG9yOjpibGFjayk7CiAgICAgICAgIEVYUEVDVF9FUShpdGVtLnJlY3QoKSwgRmxvYXRS
ZWN0KDAsIDAsIDEwMCwgMTAwKSk7CiAgICAgfQogCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2
aXNpb24gMjczNzQxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVu
ZGVkQ29sb3JUZXN0cy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRlc3QuaCIKLSNpbmNsdWRl
ICJXVEZTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Db2xvclNlcmlhbGl6YXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgewotCi1URVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQotewotICAgIENvbG9y
IGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgIEVY
UEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0g
PSBjMS5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDEu
MCwgcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDAuMjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKLSAgICBFWFBFQ1Rf
RVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoc2VyaWFs
aXphdGlvbkZvckNTUyhjMSksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7Ci19Ci0K
LVRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQotewotICAgIENvbG9yIGMxIHsg
RGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICBDb2xvciBjMihjMSk7Ci0KLSAgICBhdXRvIFty
LCBnLCBiLCBhbHBoYV0gPSBjMi5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwotCi0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDEuMCwgcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDAuMjUsIGIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhh
KTsKLSAgICBFWFBFQ1RfRVEoMnUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBF
WFBFQ1RfRVEoMnUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEo
c2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41IDAuMjUpIik7
Ci19Ci0KLVRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKLXsKLSAgICBDb2xvciBjMSB7
IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICBFWFBFQ1Rf
VFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgQ29sb3IgYzIgPSBjMTsKLQotICAgIGF1dG8g
W3IsIGcsIGIsIGFscGhhXSA9IGMyLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7Ci0KLSAgICBF
WFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxw
aGEpOwotICAgIEVYUEVDVF9FUSgydSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAg
IEVYUEVDVF9FUSgydSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9F
UShzZXJpYWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSki
KTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKLXsKLSAgICB7Ci0gICAgICAg
IENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9Owot
ICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgICAgIENvbG9yIGMy
IHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgICAgIEVYUEVDVF9FUShjMSwgYzIp
OwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsg
MS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5k
ZWQoKSk7Ci0KLSAgICAgICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4y
NSwgMS4wIH0gfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAg
ICAgICBFWFBFQ1RfTkUoYzEsIGMyKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbXBvbmVudEJ5dGVz
ID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OwotICAgIENvbG9yIHJnYjEg
eyBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykgfTsKLSAgICBDb2xv
ciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKLSAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7Ci0g
ICAgRVhQRUNUX05FKHJnYjIsIHJnYjEpOwotfQotCi1URVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gp
Ci17Ci0gICAgewotICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsK
LQotICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwg
MS4wIH0gfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAgICAg
ICBFWFBFQ1RfRVEoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwotICAgIH0KLQotICAgIHsKLSAgICAg
ICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07
Ci0gICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICAgICAgQ29sb3Ig
YzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAgICAgICBFWFBFQ1RfTkUoYzEuaGFzaCgp
LCBjMi5oYXNoKCkpOwotICAgIH0KLQotICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1
aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07Ci0gICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRD
b2xvcjxTUkdCQTxmbG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9OwotICAgIENvbG9yIHJnYjIgeyBj
b21wb25lbnRCeXRlcyB9OwotICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkp
OwotfQotCi1URVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKLXsKLSAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgQ29sb3IgYzIoV1RGTW92ZShjMSkp
OwotICAgIC8vIFdlIHNob3VsZCBoYXZlIG1vdmVkIHRoZSBleHRlbmRlZCBjb2xvciBwb2ludGVy
IGludG8gYzIsCi0gICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRoYXQgaXQgZG9lc24n
dCBjYXVzZSBkZWxldGlvbi4KLSAgICBFWFBFQ1RfRkFMU0UoYzEuaXNFeHRlbmRlZCgpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFscGhh
XSA9IGMyLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MS4wLCByKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoMC4yNSwgYik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwotICAgIEVYUEVD
VF9FUSgxdSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9FUShzZXJp
YWxpemF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKLX0K
LQotVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkKLXsKLSAgICBDb2xvciBjMSB7
IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICBFWFBFQ1Rf
VFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMxKTsKLQot
ICAgIC8vIFdlIHNob3VsZCBoYXZlIG1vdmVkIHRoZSBleHRlbmRlZCBjb2xvciBwb2ludGVyIGlu
dG8gYzIsCi0gICAgLy8gYW5kIHNldCBjMSB0byBpbnZhbGlkIHNvIHRoYXQgaXQgZG9lc24ndCBj
YXVzZSBkZWxldGlvbi4KLSAgICBFWFBFQ1RfRkFMU0UoYzEuaXNFeHRlbmRlZCgpKTsKLSAgICBF
WFBFQ1RfRkFMU0UoYzEuaXNWYWxpZCgpKTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9
IGMyLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4w
LCByKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MC4yNSwgYik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwotICAgIEVYUEVDVF9F
USgxdSwgYzIuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9FUShzZXJpYWxp
emF0aW9uRm9yQ1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKLX0KLQot
VEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aW5nKQotewotICAgIENvbG9y
KiBjMSA9IG5ldyBDb2xvciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4w
IH0gfTsKLSAgICAKLSAgICBFWFBFQ1RfVFJVRShjMS0+aXNFeHRlbmRlZCgpKTsKLQotICAgIENv
bG9yKiBjMiA9IG5ldyBDb2xvcigqYzEpOwotICAgIENvbG9yKiBjMyA9IG5ldyBDb2xvcigqYzIp
OwotCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gYzItPmFzRXh0ZW5kZWQoKS5jb21wb25l
bnRzKCk7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoMC41LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7Ci0gICAgRVhQRUNUX0ZM
T0FUX0VRKDEuMCwgYWxwaGEpOwotICAgIEVYUEVDVF9FUSgzdSwgYzItPmFzRXh0ZW5kZWQoKS5y
ZWZDb3VudCgpKTsKLSAgICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUygqYzIpLCAiY29s
b3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotCi0gICAgZGVsZXRlIGMxOwotICAgIEVYUEVD
VF9FUSgydSwgYzItPmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLQotICAgIGRlbGV0ZSBjMjsK
LSAgICBFWFBFQ1RfRVEoMXUsIGMzLT5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0KLSAgICBk
ZWxldGUgYzM7Ci19Ci0KLUNvbG9yIG1ha2VDb2xvcigpCi17Ci0gICAgQ29sb3IgYzEgeyBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgRVhQRUNUX1RSVUUo
YzEuaXNFeHRlbmRlZCgpKTsKLSAgICBFWFBFQ1RfRVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZD
b3VudCgpKTsKLQotICAgIHJldHVybiBjMTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1
cm5WYWx1ZXMpCi17Ci0gICAgQ29sb3IgYzIgPSBtYWtlQ29sb3IoKTsKLSAgICBFWFBFQ1RfVFJV
RShjMi5pc0V4dGVuZGVkKCkpOwotCi0gICAgRVhQRUNUX0VRKDF1LCBjMi5hc0V4dGVuZGVkKCku
cmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIpLCAiY29s
b3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotfQotCi1URVNUKEV4dGVuZGVkQ29sb3IsIFAz
Q29udmVyc2lvblRvU1JHQikKLXsKLSAgICBDb2xvciBwM0NvbG9yIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsKLSAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlz
RXh0ZW5kZWQoKSk7Ci0KLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOwot
ICAgIEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2MjUzMjgyZik7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1ZSwgMC4xNDkxMjc0OGYpOwotICAgIEVYUEVD
VF9GTE9BVF9FUShzUkdCQUNvbG9yLmFscGhhLCAwLjc1Zik7Ci19Ci0KLVRFU1QoRXh0ZW5kZWRD
b2xvciwgTGluZWFyU1JHQkNvbnZlcnNpb25Ub1NSR0IpCi17Ci0gICAgQ29sb3IgbGluZWFyU1JH
QkFDb2xvciB7IExpbmVhclNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAwLjc1IH0gfTsK
LSAgICBFWFBFQ1RfVFJVRShsaW5lYXJTUkdCQUNvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICBh
dXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJTUkdCQUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5yZWQsIDEuMGYpOwotICAgIEVYUEVDVF9G
TE9BVF9FUShzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpOwotICAgIEVYUEVDVF9GTE9B
VF9FUShzUkdCQUNvbG9yLmJsdWUsIDAuNTM3MDk4NzA2Zik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KHNSR0JBQ29sb3IuYWxwaGEsIDAuNzVmKTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBDb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeSkKLXsKLSAgICBDb2xvciBjb2xvciB7IFNSR0JBPGZsb2F0
PiB7IDAuLCAwLiwgMS4sIDAuNiB9IH07Ci0gICAgRVhQRUNUX1RSVUUoY29sb3IuaXNFeHRlbmRl
ZCgpKTsKLQotICAgIHsKLSAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkg
PSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSgxLik7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmlzRXh0ZW5kZWQoKSk7Ci0gICAgICAgIEVY
UEVDVF9FUShjb2xvciwgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkpOwotICAgIH0KLQotICAg
IHsKLSAgICAgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgPSBjb2xvci5jb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeSgwLjUpOwotICAgICAgICBFWFBFQ1RfVFJVRShjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeS5pc0V4dGVuZGVkKCkpOwotICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5LmFzRXh0ZW5kZWQoKS5jb21wb25lbnRz
KCk7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShyLCAwLik7Ci0gICAgICAgIEVYUEVDVF9GTE9B
VF9FUShnLCAwLik7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUShiLCAxLik7Ci0gICAgICAgIEVY
UEVDVF9GTE9BVF9FUShhLCAwLjMpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQ29sb3IgY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgPSBjb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRC
eSgwLik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5Lmlz
RXh0ZW5kZWQoKSk7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKLSAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKHIsIDAuKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGcsIDAuKTsKLSAgICAgICAg
RVhQRUNUX0ZMT0FUX0VRKGIsIDEuKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGEsIDAuKTsK
LSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKClByb3BlcnR5IGNoYW5n
ZXMgb246IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVz
dHMuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1u
YXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpEZWxldGVkOiBzdm46a2V5d29y
ZHMKIyMgLTEgKzAsMCAjIwotRGF0ZSBBdXRob3IgSWQgUmV2aXNpb24gSGVhZFVSTApcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422017</attachid>
            <date>2021-03-02 16:16:39 -0800</date>
            <delta_ts>2021-03-02 17:25:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222584-20210302161638.patch</filename>
            <type>text/plain</type>
            <size>66528</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3Mzc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDIxLTAzLTAxICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBSZWR1Y2UgdGhlIHNpemUgb2YgZXh0
ZW5kZWQgY29sb3JzIGJ5IHN0b3JpbmcgdGhlIGNvbG9yIHNwYWNlIGluIGZyZWUgYml0cyBvZiB0
aGUgb3duaW5nIENvbG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjI1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBSZWR1Y2UgdGhlIHNpemUgb2Ygbm9uLVNSQkdBPHVpbnQ4X3Q+IGNvbG9ycyBieSBtb3Zp
bmcgdGhlIGNvbG9yIHNwYWNlIGZyb20gdGhlIHJlZiBjb3VudGVkCisgICAgICAgIG91dC1vZi1s
aW5lIGJpdCBpbnRvIHRoZSBmcmVlIGJpdHMgb2YgdGhlIENvbG9yIGl0c2VsZi4KKyAgICAgICAg
CisgICAgICAgIEFsc28sIHRha2UgdGhlIG9wZXJ0dW5pdHkgdG8gbW92ZSBhbmQgcmVuYW1lIHRo
ZSBvdXQgb2YgbGluZSBiaXQgZnJvbSBpdCdzIG93biBmaWxlIG5hbWVkCisgICAgICAgIEV4dGVu
ZGVkQ29sb3IgdG8gYSBwcml2YXRlIG5lc3RlZCB0eXBlIGNhbGxlZCBPdXRPZkxpbmVDb21wb25l
bnRzLgorCisgICAgICAgIENvbG9yIG5vdyBlbmNvZGVzIHRoZSBmb2xsb3dpbmcgZGF0YToKKyAg
ICAgICAgICAgIHwgICA4IGJpdHMgICB8ICAgOCBiaXRzICAgfCAgICAgICAgICA0OCAob3IgMzIp
IGJpdHMgICAgICAgICAgfAorICAgICAgICAgICAgfCBDb2xvclNwYWNlIHwgICAgRmxhZ3MgICB8
ICAgSW5saW5lQ29sb3JEYXRhT3JPdXRPZkxpbmVQdHIgICB8CisKKyAgICAgICAgQ29sb3JTcGFj
ZSBhY3R1YWxseSBvbmx5IHVzZXMgNCBiaXRzLCBzbyBpZiB3ZSBuZWVkIG1vcmUgcm9vbSBmb3Ig
ZmxhZ3MKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSwgd2UgY291bGQgcGFjayB0aGluZ3MgZXZlbiBt
b3JlIHRpZ2h0bHkuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCB0YWtlIHRoZSBvcHBvcnR1bml0
eSB0byByZW1vdmUgdGhlIGlzSW5saW5lL2lzRXh0ZW5kZWQgYW5kCisgICAgICAgIGFzSW5saW5l
L2FzRXh0ZW5kZWQgZnVuY3Rpb25zLiBUaGUgZnVuY3Rpb25hbGl0eSBvZiBpc0lubGluZS9hc0lu
bGluZQorICAgICAgICBpcyBzdGlsbCBuZWNlc3NhcnkgaW4gc29tZSBwbGFjZXMsIGJ1dCBjYW4g
YmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUKKyAgICAgICAgdHJ5R2V0QXNTUkdCQUJ5dGVzIHdoaWNo
IHJldHVybnMgYW4gT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IHdpdGggYSAKKyAgICAgICAgdmFs
aWQgdmFsdWUgd2hlbiB0aGUgc3RvcmVkIHZhbHVlIGlzIGlubGluZS4KKworICAgICAgICBTaW5j
ZSBFeHRlbmRlZENvbG9yIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCBhIGZldyB0ZXN0cyB0aGF0
IGNoZWNrZWQgdGhpbmdzIGxpa2UKKyAgICAgICAgdGhlIHJlZiBjb3VudCBvZiB0aGUgRXh0ZW5k
ZWRDb2xvciBoYWQgdG8gYmUgY2hhbmdlZC4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6aXNPcGFxdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmlzVmlzaWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6YWxwaGFCeXRl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphbHBoYUFzRmxvYXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6T3V0T2ZMaW5lQ29tcG9uZW50czo6YWxwaGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVudHM6OmNvbXBvbmVu
dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVudHM6
Ok91dE9mTGluZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldE91dE9m
TGluZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpvdXRPZkxpbmVDb21wb25lbnRzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6
b3V0T2ZMaW5lQ29tcG9uZW50c0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjp+Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omhhc2ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sb3I6OmNhbGxPblVuZGVybHlpbmdUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjppc091dE9mTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
aXNJbmxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFzT3V0T2ZMaW5lIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc091dE9mTGluZVJlZiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dHJ5R2V0QXNTUkdCQUJ5dGVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGVkRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmVuY29kZWRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNvZGVk
T3V0T2ZMaW5lQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlZEZs
YWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGVkQ29sb3JTcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb2xvcjo6ZGVjb2RlZE91dE9mTGluZUNvbXBvbmVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OnNldENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6c2V0RXh0ZW5kZWRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpleHRlbmRlZENvbG9yc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmV4dGVuZGVkQ29sb3JzRXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OmFzRXh0ZW5kZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmFzRXh0ZW5kZWRSZWYgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmVuY29kZWRFeHRlbmRlZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbG9yOjpkZWNvZGVkRXh0ZW5kZWRDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRD
R0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpjcmVhdGVDR0dyYWRpZW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxHcmFkaWVudDo6aXNJbmxpbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0Ojpjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Om5zQ29sb3IpOgorCiAyMDIxLTAzLTAyICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBBbGxvdyBJREwgYERhdGVgIHRvIGJlIHBhcnNlZCBmcm9tIGEg
c3RyaW5nIGluIGFkZGl0aW9uIHRvIGEgbnVtYmVyIGFuZCBhY3R1YWwgSlMgYERhdGVgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI3Mzc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTExODEsNyArMTE4MSw2IEBAIHNldChXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNo
TW9uaXRvckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uc0dMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjczNzY4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NjgsNyArOTY4LDYgQEAKIAkJMzFDMEZG
MjUwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUYwRTRDRUI2RTAwN0Q2
RkU1IC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5oICovOyB9OwogCQkzMUMwRkYzRTBFNENFRkFD
MDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGM0EwRTRDRUZBQzAwN0Q2RkU1IC8qIEpT
V2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZGNDAwRTRDRUZBQzAwN0Q2RkU1
IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYzQzBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRU
cmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsKLQkJMzFEQ0RGNDQxREExQzQ1NDAwRUE1QjkzIC8qIEV4
dGVuZGVkQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxRENERjQyMURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzFERUE0NTYxQjM5RjRE
OTAwRjc3MTc4IC8qIFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxREVBNDU0MUIzOUY0RDkwMEY3NzE3OCAvKiBX
ZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggKi87IH07CiAJCTMxRUFGOTdFMTIxNDM1QTQwMEU3QzFC
RiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxRUFGOTdDMTIxNDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rp
b25DbGllbnRJT1MuaCAqLzsgfTsKIAkJMzFFQjU0REYxRTdEQzc0NDAwQzE2MjNCIC8qIFJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMUVCNTRERDFFN0RDNzQ0MDBDMTYyM0IgLyogUlRDUnRwVHJhbnNjZWl2
ZXJEaXJlY3Rpb24uaCAqLzsgfTsKQEAgLTc1MDcsNyArNzUwNiw2IEBACiAJCTMxRDI2QkM0MUY4
NkQyNjYwMDhGRjI1NSAvKiBKU0ltYWdlQml0bWFwT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ltYWdlQml0bWFwT3B0aW9ucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxRDI2QkM1MUY4NkQyNjgwMDhGRjI1NSAvKiBKU0ltYWdl
Qml0bWFwT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ltYWdl
Qml0bWFwT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUQyNkJDNjFG
ODZEMjY5MDA4RkYyNTUgLyogSlNJbWFnZUJpdG1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0ltYWdlQml0bWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5kZWRDb2xvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMURFQTQ1MzFCMzlGNEQ5MDBGNzcxNzggLyogV2ViU3lzdGVt
QmFja2Ryb3BMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxREVBNDU0MUIzOUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlN5c3RlbUJhY2tkcm9wTGF5ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFFQUY5N0MxMjE0MzVBNDAwRTdDMUJGIC8q
IERldmljZU1vdGlvbkNsaWVudElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZXZpY2VNb3Rpb25DbGllbnRJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI2NjkxLDcgKzI2Njg5LDYgQEAKIAkJCQkyRDI5RUNDMjE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmggKi8sCiAJCQkJMkQyOUVDQzMxOTJFQ0M4MzAwOTg0
Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuY3BwICovLAogCQkJCTJEMjlFQ0M0
MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmggKi8sCi0J
CQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKIAkJCQk2
RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1
M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLAogCQkJCUIyNzUzNTNCMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8sCkBAIC0zMjE4NSw3ICszMjE4Miw2IEBA
CiAJCQkJMkQyOTM4NkIyMzVGNkI2OTAwQzdGM0IyIC8qIEV4Y2VwdGlvbkRldGFpbHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRDE5NjMxMUQ2Q0FCNzYwMEZDN0U0NyAvKiBFeGNlcHRpb25Pci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODM3RkIzNDUxRjlFQTA2RDAwRDBGQzMxIC8qIEV4dGVuZGFi
bGVNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTMxRENERjQ0MURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBF
OEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTcyRjU1
MDIyOURDRDE3MDBCM0UxNTEgLyogRXh0ZW5zaW9uc0dMQU5HTEUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCShyZXZpc2lvbiAyNzM3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAgc3RhdGljIGNv
bnN0ZXhwciBhdXRvIGRhcmtlbmVkV2hpdGUgPSBTUgogQ29sb3I6OkNvbG9yKGNvbnN0IENvbG9y
JiBvdGhlcikKICAgICA6IG1fY29sb3JBbmRGbGFncyhvdGhlci5tX2NvbG9yQW5kRmxhZ3MpCiB7
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgYXNFeHRlbmRlZCgpLnJlZigpOworICAg
IGlmIChpc091dE9mTGluZSgpKQorICAgICAgICBhc091dE9mTGluZSgpLnJlZigpOwogfQogCiBD
b2xvcjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKQEAgLTUzLDEzICs1MywxMyBAQCBDb2xvciYgQ29s
b3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoCiAgICAgaWYgKCp0aGlzID09IG90aGVyKQog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBh
c0V4dGVuZGVkKCkuZGVyZWYoKTsKKyAgICBpZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgYXNP
dXRPZkxpbmUoKS5kZXJlZigpOwogCiAgICAgbV9jb2xvckFuZEZsYWdzID0gb3RoZXIubV9jb2xv
ckFuZEZsYWdzOwogCi0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgYXNFeHRlbmRlZCgp
LnJlZigpOworICAgIGlmIChpc091dE9mTGluZSgpKQorICAgICAgICBhc091dE9mTGluZSgpLnJl
ZigpOwogCiAgICAgcmV0dXJuICp0aGlzOwogfQpAQCAtNjksOCArNjksOCBAQCBDb2xvciYgQ29s
b3I6Om9wZXJhdG9yPShDb2xvciYmIG90aGVyKQogICAgIGlmICgqdGhpcyA9PSBvdGhlcikKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgYXNF
eHRlbmRlZCgpLmRlcmVmKCk7CisgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCisgICAgICAgIGFzT3V0
T2ZMaW5lKCkuZGVyZWYoKTsKIAogICAgIG1fY29sb3JBbmRGbGFncyA9IG90aGVyLm1fY29sb3JB
bmRGbGFnczsKICAgICBvdGhlci5tX2NvbG9yQW5kRmxhZ3MgPSBpbnZhbGlkQ29sb3JBbmRGbGFn
czsKQEAgLTE2NiwxNSArMTY2LDE1IEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29u
c3QKICAgICBpZiAoaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCi0g
ICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgYXNFeHRlbmRlZFJlZigpLCBG
bGFnczo6U2VtYW50aWMgfTsKKyAgICBpZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAgcmV0dXJu
IHsgYXNPdXRPZkxpbmVSZWYoKSwgY29sb3JTcGFjZSgpLCBGbGFnczo6U2VtYW50aWMgfTsKICAg
ICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFnczo6U2VtYW50aWMgfTsKIH0KIAogc3RkOjpwYWly
PENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IENvbG9yOjpjb2xvclNwYWNlQW5k
Q29tcG9uZW50cygpIGNvbnN0CiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0
dXJuIHsgYXNFeHRlbmRlZCgpLmNvbG9yU3BhY2UoKSwgYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMo
KSB9OworICAgIGlmIChpc091dE9mTGluZSgpKQorICAgICAgICByZXR1cm4geyBjb2xvclNwYWNl
KCksIGFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpIH07CiAgICAgcmV0dXJuIHsgQ29sb3JTcGFj
ZTo6U1JHQiwgYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oYXNJ
bmxpbmUoKSkpIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAkocmV2aXNpb24gMjczNzY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiRXh0ZW5kZWRD
b2xvci5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4K
ICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAjaWYgVVNFKENHKQpAQCAtNzEsOCArNzQsNiBAQCBw
dWJsaWM6CiAKICAgICBDb2xvcihTUkdCQTx1aW50OF90PiwgT3B0aW9uU2V0PEZsYWdzPiA9IHsg
fSk7CiAgICAgQ29sb3IoT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+LCBPcHRpb25TZXQ8RmxhZ3M+
ID0geyB9KTsKLQotICAgIENvbG9yKENvbG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2Us
IE9wdGlvblNldDxGbGFncz4gPSB7IH0pOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbG9yVHlwZVdpdGhDb21wb25l
bnRUeXBlPENvbG9yVHlwZSwgZmxvYXQ+PiogPSBudWxscHRyPgogICAgIENvbG9yKGNvbnN0IENv
bG9yVHlwZSYsIE9wdGlvblNldDxGbGFncz4gPSB7IH0pOwpAQCAtOTgsMTAgKzk5LDEyIEBAIHB1
YmxpYzoKICAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdDsKICAgICBib29sIHVzZXNDb2xvckZ1
bmN0aW9uU2VyaWFsaXphdGlvbigpIGNvbnN0OwogCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0
IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IGFz
SW5saW5lKCkuYWxwaGEgPT0gMjU1OyB9Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJl
dHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA+IDAuMCA6IGFzSW5saW5l
KCkuYWxwaGEgPiAwOyB9Ci0gICAgdWludDhfdCBhbHBoYUJ5dGUoKSBjb25zdCB7IHJldHVybiBp
c0V4dGVuZGVkKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzRXh0ZW5kZWQoKS5h
bHBoYSgpKSA6IGFzSW5saW5lKCkuYWxwaGE7IH0KLSAgICBmbG9hdCBhbHBoYUFzRmxvYXQoKSBj
b25zdCB7IHJldHVybiBpc0V4dGVuZGVkKCkgPyBhc0V4dGVuZGVkKCkuYWxwaGEoKSA6IGNvbnZl
cnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KKyAgICBDb2xvclNwYWNl
IGNvbG9yU3BhY2UoKSBjb25zdDsKKworICAgIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVy
biBpc091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID09IDEuMCA6IGFzSW5saW5l
KCkuYWxwaGEgPT0gMjU1OyB9CisgICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBp
c091dE9mTGluZSgpID8gYXNPdXRPZkxpbmUoKS5hbHBoYSgpID4gMC4wIDogYXNJbmxpbmUoKS5h
bHBoYSA+IDA7IH0KKyAgICB1aW50OF90IGFscGhhQnl0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzT3V0
T2ZMaW5lKCkgPyBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KGFzT3V0T2ZMaW5lKCkuYWxw
aGEoKSkgOiBhc0lubGluZSgpLmFscGhhOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29u
c3QgeyByZXR1cm4gaXNPdXRPZkxpbmUoKSA/IGFzT3V0T2ZMaW5lKCkuYWxwaGEoKSA6IGNvbnZl
cnRCeXRlQWxwaGFUbzxmbG9hdD4oYXNJbmxpbmUoKS5hbHBoYSk7IH0KIAogICAgIFdFQkNPUkVf
RVhQT1JUIGZsb2F0IGx1bWluYW5jZSgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0
IGxpZ2h0bmVzcygpIGNvbnN0OyAvLyBGSVhNRTogUmVwbGFjZSByZW1haW5pbmcgdXNlcyB3aXRo
IGx1bWluYW5jZS4KQEAgLTEzNiwxNCArMTM5LDE2IEBAIHB1YmxpYzoKIAogICAgIENvbG9yIHNl
bWFudGljQ29sb3IoKSBjb25zdDsKIAorICAgIC8vIFJldHVybnMgdGhlIHVuZGVybHlpbmcgY29s
b3IgaWYgaXRzIHR5cGUgaXMgU1JHQkE8dWludDhfdD4uCisgICAgT3B0aW9uYWw8U1JHQkE8dWlu
dDhfdD4+IHRyeUdldEFzU1JHQkFCeXRlcygpIGNvbnN0OworCiAjaWYgUExBVEZPUk0oR1RLKQog
ICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsKICAgICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7
CiAjZW5kaWYKIAogI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9y
UmVmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmLCBPcHRpb25TZXQ8Rmxh
Z3M+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmLCBPcHRpb25TZXQ8Rmxh
Z3M+ID0geyB9KTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMTY3LDQ0ICsxNzIs
NjEgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBkYXJrR3JlZW4gPSBTUkdC
QTx1aW50OF90PiB7IDAsIDEyOCwgMCB9OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBvcmFu
Z2UgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCAwIH07CiAKLSAgICBib29sIGlzRXh0ZW5k
ZWQoKSBjb25zdDsKLSAgICBib29sIGlzSW5saW5lKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBFeHRl
bmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7Ci0gICAgU1JHQkE8dWludDhfdD4gYXNJbmxp
bmUoKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsK
KyAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKIAotICAgIC8vIEV4
dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4K
KyAgICAvLyBPdXQgb2YgbGluZSBhbmQgaW5saW5lIGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24t
ZXF1YWwuCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3Qg
Q29sb3ImIGIpOwogICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7Ci0gICAgZnJpZW5kIGJvb2wgZXh0ZW5kZWRD
b2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci0gICAgZnJpZW5kIGJvb2wg
ZXh0ZW5kZWRDb2xvcnNFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYsIGNv
bnN0IENvbG9yJik7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3Im
KTsKLSAgICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBmcmll
bmQgYm9vbCBvdXRPZkxpbmVDb21wb25lbnRzc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29s
b3ImKTsKKyAgICBmcmllbmQgYm9vbCBvdXRPZkxpbmVDb21wb25lbnRzc0VxdWFsSWdub3JpbmdT
ZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAogICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7
CiAKIHByaXZhdGU6Ci0gICAgQ29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYsIE9wdGlvblNldDxG
bGFncz4gPSB7IH0pOworICAgIGNsYXNzIE91dE9mTGluZUNvbXBvbmVudHMgOiBwdWJsaWMgUmVm
Q291bnRlZDxPdXRPZkxpbmVDb21wb25lbnRzPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUmVmPE91dE9mTGluZUNvbXBvbmVudHM+IGNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+
IGNvbXBvbmVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE91dE9mTGluZUNvbXBvbmVudHMoY29tcG9uZW50cykpOworICAgICAgICB9CisKKyAgICAgICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvbmVudHNbM107IH0KKyAgICAgICAg
Q29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
b25lbnRzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBPdXRPZkxpbmVDb21wb25lbnRzKENv
bG9yQ29tcG9uZW50czxmbG9hdD4gY29tcG9uZW50cykKKyAgICAgICAgICAgIDogbV9jb21wb25l
bnRzKGNvbXBvbmVudHMpCisgICAgICAgIHsKKyAgICAgICAgfQogCi0gICAgZW51bSBjbGFzcyBG
bGFnc0luY2x1ZGluZ1ByaXZhdGUgOiB1aW50MTZfdCB7Ci0gICAgICAgIFNlbWFudGljICAgICAg
ICAgICAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oRmxhZ3M6OlNlbWFudGlj
KSwKLSAgICAgICAgVXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24gICA9IHN0YXRpY19jYXN0
PHVpbnQxNl90PihGbGFnczo6VXNlQ29sb3JGdW5jdGlvblNlcmlhbGl6YXRpb24pLAorICAgICAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsKKyAgICB9OworICAgIENvbG9y
KFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYmLCBDb2xvclNwYWNlLCBPcHRpb25TZXQ8RmxhZ3M+
ID0geyB9KTsKKworICAgIGVudW0gY2xhc3MgRmxhZ3NJbmNsdWRpbmdQcml2YXRlIDogdWludDhf
dCB7CisgICAgICAgIFNlbWFudGljICAgICAgICAgICAgICAgICAgICAgICAgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihGbGFnczo6U2VtYW50aWMpLAorICAgICAgICBVc2VDb2xvckZ1bmN0aW9uU2Vy
aWFsaXphdGlvbiAgID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oRmxhZ3M6OlVzZUNvbG9yRnVuY3Rp
b25TZXJpYWxpemF0aW9uKSwKICAgICAgICAgVmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgMiwKLSAgICAgICAgRXh0ZW5kZWQgICAgICAgICAgICAgICAgICAgICAgICA9IDEg
PDwgMywKKyAgICAgICAgT3V0T2ZMaW5lICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywK
ICAgICAgICAgSGFzaFRhYmxlRW1wdHlWYWx1ZSAgICAgICAgICAgICA9IDEgPDwgNCwKICAgICAg
ICAgSGFzaFRhYmxlRGVsZXRlZFZhbHVlICAgICAgICAgICA9IDEgPDwgNSwKICAgICB9OwogICAg
IHN0YXRpYyBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiB0b0ZsYWdzSW5jbHVkaW5n
UHJpdmF0ZShPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKSB7IHJldHVybiBPcHRpb25TZXQ8RmxhZ3NJ
bmNsdWRpbmdQcml2YXRlPjo6ZnJvbVJhdyhmbGFncy50b1JhdygpKTsgfQogCiAgICAgT3B0aW9u
U2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gZmxhZ3MoKSBjb25zdDsKKyAgICBib29sIGlzT3V0
T2ZMaW5lKCkgY29uc3Q7CisgICAgYm9vbCBpc0lubGluZSgpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRDb2xvcihTUkdCQTx1aW50OF90PiwgT3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4g
PSB7IH0pOwotICAgIHZvaWQgc2V0RXh0ZW5kZWRDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiwg
T3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0pOworICAgIHZvaWQgc2V0T3V0
T2ZMaW5lQ29tcG9uZW50cyhSZWY8T3V0T2ZMaW5lQ29tcG9uZW50cz4mJiwgQ29sb3JTcGFjZSwg
T3B0aW9uU2V0PEZsYWdzSW5jbHVkaW5nUHJpdmF0ZT4gPSB7IH0pOwogCisgICAgU1JHQkE8dWlu
dDhfdD4gYXNJbmxpbmUoKSBjb25zdDsKICAgICBQYWNrZWRDb2xvcjo6UkdCQSBhc1BhY2tlZElu
bGluZSgpIGNvbnN0OwotICAgIFJlZjxFeHRlbmRlZENvbG9yPiBhc0V4dGVuZGVkUmVmKCkgY29u
c3Q7CisKKyAgICBjb25zdCBPdXRPZkxpbmVDb21wb25lbnRzJiBhc091dE9mTGluZSgpIGNvbnN0
OworICAgIFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiBhc091dE9mTGluZVJlZigpIGNvbnN0Owog
CiAjaWYgQ1BVKEFERFJFU1M2NCkKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heE51
bWJlck9mQml0c0luUG9pbnRlciA9IDQ4OwpAQCAtMjEyLDE2ICsyMzQsMjMgQEAgcHJpdmF0ZToK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJlck9mQml0c0luUG9pbnRlciA9
IDMyOwogI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBjb2xvclZhbHVlTWFz
ayA9ICgxVUxMIDw8IG1heE51bWJlck9mQml0c0luUG9pbnRlcikgLSAxOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdWludDY0X3QgZmxhZ3NTaXplID0gc2l6ZW9mKEZsYWdzSW5jbHVkaW5nUHJpdmF0
ZSkgKiA4OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgZmxhZ3NTaGlmdCA9IG1heE51
bWJlck9mQml0c0luUG9pbnRlcjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IGNvbG9y
U3BhY2VTaXplID0gc2l6ZW9mKENvbG9yU3BhY2UpICogODsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ2NF90IGNvbG9yU3BhY2VTaGlmdCA9IGZsYWdzU2hpZnQgKyBmbGFnc1NpemU7CisgICAg
c3RhdGljX2Fzc2VydChmbGFnc1NpemUgKyBjb2xvclNwYWNlU2l6ZSArIG1heE51bWJlck9mQml0
c0luUG9pbnRlciA8PSA2NCk7CiAKICAgICBzdGF0aWMgdWludDY0X3QgZW5jb2RlZEZsYWdzKE9w
dGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+KTsKKyAgICBzdGF0aWMgdWludDY0X3QgZW5j
b2RlZENvbG9yU3BhY2UoQ29sb3JTcGFjZSk7CiAgICAgc3RhdGljIHVpbnQ2NF90IGVuY29kZWRJ
bmxpbmVDb2xvcihTUkdCQTx1aW50OF90Pik7CiAgICAgc3RhdGljIHVpbnQ2NF90IGVuY29kZWRQ
YWNrZWRJbmxpbmVDb2xvcihQYWNrZWRDb2xvcjo6UkdCQSk7Ci0gICAgc3RhdGljIHVpbnQ2NF90
IGVuY29kZWRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKKyAgICBzdGF0aWMg
dWludDY0X3QgZW5jb2RlZE91dE9mTGluZUNvbXBvbmVudHMoUmVmPE91dE9mTGluZUNvbXBvbmVu
dHM+JiYpOwogCiAgICAgc3RhdGljIE9wdGlvblNldDxGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IGRl
Y29kZWRGbGFncyh1aW50NjRfdCk7CisgICAgc3RhdGljIENvbG9yU3BhY2UgZGVjb2RlZENvbG9y
U3BhY2UodWludDY0X3QpOwogICAgIHN0YXRpYyBTUkdCQTx1aW50OF90PiBkZWNvZGVkSW5saW5l
Q29sb3IodWludDY0X3QpOwogICAgIHN0YXRpYyBQYWNrZWRDb2xvcjo6UkdCQSBkZWNvZGVkUGFj
a2VkSW5saW5lQ29sb3IodWludDY0X3QpOwotICAgIHN0YXRpYyBFeHRlbmRlZENvbG9yJiBkZWNv
ZGVkRXh0ZW5kZWRDb2xvcih1aW50NjRfdCk7CisgICAgc3RhdGljIE91dE9mTGluZUNvbXBvbmVu
dHMmIGRlY29kZWRPdXRPZkxpbmVDb21wb25lbnRzKHVpbnQ2NF90KTsKIAogICAgIHN0YXRpYyBj
b25zdGV4cHIgdWludDY0X3QgaW52YWxpZENvbG9yQW5kRmxhZ3MgPSAwOwogICAgIHVpbnQ2NF90
IG1fY29sb3JBbmRGbGFncyB7IGludmFsaWRDb2xvckFuZEZsYWdzIH07CkBAIC0yMzAsOSArMjU5
LDkgQEAgcHJpdmF0ZToKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9y
Jik7CiBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCi0vLyBP
bmUgb3IgYm90aCBtdXN0IGJlIGV4dGVuZGVkIGNvbG9ycy4KLWJvb2wgZXh0ZW5kZWRDb2xvcnNF
cXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci1ib29sIGV4dGVuZGVkQ29sb3JzRXF1
YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOworLy8g
T25lIG9yIGJvdGggbXVzdCBiZSBvdXQgb2YgbGluZSBjb2xvcnMuCitib29sIG91dE9mTGluZUNv
bXBvbmVudHNzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOworYm9vbCBvdXRPZkxp
bmVDb21wb25lbnRzc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKIAogI2lmIFVTRShDRykKIFdFQkNPUkVfRVhQT1JUIENHQ29sb3JSZWYgY2Fj
aGVkQ0dDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMjQyLDggKzI3MSw4IEBAIFdFQkNPUkVfRVhQ
T1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3IKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7Ci0gICAgaWYgKGEuaXNFeHRlbmRlZCgp
IHx8IGIuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChh
LCBiKTsKKyAgICBpZiAoYS5pc091dE9mTGluZSgpIHx8IGIuaXNPdXRPZkxpbmUoKSkKKyAgICAg
ICAgcmV0dXJuIG91dE9mTGluZUNvbXBvbmVudHNzRXF1YWwoYSwgYik7CiAgICAgcmV0dXJuIGEu
bV9jb2xvckFuZEZsYWdzID09IGIubV9jb2xvckFuZEZsYWdzOwogfQogCkBAIC0yNTIsMzEgKzI4
MSwzMSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBjCiAgICAgcmV0
dXJuICEoYSA9PSBiKTsKIH0KIAotaW5saW5lIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25z
dCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCitpbmxpbmUgYm9vbCBvdXRPZkxpbmVDb21wb25l
bnRzc0VxdWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKIHsKLSAgICBpZiAoYS5p
c0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhLmFzRXh0ZW5k
ZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKSAmJiBhLmZsYWdzKCkgPT0gYi5mbGFncygpOworICAgIGlm
IChhLmlzT3V0T2ZMaW5lKCkgJiYgYi5pc091dE9mTGluZSgpKQorICAgICAgICByZXR1cm4gYS5h
c091dE9mTGluZSgpLmNvbXBvbmVudHMoKSA9PSBiLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygp
ICYmIGEuY29sb3JTcGFjZSgpID09IGIuY29sb3JTcGFjZSgpICYmIGEuZmxhZ3MoKSA9PSBiLmZs
YWdzKCk7CiAKLSAgICBBU1NFUlQoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpOwor
ICAgIEFTU0VSVChhLmlzT3V0T2ZMaW5lKCkgfHwgYi5pc091dE9mTGluZSgpKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWlubGluZSBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWxJZ25vcmluZ1Nl
bWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQoraW5saW5lIGJvb2wg
b3V0T2ZMaW5lQ29tcG9uZW50c3NFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xv
ciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7Ci0gICAgaWYgKGEuaXNFeHRlbmRlZCgpICYmIGIuaXNF
eHRlbmRlZCgpKSB7CisgICAgaWYgKGEuaXNPdXRPZkxpbmUoKSAmJiBiLmlzT3V0T2ZMaW5lKCkp
IHsKICAgICAgICAgYXV0byBhRmxhZ3MgPSBhLmZsYWdzKCkgLSBDb2xvcjo6RmxhZ3NJbmNsdWRp
bmdQcml2YXRlOjpTZW1hbnRpYzsKICAgICAgICAgYXV0byBiRmxhZ3MgPSBiLmZsYWdzKCkgLSBD
b2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpTZW1hbnRpYzsKLSAgICAgICAgcmV0dXJuIGEu
YXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpICYmIGFGbGFncyA9PSBiRmxhZ3M7CisgICAg
ICAgIHJldHVybiBhLmFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpID09IGIuYXNPdXRPZkxpbmUo
KS5jb21wb25lbnRzKCkgJiYgYS5jb2xvclNwYWNlKCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYUZs
YWdzID09IGJGbGFnczsKICAgICB9CiAKLSAgICBBU1NFUlQoYS5pc0V4dGVuZGVkKCkgfHwgYi5p
c0V4dGVuZGVkKCkpOworICAgIEFTU0VSVChhLmlzT3V0T2ZMaW5lKCkgfHwgYi5pc091dE9mTGlu
ZSgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdT
ZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKIHsKLSAgICBpZiAo
YS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBleHRlbmRl
ZENvbG9yc0VxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGEsIGIpOworICAgIGlmIChhLmlzT3V0
T2ZMaW5lKCkgfHwgYi5pc091dE9mTGluZSgpKQorICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQ29t
cG9uZW50c3NFcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihhLCBiKTsKIAogICAgIGF1dG8gYUZs
YWdzID0gYS5mbGFncygpIC0gQ29sb3I6OkZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6U2VtYW50aWM7
CiAgICAgYXV0byBiRmxhZ3MgPSBiLmZsYWdzKCkgLSBDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQcml2
YXRlOjpTZW1hbnRpYzsKQEAgLTI5NCwyNyArMzIzLDIyIEBAIGlubGluZSBDb2xvcjo6Q29sb3Io
T3B0aW9uYWw8U1JHQkE8dWludDgKICAgICAgICAgc2V0Q29sb3IoKmNvbG9yLCB0b0ZsYWdzSW5j
bHVkaW5nUHJpdmF0ZShmbGFncykpOwogfQogCi1pbmxpbmUgQ29sb3I6OkNvbG9yKENvbG9yQ29t
cG9uZW50czxmbG9hdD4gY29tcG9uZW50cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBPcHRpb25T
ZXQ8RmxhZ3M+IGZsYWdzKQotewotICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6
Y3JlYXRlKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UpLCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShm
bGFncykpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGUsIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmX3Q8SXNDb2xvclR5cGVXaXRoQ29tcG9uZW50VHlwZTxDb2xvclR5cGUsIGZsb2F0
Pj4qPgogaW5saW5lIENvbG9yOjpDb2xvcihjb25zdCBDb2xvclR5cGUmIGNvbG9yLCBPcHRpb25T
ZXQ8RmxhZ3M+IGZsYWdzKQogewotICAgIHNldEV4dGVuZGVkQ29sb3IoRXh0ZW5kZWRDb2xvcjo6
Y3JlYXRlKGNvbG9yKSwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICBzZXRP
dXRPZkxpbmVDb21wb25lbnRzKE91dE9mTGluZUNvbXBvbmVudHM6OmNyZWF0ZShhc0NvbG9yQ29t
cG9uZW50cyhjb2xvcikpLCBDb2xvclNwYWNlRm9yPENvbG9yVHlwZT4sIHRvRmxhZ3NJbmNsdWRp
bmdQcml2YXRlKGZsYWdzKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZSwgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWZfdDxJc0NvbG9yVHlwZVdpdGhDb21wb25lbnRUeXBlPENvbG9y
VHlwZSwgZmxvYXQ+Pio+CiBpbmxpbmUgQ29sb3I6OkNvbG9yKGNvbnN0IE9wdGlvbmFsPENvbG9y
VHlwZT4mIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogewogICAgIGlmIChjb2xvcikK
LSAgICAgICAgc2V0RXh0ZW5kZWRDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoKmNvbG9yKSwg
dG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKKyAgICAgICAgc2V0T3V0T2ZMaW5lQ29t
cG9uZW50cyhPdXRPZkxpbmVDb21wb25lbnRzOjpjcmVhdGUoYXNDb2xvckNvbXBvbmVudHMoKmNv
bG9yKSksIENvbG9yU3BhY2VGb3I8Q29sb3JUeXBlPiwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUo
ZmxhZ3MpKTsKIH0KIAotaW5saW5lIENvbG9yOjpDb2xvcihSZWY8RXh0ZW5kZWRDb2xvcj4mJiBl
eHRlbmRlZENvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQoraW5saW5lIENvbG9yOjpDb2xv
cihSZWY8T3V0T2ZMaW5lQ29tcG9uZW50cz4mJiBvdXRPZkxpbmVDb21wb25lbnRzLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCiB7Ci0gICAgc2V0RXh0ZW5k
ZWRDb2xvcihXVEZNb3ZlKGV4dGVuZGVkQ29sb3IpLCB0b0ZsYWdzSW5jbHVkaW5nUHJpdmF0ZShm
bGFncykpOworICAgIHNldE91dE9mTGluZUNvbXBvbmVudHMoV1RGTW92ZShvdXRPZkxpbmVDb21w
b25lbnRzKSwgY29sb3JTcGFjZSwgdG9GbGFnc0luY2x1ZGluZ1ByaXZhdGUoZmxhZ3MpKTsKIH0K
IAogaW5saW5lIENvbG9yOjpDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQpAQCAt
MzM0LDE0ICszNTgsMTQgQEAgaW5saW5lIGJvb2wgQ29sb3I6OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bAogCiBpbmxpbmUgQ29sb3I6On5Db2xvcigpCiB7Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgYXNFeHRlbmRlZCgpLmRlcmVmKCk7CisgICAgaWYgKGlzT3V0T2ZMaW5lKCkpCisgICAg
ICAgIGFzT3V0T2ZMaW5lKCkuZGVyZWYoKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIENvbG9yOjpo
YXNoKCkgY29uc3QKIHsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gY29t
cHV0ZUhhc2goYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKSwgYXNFeHRlbmRlZCgpLmNvbG9yU3Bh
Y2UoKSwgZmxhZ3MoKS50b1JhdygpKTsKKyAgICBpZiAoaXNPdXRPZkxpbmUoKSkKKyAgICAgICAg
cmV0dXJuIGNvbXB1dGVIYXNoKGFzT3V0T2ZMaW5lKCkuY29tcG9uZW50cygpLCBjb2xvclNwYWNl
KCksIGZsYWdzKCkudG9SYXcoKSk7CiAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5s
aW5lKCkudmFsdWUsIGZsYWdzKCkudG9SYXcoKSk7CiB9CiAKQEAgLTM2MCwxMCArMzg0LDE1IEBA
IGlubGluZSBib29sIENvbG9yOjp1c2VzQ29sb3JGdW5jdGlvblNlcmkKICAgICByZXR1cm4gZmxh
Z3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlVzZUNvbG9yRnVuY3Rpb25TZXJp
YWxpemF0aW9uKTsKIH0KIAoraW5saW5lIENvbG9yU3BhY2UgQ29sb3I6OmNvbG9yU3BhY2UoKSBj
b25zdAoreworICAgIHJldHVybiBkZWNvZGVkQ29sb3JTcGFjZShtX2NvbG9yQW5kRmxhZ3MpOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBDb2xvcjo6Y2Fs
bE9uVW5kZXJseWluZ1R5cGUoRnVuY3RvciYmIGZ1bmN0b3IpIGNvbnN0CiB7Ci0gICAgaWYgKGlz
RXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jYWxsT25VbmRlcmx5aW5n
VHlwZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgIGlmIChpc091dE9mTGlu
ZSgpKQorICAgICAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUoYXNPdXRPZkxpbmUoKS5jb21w
b25lbnRzKCksIGNvbG9yU3BhY2UoKSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsK
ICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBh
c0lubGluZSgpKTsKIH0KIApAQCAtMzk5LDI2ICs0MjgsMjYgQEAgaW5saW5lIE9wdGlvblNldDxD
b2xvcjo6RmxhZ3NJbmNsdWRpbmdQcgogICAgIHJldHVybiBkZWNvZGVkRmxhZ3MobV9jb2xvckFu
ZEZsYWdzKTsKIH0KIAotaW5saW5lIGJvb2wgQ29sb3I6OmlzRXh0ZW5kZWQoKSBjb25zdAoraW5s
aW5lIGJvb2wgQ29sb3I6OmlzT3V0T2ZMaW5lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmxhZ3Mo
KS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OkV4dGVuZGVkKTsKKyAgICByZXR1cm4g
ZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6Ok91dE9mTGluZSk7CiB9CiAK
IGlubGluZSBib29sIENvbG9yOjppc0lubGluZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFmbGFn
cygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6RXh0ZW5kZWQpOworICAgIHJldHVy
biAhZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6Ok91dE9mTGluZSk7CiB9
CiAKLWlubGluZSBjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0
CitpbmxpbmUgY29uc3QgQ29sb3I6Ok91dE9mTGluZUNvbXBvbmVudHMmIENvbG9yOjphc091dE9m
TGluZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIGRl
Y29kZWRFeHRlbmRlZENvbG9yKG1fY29sb3JBbmRGbGFncyk7CisgICAgQVNTRVJUKGlzT3V0T2ZM
aW5lKCkpOworICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50cyhtX2NvbG9yQW5k
RmxhZ3MpOwogfQogCi1pbmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IENvbG9yOjphc0V4dGVuZGVk
UmVmKCkgY29uc3QKK2lubGluZSBSZWY8Q29sb3I6Ok91dE9mTGluZUNvbXBvbmVudHM+IENvbG9y
Ojphc091dE9mTGluZVJlZigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci0g
ICAgcmV0dXJuIGRlY29kZWRFeHRlbmRlZENvbG9yKG1fY29sb3JBbmRGbGFncyk7CisgICAgQVNT
RVJUKGlzT3V0T2ZMaW5lKCkpOworICAgIHJldHVybiBkZWNvZGVkT3V0T2ZMaW5lQ29tcG9uZW50
cyhtX2NvbG9yQW5kRmxhZ3MpOwogfQogCiBpbmxpbmUgU1JHQkE8dWludDhfdD4gQ29sb3I6OmFz
SW5saW5lKCkgY29uc3QKQEAgLTQzMyw5ICs0NjIsMjEgQEAgaW5saW5lIFBhY2tlZENvbG9yOjpS
R0JBIENvbG9yOjphc1BhY2tlZAogICAgIHJldHVybiBkZWNvZGVkUGFja2VkSW5saW5lQ29sb3Io
bV9jb2xvckFuZEZsYWdzKTsKIH0KIAoraW5saW5lIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBD
b2xvcjo6dHJ5R2V0QXNTUkdCQUJ5dGVzKCkgY29uc3QKK3sKKyAgICBpZiAoaXNJbmxpbmUoKSkK
KyAgICAgICAgcmV0dXJuIGFzSW5saW5lKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30K
KwogaW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVkRmxhZ3MoT3B0aW9uU2V0PEZsYWdzSW5j
bHVkaW5nUHJpdmF0ZT4gZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ2NF90
PihmbGFncy50b1JhdygpKSA8PCBtYXhOdW1iZXJPZkJpdHNJblBvaW50ZXI7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihmbGFncy50b1JhdygpKSA8PCBmbGFnc1NoaWZ0OworfQor
CitpbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRDb2xvclNwYWNlKENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGNvbG9yU3BhY2Up
IDw8IGNvbG9yU3BhY2VTaGlmdDsKIH0KIAogaW5saW5lIHVpbnQ2NF90IENvbG9yOjplbmNvZGVk
SW5saW5lQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IpCkBAIC00NDgsMTggKzQ4OSwyMyBAQCBp
bmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRQYWNrZWRJbmxpCiAgICAgcmV0dXJuIGNvbG9y
LnZhbHVlOwogfQogCi1pbmxpbmUgdWludDY0X3QgQ29sb3I6OmVuY29kZWRFeHRlbmRlZENvbG9y
KFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCitpbmxpbmUgdWludDY0X3QgQ29s
b3I6OmVuY29kZWRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVDb21wb25lbnRzPiYm
IG91dE9mTGluZUNvbXBvbmVudHMpCiB7CiAjaWYgQ1BVKEFERFJFU1M2NCkKLSAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PigmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCkpOworICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KCZvdXRPZkxpbmVDb21wb25lbnRzLmxlYWtSZWYo
KSk7CiAjZWxzZQotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KCZleHRlbmRlZENv
bG9yLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oJm91dE9m
TGluZUNvbXBvbmVudHMubGVha1JlZigpKTsKICNlbmRpZgogfQogCiBpbmxpbmUgT3B0aW9uU2V0
PENvbG9yOjpGbGFnc0luY2x1ZGluZ1ByaXZhdGU+IENvbG9yOjpkZWNvZGVkRmxhZ3ModWludDY0
X3QgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNsdWRpbmdQ
cml2YXRlPjo6ZnJvbVJhdyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUgPj4gbWF4TnVtYmVy
T2ZCaXRzSW5Qb2ludGVyKSk7CisgICAgcmV0dXJuIE9wdGlvblNldDxDb2xvcjo6RmxhZ3NJbmNs
dWRpbmdQcml2YXRlPjo6ZnJvbVJhdyhzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiBmbGFn
c1NoaWZ0KSk7Cit9CisKK2lubGluZSBDb2xvclNwYWNlIENvbG9yOjpkZWNvZGVkQ29sb3JTcGFj
ZSh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sb3JTcGFjZT4o
c3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gY29sb3JTcGFjZVNoaWZ0KSk7CiB9CiAKIGlu
bGluZSBTUkdCQTx1aW50OF90PiBDb2xvcjo6ZGVjb2RlZElubGluZUNvbG9yKHVpbnQ2NF90IHZh
bHVlKQpAQCAtNDcyLDI3ICs1MTgsMjcgQEAgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIENvbG9y
OjpkZWNvZGVkUAogICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IHN0YXRpY19jYXN0PHVp
bnQzMl90Pih2YWx1ZSAmIGNvbG9yVmFsdWVNYXNrKSB9OwogfQogCi1pbmxpbmUgRXh0ZW5kZWRD
b2xvciYgQ29sb3I6OmRlY29kZWRFeHRlbmRlZENvbG9yKHVpbnQ2NF90IHZhbHVlKQoraW5saW5l
IENvbG9yOjpPdXRPZkxpbmVDb21wb25lbnRzJiBDb2xvcjo6ZGVjb2RlZE91dE9mTGluZUNvbXBv
bmVudHModWludDY0X3QgdmFsdWUpCiB7CiAjaWYgQ1BVKEFERFJFU1M2NCkKLSAgICByZXR1cm4g
KmJpdHdpc2VfY2FzdDxFeHRlbmRlZENvbG9yKj4odmFsdWUgJiBjb2xvclZhbHVlTWFzayk7Cisg
ICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8T3V0T2ZMaW5lQ29tcG9uZW50cyo+KHZhbHVlICYgY29s
b3JWYWx1ZU1hc2spOwogI2Vsc2UKLSAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxFeHRlbmRlZENv
bG9yKj4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spKTsKKyAg
ICByZXR1cm4gKmJpdHdpc2VfY2FzdDxPdXRPZkxpbmVDb21wb25lbnRzKj4oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHZhbHVlICYgY29sb3JWYWx1ZU1hc2spKTsKICNlbmRpZgogfQogCiBpbmxpbmUg
dm9pZCBDb2xvcjo6c2V0Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3IsIE9wdGlvblNldDxGbGFn
c0luY2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQogewogICAgIGZsYWdzLmFkZCh7IEZsYWdzSW5jbHVk
aW5nUHJpdmF0ZTo6VmFsaWQgfSk7Ci0gICAgbV9jb2xvckFuZEZsYWdzID0gZW5jb2RlZElubGlu
ZUNvbG9yKGNvbG9yKSB8IGVuY29kZWRGbGFncyhmbGFncyk7CisgICAgbV9jb2xvckFuZEZsYWdz
ID0gZW5jb2RlZElubGluZUNvbG9yKGNvbG9yKSB8IGVuY29kZWRDb2xvclNwYWNlKENvbG9yU3Bh
Y2U6OlNSR0IpIHwgZW5jb2RlZEZsYWdzKGZsYWdzKTsKICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7
CiB9CiAKLWlubGluZSB2b2lkIENvbG9yOjpzZXRFeHRlbmRlZENvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3NJbmNsdWRpbmdQcml2YXRlPiBmbGFncykKK2lu
bGluZSB2b2lkIENvbG9yOjpzZXRPdXRPZkxpbmVDb21wb25lbnRzKFJlZjxPdXRPZkxpbmVDb21w
b25lbnRzPiYmIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE9wdGlvblNldDxGbGFnc0lu
Y2x1ZGluZ1ByaXZhdGU+IGZsYWdzKQogewotICAgIGZsYWdzLmFkZCh7IEZsYWdzSW5jbHVkaW5n
UHJpdmF0ZTo6VmFsaWQsIEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6RXh0ZW5kZWQgfSk7Ci0gICAg
bV9jb2xvckFuZEZsYWdzID0gZW5jb2RlZEV4dGVuZGVkQ29sb3IoV1RGTW92ZShjb2xvcikpIHwg
ZW5jb2RlZEZsYWdzKGZsYWdzKTsKLSAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKKyAgICBmbGFn
cy5hZGQoeyBGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlZhbGlkLCBGbGFnc0luY2x1ZGluZ1ByaXZh
dGU6Ok91dE9mTGluZSB9KTsKKyAgICBtX2NvbG9yQW5kRmxhZ3MgPSBlbmNvZGVkT3V0T2ZMaW5l
Q29tcG9uZW50cyhXVEZNb3ZlKGNvbG9yKSkgfCBlbmNvZGVkQ29sb3JTcGFjZShjb2xvclNwYWNl
KSB8IGVuY29kZWRGbGFncyhmbGFncyk7CisgICAgQVNTRVJUKGlzT3V0T2ZMaW5lKCkpOwogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKQEAgLTUwNSwxNyArNTUxLDE3IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgQ29sb3I6OmVuY28KIAogICAgIGVuY29kZXIgPDwgZmxhZ3MoKS5jb250YWlucyhGbGFn
c0luY2x1ZGluZ1ByaXZhdGU6OlNlbWFudGljKTsKICAgICBlbmNvZGVyIDw8IGZsYWdzKCkuY29u
dGFpbnMoRmxhZ3NJbmNsdWRpbmdQcml2YXRlOjpVc2VDb2xvckZ1bmN0aW9uU2VyaWFsaXphdGlv
bik7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgCisgICAgaWYgKGlzT3V0T2ZMaW5l
KCkpIHsKICAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNvZGVyIDw8IGNvbG9y
U3BhY2UoKTsKIAotICAgICAgICBhdXRvJiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOwot
ICAgICAgICBhdXRvIFtjMSwgYzIsIGMzLCBhbHBoYV0gPSBleHRlbmRlZENvbG9yLmNvbXBvbmVu
dHMoKTsKKyAgICAgICAgYXV0byYgb3V0T2ZMaW5lQ29tcG9uZW50cyA9IGFzT3V0T2ZMaW5lKCk7
CisgICAgICAgIGF1dG8gW2MxLCBjMiwgYzMsIGFscGhhXSA9IG91dE9mTGluZUNvbXBvbmVudHMu
Y29tcG9uZW50cygpOwogICAgICAgICBlbmNvZGVyIDw8IGMxOwogICAgICAgICBlbmNvZGVyIDw8
IGMyOwogICAgICAgICBlbmNvZGVyIDw8IGMzOwogICAgICAgICBlbmNvZGVyIDw8IGFscGhhOwot
ICAgICAgICBlbmNvZGVyIDw8IGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGVuY29kZXIgPDwgZmFsc2U7CkBAIC01NDgsMjcgKzU5NCwyNyBA
QCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxDb2xvcj4gCiAgICAgaWYgKHVzZXND
b2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbikKICAgICAgICAgZmxhZ3MuYWRkKEZsYWdzOjpVc2VD
b2xvckZ1bmN0aW9uU2VyaWFsaXphdGlvbik7CiAKLSAgICBib29sIGlzRXh0ZW5kZWQ7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShpc0V4dGVuZGVkKSkKKyAgICBib29sIGlzT3V0T2ZMaW5lOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNPdXRPZkxpbmUpKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgaWYgKGlzRXh0ZW5kZWQpIHsKLSAgICAgICAgZmxvYXQgYzE7Ci0g
ICAgICAgIGZsb2F0IGMyOwotICAgICAgICBmbG9hdCBjMzsKLSAgICAgICAgZmxvYXQgYWxwaGE7
CisgICAgaWYgKGlzT3V0T2ZMaW5lKSB7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZTsK
KyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGZsb2F0IGMxOwogICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGMxKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IGZsb2F0IGMyOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGMyKSkKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGZsb2F0IGMzOwogICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGMzKSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIGZsb2F0IGFscGhhOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoY29sb3JTcGFjZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAg
ICByZXR1cm4gQ29sb3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoeyBjMSwgYzIsIGMzLCBhbHBo
YSB9LCBjb2xvclNwYWNlKSwgZmxhZ3MgfTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsgT3V0T2ZM
aW5lQ29tcG9uZW50czo6Y3JlYXRlKHsgYzEsIGMyLCBjMywgYWxwaGEgfSksIGNvbG9yU3BhY2Us
IGZsYWdzIH07CiAgICAgfQogCiAgICAgdWludDMyX3QgdmFsdWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU2VyaWFsaXphdGlvbi5j
cHAJKHJldmlzaW9uIDI3Mzc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAK
ICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAj
aW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xv
ci5oCShyZXZpc2lvbiAyNzM3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIK
LSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgotI2luY2x1
ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRXh0ZW5kZWRDb2xvciA6
IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGNv
bnN0IENvbG9yVHlwZSYpOwotICAgIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKENv
bG9yQ29tcG9uZW50czxmbG9hdD4sIENvbG9yU3BhY2UpOwotICAgIAotICAgIGZsb2F0IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9Ci0KLSAgICBjb25zdCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQ+JiBjb21wb25lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRz
OyB9Ci0gICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNw
YWNlOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBkZWNsdHlwZShhdXRvKSBj
YWxsT25VbmRlcmx5aW5nVHlwZShGdW5jdG9yJiYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIEV4
dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiwgQ29sb3JTcGFjZSk7Ci0KLSAgICBD
b2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsKLSAgICBDb2xvclNwYWNlIG1fY29s
b3JTcGFjZTsKLX07Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRXh0ZW5kZWRDb2xv
ciYgYSwgY29uc3QgRXh0ZW5kZWRDb2xvciYgYikKLXsKLSAgICByZXR1cm4gYS5jb2xvclNwYWNl
KCkgPT0gYi5jb2xvclNwYWNlKCkgJiYgYS5jb21wb25lbnRzKCkgPT0gYi5jb21wb25lbnRzKCk7
Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRXh0ZW5kZWRDb2xvciYgYSwgY29u
c3QgRXh0ZW5kZWRDb2xvciYgYikKLXsKLSAgICByZXR1cm4gIShhID09IGIpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IGlubGluZSBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5k
ZWRDb2xvcjo6Y3JlYXRlKGNvbnN0IENvbG9yVHlwZSYgY29sb3IpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRXh0ZW5kZWRDb2xvcihhc0NvbG9yQ29tcG9uZW50cyhjb2xvciksIENvbG9y
U3BhY2VGb3I8Q29sb3JUeXBlPikpOwotfQotCi1pbmxpbmUgUmVmPEV4dGVuZGVkQ29sb3I+IEV4
dGVuZGVkQ29sb3I6OmNyZWF0ZShDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IGNvbXBvbmVudHMsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBFeHRlbmRl
ZENvbG9yKGNvbXBvbmVudHMsIGNvbG9yU3BhY2UpKTsKLX0KLQotaW5saW5lIEV4dGVuZGVkQ29s
b3I6OkV4dGVuZGVkQ29sb3IoQ29sb3JDb21wb25lbnRzPGZsb2F0PiBjb21wb25lbnRzLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCi0gICAgOiBtX2NvbXBvbmVudHMoY29tcG9uZW50cykKLSAgICAs
IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQotewotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiBkZWNsdHlwZShhdXRvKSBFeHRlbmRlZENvbG9yOjpjYWxsT25VbmRlcmx5aW5nVHlwZShG
dW5jdG9yJiYgZnVuY3RvcikgY29uc3QKLXsKLSAgICByZXR1cm4gY2FsbFdpdGhDb2xvclR5cGUo
bV9jb21wb25lbnRzLCBtX2NvbG9yU3BhY2UsIHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9y
KSk7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Nv
bG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNzM3NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTEgKzg0
LDYgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiByb3VuZEFuZAogICAgIHJldHVy
biBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhfdD4+KFNSR0JBPGZsb2F0PiB7IHIsIGcsIGIsIGEg
fSk7CiB9CiAKLUNvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQotICAgIDogQ29sb3Iocm91
bmRBbmRDbGFtcFRvU1JHQkFMb3NzeShjb2xvcikpCi17Ci19Ci0KIENvbG9yOjpDb2xvcihDR0Nv
bG9yUmVmIGNvbG9yLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQogICAgIDogQ29sb3Iocm91bmRB
bmRDbGFtcFRvU1JHQkFMb3NzeShjb2xvciksIGZsYWdzKQogewpAQCAtMTI4LDggKzEyMyw4IEBA
IHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENvbG8KIAogQ0dDb2xvclJlZiBj
YWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAoY29sb3IuaXNJbmxp
bmUoKSkgewotICAgICAgICBzd2l0Y2ggKFBhY2tlZENvbG9yOjpSR0JBIHsgY29sb3IuYXNJbmxp
bmUoKSB9LnZhbHVlKSB7CisgICAgaWYgKGF1dG8gc3JnYiA9IGNvbG9yLnRyeUdldEFzU1JHQkFC
eXRlcygpKSB7CisgICAgICAgIHN3aXRjaCAoUGFja2VkQ29sb3I6OlJHQkEgeyAqc3JnYiB9LnZh
bHVlKSB7CiAgICAgICAgIGNhc2UgUGFja2VkQ29sb3I6OlJHQkEgeyBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayB9LnZhbHVlOiB7CiAgICAgICAgICAgICBzdGF0aWMgQ0dDb2xvclJlZiB0cmFuc3Bh
cmVudENHQ29sb3IgPSBsZWFrQ0dDb2xvcihjb2xvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJh
bnNwYXJlbnRDR0NvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhZGllbnRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAJKHJldmlzaW9uIDI3Mzc2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCwxNyArNTQsMTUgQEAgdm9pZCBHcmFkaWVudDo6Y3JlYXRlQ0dHcmFkaWVudCgpCiAg
ICAgVmVjdG9yPENHRmxvYXQsIDQgKiByZXNlcnZlZFN0b3BzPiBjb2xvckNvbXBvbmVudHM7CiAg
ICAgY29sb3JDb21wb25lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtU3RvcHMgKiA0KTsK
IAotICAgIGJvb2wgaGFzRXh0ZW5kZWRDb2xvcnMgPSBmYWxzZTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHN0b3AgOiBtX3N0b3BzKSB7Ci0KLSAgICAgICAgLy8gSWYgYWxsIHRoZSBzdG9wcyBhcmUg
c1JHQiwgaXQgaXMgZmFzdGVyIHRvIGNyZWF0ZSBhIGdyYWRpZW50IHVzaW5nCi0gICAgICAgIC8v
IGNvbXBvbmVudHMgdGhhbiBDR0NvbG9ycy4KLSAgICAgICAgLy8gRklYTUU6IFJhdGhlciB0aGFu
IGp1c3QgY2hlY2sgZm9yIGV4dGVuZGVkIGNvbG9ycywgd2Ugc2hvdWxkIGNoZWNrIHRoZSBhY3R1
YWwKLSAgICAgICAgLy8gY29sb3Igc3BhY2UsIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGUgY29tcG9u
ZW50cyBhcmUgb3V0c2lkZSBbMC0xXS4KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzMyOTI2
NjA2PgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcgdGhpcyBpbnRvIHR3byBsb29wcyB0
byBhdm9pZCB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIG9mIHRoZQorICAgIC8vIENHQ29sb3JSZWZz
IGluIHRoZSBjb21tb24gY2FzZSBvZiBhbGwgQ29sb3JTcGFjZTo6U1JHQi4KIAotICAgICAgICBp
ZiAoc3RvcC5jb2xvci5pc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICBoYXNFeHRlbmRlZENvbG9y
cyA9IHRydWU7CisgICAgYm9vbCBoYXNPbmx5Qm91bmRlZFNSR0JDb2xvclN0b3BzID0gdHJ1ZTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CisgICAgICAgIC8vIElmIGFs
bCB0aGUgc3RvcHMgYXJlIGJvdW5kZWQgc1JHQiAoYXMgcmVwcmVzZW50ZWQgYnkgdGhlIGNvbG9y
IGhhdmluZyB0aGUgY29sb3Igc3BhY2UKKyAgICAgICAgLy8gQ29sb3JTcGFjZTo6U1JHQiwgaXQg
aXMgZmFzdGVyIHRvIGNyZWF0ZSBhIGdyYWRpZW50IHVzaW5nIGNvbXBvbmVudHMgdGhhbiBDR0Nv
bG9ycy4KKyAgICAgICAgaWYgKHN0b3AuY29sb3IuY29sb3JTcGFjZSgpICE9IENvbG9yU3BhY2U6
OlNSR0IpCisgICAgICAgICAgICBoYXNPbmx5Qm91bmRlZFNSR0JDb2xvclN0b3BzID0gZmFsc2U7
CiAKICAgICAgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBzdG9wLmNvbG9yLmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CiAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29t
cG9uZW50czsKQEAgLTgzLDEwICs4MSwxMCBAQCB2b2lkIEdyYWRpZW50OjpjcmVhdGVDR0dyYWRp
ZW50KCkKICAgICBhdXRvIGV4dGVuZGVkQ29sb3JzR3JhZGllbnRDb2xvclNwYWNlID0gc1JHQkNv
bG9yU3BhY2VSZWYoKTsKICNlbmRpZgogCi0gICAgaWYgKGhhc0V4dGVuZGVkQ29sb3JzKQotICAg
ICAgICBtX2dyYWRpZW50ID0gYWRvcHRDRihDR0dyYWRpZW50Q3JlYXRlV2l0aENvbG9ycyhleHRl
bmRlZENvbG9yc0dyYWRpZW50Q29sb3JTcGFjZSwgY29sb3JzQXJyYXkuZ2V0KCksIGxvY2F0aW9u
cy5kYXRhKCkpKTsKLSAgICBlbHNlCisgICAgaWYgKGhhc09ubHlCb3VuZGVkU1JHQkNvbG9yU3Rv
cHMpCiAgICAgICAgIG1fZ3JhZGllbnQgPSBhZG9wdENGKENHR3JhZGllbnRDcmVhdGVXaXRoQ29s
b3JDb21wb25lbnRzKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yQ29tcG9uZW50cy5kYXRhKCks
IGxvY2F0aW9ucy5kYXRhKCksIG51bVN0b3BzKSk7CisgICAgZWxzZQorICAgICAgICBtX2dyYWRp
ZW50ID0gYWRvcHRDRihDR0dyYWRpZW50Q3JlYXRlV2l0aENvbG9ycyhleHRlbmRlZENvbG9yc0dy
YWRpZW50Q29sb3JTcGFjZSwgY29sb3JzQXJyYXkuZ2V0KCksIGxvY2F0aW9ucy5kYXRhKCkpKTsK
IH0KIAogdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAJKHJldmlzaW9uIDI3Mzc2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0
LDcgKzEyNCw3IEBAIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWQKICAg
ICBSRUxFQVNFX0FTU0VSVChtX2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KTsK
ICAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKICAg
ICAgICAgbV9vZmZzZXRzW2ldID0gZ3JhZGllbnQuc3RvcHMoKVtpXS5vZmZzZXQ7Ci0gICAgICAg
IG1fY29sb3JzW2ldID0gZ3JhZGllbnQuc3RvcHMoKVtpXS5jb2xvci5hc0lubGluZSgpOworICAg
ICAgICBtX2NvbG9yc1tpXSA9ICpncmFkaWVudC5zdG9wcygpW2ldLmNvbG9yLnRyeUdldEFzU1JH
QkFCeXRlcygpOwogICAgIH0KIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIGJvb2wgU2V0SW5saW5l
RmlsbEdyYWRpZW50Ojppc0lubGluZShjb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Zm9yIChhdXRvJiBjb2xvclN0b3AgOiBncmFkaWVudC5zdG9wcygpKSB7Ci0gICAgICAgIGlmICgh
Y29sb3JTdG9wLmNvbG9yLmlzSW5saW5lKCkpCisgICAgICAgIGlmICghY29sb3JTdG9wLmNvbG9y
LnRyeUdldEFzU1JHQkFCeXRlcygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkocmV2aXNp
b24gMjczNzY4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMCArNzIs
MTAgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZwogICAgIGlmIChj
aGFuZ2VGbGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdzKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5z
dHJva2VDb2xvci5pc0lubGluZSgpKQorICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpICYmICFjaGFuZ2VzLm1fc3RhdGUu
c3Ryb2tlQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci5pc0lubGluZSgpKQor
ICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENv
bG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci50cnlHZXRBc1NSR0JBQnl0
ZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpCkBAIC0xMDQsMTMg
KzEwNCwxMyBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uCiAgICAg
fQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4o
Y2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpOworICAgICAgICBhcHBlbmQ8
U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCpjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IudHJ5R2V0
QXNTUkdCQUJ5dGVzKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQogICAgICAgICBhcHBlbmQ8U2V0
U3Ryb2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAogICAg
IGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlKSkKLSAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oY2hhbmdlcy5tX3N0
YXRlLmZpbGxDb2xvci5hc0lubGluZSgpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxD
b2xvcj4oKmNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IudHJ5R2V0QXNTUkdCQUJ5dGVzKCkpOwog
CiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
R3JhZGllbnRDaGFuZ2UpKQogICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50Pigq
Y2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudCwgY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI3Mzc2OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTEzLDggKzExMyw4IEBAIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICoK
IAogTlNDb2xvciAqbnNDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9y
LmlzSW5saW5lKCkpIHsKLSAgICAgICAgc3dpdGNoIChQYWNrZWRDb2xvcjo6UkdCQSB7IGNvbG9y
LmFzSW5saW5lKCkgfS52YWx1ZSkgeworICAgIGlmIChhdXRvIHNyZ2IgPSBjb2xvci50cnlHZXRB
c1NSR0JBQnl0ZXMoKSkgeworICAgICAgICBzd2l0Y2ggKFBhY2tlZENvbG9yOjpSR0JBIHsgKnNy
Z2IgfS52YWx1ZSkgewogICAgICAgICBjYXNlIFBhY2tlZENvbG9yOjpSR0JBIHsgQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2sgfS52YWx1ZTogewogICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJldGFpblB0cjxOU0NvbG9yPj4gY2xlYXJDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aFNS
R0JSZWQ6MCBncmVlbjowIGJsdWU6MCBhbHBoYTowXTsKICAgICAgICAgICAgIHJldHVybiBjbGVh
ckNvbG9yLmdldCgpLmdldCgpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjczNzY4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDMtMDEgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSB0aGUgc2l6ZSBvZiBleHRlbmRlZCBj
b2xvcnMgYnkgc3RvcmluZyB0aGUgY29sb3Igc3BhY2UgaW4gZnJlZSBiaXRzIG9mIHRoZSBvd25p
bmcgQ29sb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMjU4NAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Rpc3BsYXlMaXN0VGVzdHMuY3BwOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6IFJlbW92ZWQuCisgICAgICAgIFVwZGF0
ZSB0ZXN0cyB0byBhY2NvdW50IGZvciByZW1vdmFsIG9mIHRoZSBFeHRlbmRlZENvbG9yIGNsYXNz
LgorICAgICAgICBNZXJnZSBFeHRlbmRlZENvbG9yVGVzdHMuY3BwIHRoYXQgc3RpbGwgbWFrZSBz
ZW5zZSBpbnRvIENvbG9yVGVzdHMuY3BwCisKIDIwMjEtMDMtMDIgIEpvbmF0aGFuIEJlZGFyZCAg
PGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRzY21weV0gQWRkIFVVSUQKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjczNzY4KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcg
KzE3MCw2IEBAIGlmIChFTkFCTEVfV0VCQ09SRSkKICAgICAgICAgVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcAogICAgICAgICBUZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5j
cHAKICAgICAgICAgVGVzdHMvV2ViQ29yZS9Db250ZXh0TWVudUFjdGlvbi5jcHAKLSAgICAgICAg
VGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCiAgICAgICAgIFRlc3RzL1dlYkNv
cmUvRmlsZU1vbml0b3IuY3BwCiAgICAgICAgIFRlc3RzL1dlYkNvcmUvRmxvYXRQb2ludFRlc3Rz
LmNwcAogICAgICAgICBUZXN0cy9XZWJDb3JlL0Zsb2F0UmVjdFRlc3RzLmNwcApJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3Mzc2OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsNyArMTk3LDYgQEAKIAkJMzEyOEE4MTMyMzc2M0ZBQzAwRDkwRDQwIC8qIGxpbmst
d2l0aC1pbWFnZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMjhBODEyMjM3NjNGMEIwMEQ5MEQ0MCAvKiBsaW5rLXdpdGgtaW1hZ2Uu
aHRtbCAqLzsgfTsKIAkJMzEyOEE4MTUyMzc2NDEzMzAwRDkwRDQwIC8qIGltYWdlLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyOEE4
MTQyMzc2NDBGRDAwRDkwRDQwIC8qIGltYWdlLmh0bWwgKi87IH07CiAJCTMxM0MzQTAyMjFFNTY3
QzMwMERCQTg2RSAvKiBTeXN0ZW1QcmV2aWV3QmxvYk5hbWluZy5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxM0MzQTAxMjFFNTY3N0Ew
MERCQTg2RSAvKiBTeXN0ZW1QcmV2aWV3QmxvYk5hbWluZy5odG1sICovOyB9OwotCQkzMTUxMTgx
MDFEQjFBRTQwMDAxNzYzMDQgLyogRXh0ZW5kZWRDb2xvclRlc3RzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNTExODBGMURCMUFERDUwMDE3NjMw
NCAvKiBFeHRlbmRlZENvbG9yVGVzdHMuY3BwICovOyB9OwogCQkzMUI3NkU0MzIzMjk4RTJDMDA3
RkVEMkMgLyogU3lzdGVtUHJldmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxQjc2RTQyMjMyOThFMkIwMDdGRUQyQyAvKiBTeXN0ZW1QcmV2aWV3
Lm1tICovOyB9OwogCQkzMUI3NkU0NTIzMjk5QkRDMDA3RkVEMkMgLyogc3lzdGVtLXByZXZpZXct
dHJpZ2dlci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxQjc2RTQ0MjMyOTlCQTMwMDdGRUQyQyAvKiBzeXN0ZW0tcHJldmlldy10cmln
Z2VyLmh0bWwgKi87IH07CiAJCTMxRTlCREExMjQ3RjRDNjIwMDJFNTFBMiAvKiBXZWJHTFByZXBh
cmVEaXNwbGF5T25XZWJUaHJlYWQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMUU5QkRBMDI0N0Y0QzYyMDAyRTUxQTIgLyogV2ViR0xQcmVwYXJlRGlz
cGxheU9uV2ViVGhyZWFkLm1tICovOyB9OwpAQCAtMTkzMiw3ICsxOTMxLDYgQEAKIAkJMzEyOEE4
MTIyMzc2M0YwQjAwRDkwRDQwIC8qIGxpbmstd2l0aC1pbWFnZS5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImxp
bmstd2l0aC1pbWFnZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyOEE4
MTQyMzc2NDBGRDAwRDkwRDQwIC8qIGltYWdlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBpbWFnZS5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTNDM0EwMTIxRTU2NzdBMDBEQkE4NkUgLyog
U3lzdGVtUHJldmlld0Jsb2JOYW1pbmcuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9
IFN5c3RlbVByZXZpZXdCbG9iTmFtaW5nLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTMxNTExODBGMURCMUFERDUwMDE3NjMwNCAvKiBFeHRlbmRlZENvbG9yVGVzdHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5kZWRDb2xvclRlc3RzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFCNzZFNDIyMzI5OEUyQjAwN0ZFRDJD
IC8qIFN5c3RlbVByZXZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTeXN0ZW1QcmV2aWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUI3
NkU0NDIzMjk5QkEzMDA3RkVEMkMgLyogc3lzdGVtLXByZXZpZXctdHJpZ2dlci5odG1sICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gInN5c3RlbS1wcmV2aWV3LXRyaWdnZXIuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxRTlCREEwMjQ3RjRDNjIwMDJFNTFBMiAvKiBXZWJHTFByZXBhcmVEaXNwbGF5
T25XZWJUaHJlYWQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTFByZXBhcmVEaXNwbGF5
T25XZWJUaHJlYWQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTg1LDcgKzM1
ODMsNiBAQAogCQkJCTI2RjZFMUVGMUFEQzc0OUIwMERFNjk2QiAvKiBERkFNaW5pbWl6ZXIuY3Bw
ICovLAogCQkJCUY0MDk0Q0M2MjU1NDVCRDUwMDNENzNFMyAvKiBEaXNwbGF5TGlzdFRlc3RzLmNw
cCAqLywKIAkJCQk5MzkxNUExNjI0REI2NkM3MDAxOUZGNDMgLyogRG9jdW1lbnRPcmRlci5jcHAg
Ki8sCi0JCQkJMzE1MTE4MEYxREIxQURENTAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3JUZXN0cy5j
cHAgKi8sCiAJCQkJNTc5NjUxRTYyMTZCRkQ1MzAwNkVCRkU1IC8qIEZpZG9IaWRNZXNzYWdlVGVz
dC5jcHAgKi8sCiAJCQkJNTcyQjQwMzUyMTc2QTAyOTAwMEFENDNFIC8qIEZpZG9UZXN0RGF0YS5o
ICovLAogCQkJCTdBMzJENzQ5MUYwMjE1MTUwMDE2MkM0NCAvKiBGaWxlTW9uaXRvci5jcHAgKi8s
CkBAIC01MjkxLDcgKzUyODgsNiBAQAogCQkJCTVDNzk2NDEwMUVCMDI3OEQwMDc1RDc0QyAvKiBF
dmVudE1vZGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREEyOUIyOTIwRkQyQTk5MDBG
MTVDRUQgLyogRXhpdEZ1bGxzY3JlZW5PbkVudGVyUGlQLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUQxMkJFQzAyNDVCRUY4NTAwNEMwQjdBIC8qIEV4aXRQaVBPblN1c3BlbmRWaWRlb0VsZW1lbnQu
bW0gaW4gU291cmNlcyAqLywKLQkJCQkzMTUxMTgxMDFEQjFBRTQwMDAxNzYzMDQgLyogRXh0ZW5k
ZWRDb2xvclRlc3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUYxMUE0MTFBRTYwMDQ0
N0M0QyAvKiBGYWlsZWRMb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU3OTY1MUU3MjE2QkZE
RUQwMDZFQkZFNSAvKiBGaWRvSGlkTWVzc2FnZVRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0EzMkQ3NEExRjAyMTUxNTAwMTYyQzQ0IC8qIEZpbGVNb25pdG9yLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRl
c3RzLmNwcAkocmV2aXNpb24gMjczNzY4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDkgKzI2
LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJUZXN0LmgiCisjaW5jbHVk
ZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29sb3JDb252ZXJzaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db2xv
clNlcmlhbGl6YXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yVHlwZXMuaD4KKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAt
MTY2LDIzICsxNjksMTggQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiB7CiAgICAgQ29sb3IgaW52
YWxpZENvbG9yOwogICAgIEVYUEVDVF9GQUxTRShpbnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAg
ICBFWFBFQ1RfRkFMU0UoaW52YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBv
dGhlckludmFsaWRDb2xvciA9IGludmFsaWRDb2xvcjsKICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJJ
bnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob3RoZXJJbnZhbGlkQ29s
b3IuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIHZhbGlkQ29sb3IgPSBDb2xvcjo6cmVkOwog
ICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
dmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3Igb3RoZXJWYWxpZENvbG9yID0g
dmFsaWRDb2xvcjsKICAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsK
LSAgICBFWFBFQ1RfRkFMU0Uob3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKICAgICB2
YWxpZENvbG9yID0gU1JHQkE8dWludDhfdD4geyAxLCAyLCAzLCA0IH07CiAgICAgRVhQRUNUX1RS
VUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwotICAgIEVYUEVDVF9GQUxTRSh2YWxpZENvbG9yLmlz
RXh0ZW5kZWQoKSk7CiAgICAgYXV0byB2YWxpZENvbG9yQ29tcG9uZW50cyA9IHZhbGlkQ29sb3Iu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25l
bnRzLnJlZCwgMSk7CiAgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAy
KTsKQEAgLTE5MSw3ICsxODksNiBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKIAogICAgIENvbG9y
IHlldEFub3RoZXJWYWxpZENvbG9yKFdURk1vdmUodmFsaWRDb2xvcikpOwogICAgIEVYUEVDVF9U
UlVFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHll
dEFub3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAgICAgYXV0byB5ZXRBbm90aGVyVmFs
aWRDb2xvckNvbXBvbmVudHMgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKICAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJl
ZCwgMSk7CiAgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ncmVl
biwgMik7CkBAIC0yMDAsNyArMTk3LDYgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAKICAgICBv
dGhlclZhbGlkQ29sb3IgPSBXVEZNb3ZlKHlldEFub3RoZXJWYWxpZENvbG9yKTsKICAgICBFWFBF
Q1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0Uob3Ro
ZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAgICAgYXV0byBvdGhlclZhbGlkQ29sb3JDb21w
b25lbnRzID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgIEVY
UEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CiAgICAgRVhQRUNUX0VR
KG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwpAQCAtMjMzLDQgKzIyOSwxOTQg
QEAgVEVTVChDb2xvciwgTHVtaW5hbmNlKQogICAgIEVYUEVDVF9FUShjRGFya2VuZWQuYmx1ZSwg
NzYpOwogfQogCitURVNUKENvbG9yLCBDb25zdHJ1Y3RvcikKK3sKKyAgICBDb2xvciBjMSB7IERp
c3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKworICAgIGF1dG8gW2Nv
bG9yU3BhY2UsIGNvbXBvbmVudHNdID0gYzEuY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjb21wb25lbnRzOworCisgICAgRVhQRUNUX0ZMT0FU
X0VRKDEuMCwgcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgZyk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDAuMjUsIGIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIGFscGhhKTsKKyAgICBF
WFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMSksICJjb2xvcihkaXNwbGF5LXAzIDEgMC41
IDAuMjUpIik7Cit9CisKK1RFU1QoQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKK3sKKyAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICBD
b2xvciBjMihjMSk7CisKKyAgICBhdXRvIFtjb2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGMyLmNv
bG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29t
cG9uZW50czsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgwLjUsIGcpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMS4wLCBhbHBoYSk7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1Mo
YzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOworfQorCitURVNUKENvbG9yLCBB
c3NpZ25tZW50KQoreworICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41
LCAwLjI1LCAxLjAgfSB9OworICAgIENvbG9yIGMyID0gYzE7CisKKyAgICBhdXRvIFtjb2xvclNw
YWNlLCBjb21wb25lbnRzXSA9IGMyLmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAgYXV0
byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
LjAsIHIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOworICAgIEVYUEVDVF9GTE9BVF9F
USgwLjI1LCBiKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7CisgICAgRVhQRUNU
X0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1
KSIpOworfQorCitURVNUKENvbG9yLCBFcXVhbGl0eSkKK3sKKyAgICB7CisgICAgICAgIENvbG9y
IGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworICAgICAg
ICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsK
KyAgICAgICAgRVhQRUNUX0VRKGMxLCBjMik7CisgICAgfQorCisgICAgeworICAgICAgICBDb2xv
ciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAgICAg
ICAgQ29sb3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKKyAg
ICAgICAgRVhQRUNUX05FKGMxLCBjMik7CisgICAgfQorCisgICAgYXV0byBjb21wb25lbnRCeXRl
cyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAxMjgsIDYzLCAxMjcgfTsKKyAgICBDb2xvciByZ2Ix
IHsgY29udmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oY29tcG9uZW50Qnl0ZXMpIH07CisgICAgQ29s
b3IgcmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07CisgICAgRVhQRUNUX05FKHJnYjEsIHJnYjIpOwor
ICAgIEVYUEVDVF9ORShyZ2IyLCByZ2IxKTsKK30KKworVEVTVChDb2xvciwgSGFzaCkKK3sKKyAg
ICB7CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1
LCAxLjAgfSB9OworICAgICAgICBDb2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAu
NSwgMC4yNSwgMS4wIH0gfTsKKyAgICAgICAgRVhQRUNUX0VRKGMxLmhhc2goKSwgYzIuaGFzaCgp
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7
IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworICAgICAgICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OworICAgICAgICBFWFBFQ1RfTkUoYzEuaGFzaCgp
LCBjMi5oYXNoKCkpOworICAgIH0KKworICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1
aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07CisgICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRD
b2xvcjxTUkdCQTxmbG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9OworICAgIENvbG9yIHJnYjIgeyBj
b21wb25lbnRCeXRlcyB9OworICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkp
OworfQorCitURVNUKENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCit7CisgICAgQ29sb3IgYzEgeyBE
aXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07CisgICAgQ29sb3IgYzIo
V1RGTW92ZShjMSkpOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgbW92ZWQgdGhlIG91dCBvZiBs
aW5lIGNvbG9yIHBvaW50ZXIgaW50byBjMiwKKyAgICAvLyBhbmQgc2V0IGMxIHRvIGludmFsaWQg
c28gdGhhdCBpdCBkb2Vzbid0IGNhdXNlIGRlbGV0aW9uLgorICAgIEVYUEVDVF9GQUxTRShjMS5p
c1ZhbGlkKCkpOworCisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpOworCisgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50
czsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgw
LjUsIGcpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMS4wLCBhbHBoYSk7CisgICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIpLCAi
Y29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOworfQorCitURVNUKENvbG9yLCBNb3ZlQXNz
aWdubWVudCkKK3sKKyAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwg
MC4yNSwgMS4wIH0gfTsKKyAgICBDb2xvciBjMiA9IFdURk1vdmUoYzEpOworCisgICAgLy8gV2Ug
c2hvdWxkIGhhdmUgbW92ZWQgdGhlIG91dCBvZiBsaW5lIGNvbG9yIHBvaW50ZXIgaW50byBjMiwK
KyAgICAvLyBhbmQgc2V0IGMxIHRvIGludmFsaWQgc28gdGhhdCBpdCBkb2Vzbid0IGNhdXNlIGRl
bGV0aW9uLgorICAgIEVYUEVDVF9GQUxTRShjMS5pc1ZhbGlkKCkpOworCisgICAgYXV0byBbY29s
b3JTcGFjZSwgY29tcG9uZW50c10gPSBjMi5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAg
IEVYUEVDVF9FUShjb2xvclNwYWNlLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworCisgICAgYXV0
byBbciwgZywgYiwgYWxwaGFdID0gY29tcG9uZW50czsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgx
LjAsIHIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOworICAgIEVYUEVDVF9GTE9BVF9F
USgwLjI1LCBiKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7CisgICAgRVhQRUNU
X0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1
KSIpOworfQorCitDb2xvciBtYWtlQ29sb3IoKQoreworICAgIHJldHVybiBDb2xvciB7IERpc3Bs
YXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKK30KKworVEVTVChDb2xvciwg
UmV0dXJuVmFsdWVzKQoreworICAgIENvbG9yIGMyID0gbWFrZUNvbG9yKCk7CisgICAgRVhQRUNU
X0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1
KSIpOworfQorCitURVNUKENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCit7CisgICAgQ29sb3Ig
cDNDb2xvciB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMC43NSB9IH07Cisg
ICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IucmVkLCAxLjBmKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoc1JHQkFDb2xvci5ncmVlbiwgMC40NjI1MzI4MmYpOworICAgIEVYUEVDVF9GTE9BVF9FUShz
UkdCQUNvbG9yLmJsdWUsIDAuMTQ5MTI3NDhmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFD
b2xvci5hbHBoYSwgMC43NWYpOworfQorCitURVNUKENvbG9yLCBMaW5lYXJTUkdCQ29udmVyc2lv
blRvU1JHQikKK3sKKyAgICBDb2xvciBsaW5lYXJTUkdCQUNvbG9yIHsgTGluZWFyU1JHQkE8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9OworICAgIGF1dG8gc1JHQkFDb2xvciA9IGxp
bmVhclNSR0JBQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIEVYUEVDVF9GTE9BVF9F
UShzUkdCQUNvbG9yLnJlZCwgMS4wZik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3Iu
Z3JlZW4sIDAuNzM1MzU2OTI3Zik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3IuYmx1
ZSwgMC41MzcwOTg3MDZmKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5hbHBoYSwg
MC43NWYpOworfQorCitURVNUKENvbG9yLCBDb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSkKK3sK
KyAgICBDb2xvciBjb2xvciB7IFNSR0JBPGZsb2F0PiB7IDAuLCAwLiwgMS4sIDAuNiB9IH07CisK
KyAgICB7CisgICAgICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0gY29sb3Iu
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoMS4pOworICAgICAgICBFWFBFQ1RfRVEoY29sb3Is
IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIENv
bG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5ID0gY29sb3IuY29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoMC41KTsKKyAgICAgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBj
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAg
ICAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6U1JHQik7CisgICAgICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHIs
IDAuKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGcsIDAuKTsKKyAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKGIsIDEuKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGEsIDAuMyk7CisgICAgfQor
CisgICAgeworICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9y
LmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDAuKTsKKyAgICAgICAgYXV0byBbY29sb3JTcGFj
ZSwgY29tcG9uZW50c10gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5jb2xvclNwYWNlQW5k
Q29tcG9uZW50cygpOworICAgICAgICBFWFBFQ1RfRVEoY29sb3JTcGFjZSwgQ29sb3JTcGFjZTo6
U1JHQik7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29tcG9uZW50czsKKyAgICAgICAg
RVhQRUNUX0ZMT0FUX0VRKHIsIDAuKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGcsIDAuKTsK
KyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGIsIDEuKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VR
KGEsIDAuKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9EaXNwbGF5TGlzdFRlc3RzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRGlzcGxheUxp
c3RUZXN0cy5jcHAJKHJldmlzaW9uIDI3Mzc2OCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9EaXNwbGF5TGlzdFRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcg
KzE1Miw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywgQXBwZW5kSXRlbXMpCiAgICAgICAgIEVY
UEVDVF9UUlVFKGhhbmRsZS0+aXM8RmlsbFJlY3RXaXRoQ29sb3I+KCkpOwogCiAgICAgICAgIGF1
dG8mIGl0ZW0gPSBoYW5kbGUtPmdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKTsKLSAgICAgICAgRVhQ
RUNUX0VRKGl0ZW0uY29sb3IoKS5hc0lubGluZSgpLCBDb2xvcjo6YmxhY2spOworICAgICAgICBF
WFBFQ1RfRVEoKml0ZW0uY29sb3IoKS50cnlHZXRBc1NSR0JBQnl0ZXMoKSwgQ29sb3I6OmJsYWNr
KTsKICAgICAgICAgRVhQRUNUX0VRKGl0ZW0ucmVjdCgpLCBGbG9hdFJlY3QoMCwgMCwgMTAwLCAx
MDApKTsKICAgICB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9F
eHRlbmRlZENvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNzM3NjgpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNw
cAkobm9uZXhpc3RlbnQpCkBAIC0xLDI5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiVGVzdC5oIgotI2luY2x1ZGUgIldURlN0cmluZ1V0aWxp
dGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nv
bG9yU2VyaWFsaXphdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLVRFU1Qo
RXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCi17Ci0gICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8
ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgRVhQRUNUX1RSVUUoYzEuaXNF
eHRlbmRlZCgpKTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGMxLmFzRXh0ZW5kZWQo
KS5jb21wb25lbnRzKCk7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCByKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC4yNSwgYik7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwotICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRl
bmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKGMx
KSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKLX0KLQotVEVTVChFeHRlbmRlZENv
bG9yLCBDb3B5Q29uc3RydWN0b3IpCi17Ci0gICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+
IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKLQotICAgIENvbG9yIGMyKGMxKTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9
IGMyLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4w
LCByKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBnKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MC4yNSwgYik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYWxwaGEpOwotICAgIEVYUEVDVF9F
USgydSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9FUSgydSwgYzIu
YXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAgIEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9y
Q1NTKGMyKSwgImNvbG9yKGRpc3BsYXktcDMgMSAwLjUgMC4yNSkiKTsKLX0KLQotVEVTVChFeHRl
bmRlZENvbG9yLCBBc3NpZ25tZW50KQotewotICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5k
ZWQoKSk7Ci0KLSAgICBDb2xvciBjMiA9IGMxOwotCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFd
ID0gYzIuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKLQotICAgIEVYUEVDVF9GTE9BVF9FUSgx
LjAsIHIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOwotICAgIEVYUEVDVF9GTE9BVF9F
USgwLjI1LCBiKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7Ci0gICAgRVhQRUNU
X0VRKDJ1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKDJ1LCBj
Mi5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25G
b3JDU1MoYzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotfQotCi1URVNUKEV4
dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQotewotICAgIHsKLSAgICAgICAgQ29sb3IgYzEgeyBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7Ci0KLSAgICAgICAgQ29sb3IgYzIgeyBEaXNwbGF5UDM8Zmxv
YXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7Ci0KLSAgICAgICAgRVhQRUNUX0VRKGMxLCBjMik7Ci0gICAgfQotCi0gICAg
ewotICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwg
MS4wIH0gfTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAgICAg
ICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAg
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgICAgIEVYUEVDVF9ORShj
MSwgYzIpOwotICAgIH0KLQotICAgIGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90
PiB7IDI1NSwgMTI4LCA2MywgMTI3IH07Ci0gICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRDb2xvcjxT
UkdCQTxmbG9hdD4+KGNvbXBvbmVudEJ5dGVzKSB9OwotICAgIENvbG9yIHJnYjIgeyBjb21wb25l
bnRCeXRlcyB9OwotICAgIEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKLSAgICBFWFBFQ1RfTkUocmdi
MiwgcmdiMSk7Ci19Ci0KLVRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKLXsKLSAgICB7Ci0gICAg
ICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9
OwotICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgICAgIENvbG9y
IGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgICAg
ICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwotCi0gICAgICAgIEVYUEVDVF9FUShjMS5o
YXNoKCksIGMyLmhhc2goKSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBDb2xvciBjMSB7IERp
c3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKLQotICAgICAgICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4
dGVuZGVkKCkpOwotCi0gICAgICAgIEVYUEVDVF9ORShjMS5oYXNoKCksIGMyLmhhc2goKSk7Ci0g
ICAgfQotCi0gICAgYXV0byBjb21wb25lbnRCeXRlcyA9IFNSR0JBPHVpbnQ4X3Q+IHsgMjU1LCAx
MjgsIDYzLCAxMjcgfTsKLSAgICBDb2xvciByZ2IxIHsgY29udmVydENvbG9yPFNSR0JBPGZsb2F0
Pj4oY29tcG9uZW50Qnl0ZXMpIH07Ci0gICAgQ29sb3IgcmdiMiB7IGNvbXBvbmVudEJ5dGVzIH07
Ci0gICAgRVhQRUNUX05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7Ci19Ci0KLVRFU1QoRXh0
ZW5kZWRDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQotewotICAgIENvbG9yIGMxIHsgRGlzcGxheVAz
PGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7Ci0KLSAgICBDb2xvciBjMihXVEZNb3ZlKGMxKSk7Ci0gICAgLy8gV2Ugc2hv
dWxkIGhhdmUgbW92ZWQgdGhlIGV4dGVuZGVkIGNvbG9yIHBvaW50ZXIgaW50byBjMiwKLSAgICAv
LyBhbmQgc2V0IGMxIHRvIGludmFsaWQgc28gdGhhdCBpdCBkb2Vzbid0IGNhdXNlIGRlbGV0aW9u
LgotICAgIEVYUEVDVF9GQUxTRShjMS5pc0V4dGVuZGVkKCkpOwotICAgIEVYUEVDVF9GQUxTRShj
MS5pc1ZhbGlkKCkpOwotCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gYzIuYXNFeHRlbmRl
ZCgpLmNvbXBvbmVudHMoKTsKLQotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwotICAgIEVY
UEVDVF9GTE9BVF9FUSgwLjUsIGcpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7Ci0gICAgRVhQRUNUX0VRKDF1LCBjMi5hc0V4
dGVuZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1Mo
YzIpLCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotfQotCi1URVNUKEV4dGVuZGVk
Q29sb3IsIE1vdmVBc3NpZ25tZW50KQotewotICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0
PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5k
ZWQoKSk7Ci0KLSAgICBDb2xvciBjMiA9IFdURk1vdmUoYzEpOwotCi0gICAgLy8gV2Ugc2hvdWxk
IGhhdmUgbW92ZWQgdGhlIGV4dGVuZGVkIGNvbG9yIHBvaW50ZXIgaW50byBjMiwKLSAgICAvLyBh
bmQgc2V0IGMxIHRvIGludmFsaWQgc28gdGhhdCBpdCBkb2Vzbid0IGNhdXNlIGRlbGV0aW9uLgot
ICAgIEVYUEVDVF9GQUxTRShjMS5pc0V4dGVuZGVkKCkpOwotICAgIEVYUEVDVF9GQUxTRShjMS5p
c1ZhbGlkKCkpOwotCi0gICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0gYzIuYXNFeHRlbmRlZCgp
LmNvbXBvbmVudHMoKTsKLQotICAgIEVYUEVDVF9GTE9BVF9FUSgxLjAsIHIpOwotICAgIEVYUEVD
VF9GTE9BVF9FUSgwLjUsIGcpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBoYSk7Ci0gICAgRVhQRUNUX0VRKDF1LCBjMi5hc0V4dGVu
ZGVkKCkucmVmQ291bnQoKSk7Ci0gICAgRVhQRUNUX0VRKHNlcmlhbGl6YXRpb25Gb3JDU1MoYzIp
LCAiY29sb3IoZGlzcGxheS1wMyAxIDAuNSAwLjI1KSIpOwotfQotCi1URVNUKEV4dGVuZGVkQ29s
b3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpbmcpCi17Ci0gICAgQ29sb3IqIGMxID0gbmV3IENvbG9y
IHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwotICAgIAotICAg
IEVYUEVDVF9UUlVFKGMxLT5pc0V4dGVuZGVkKCkpOwotCi0gICAgQ29sb3IqIGMyID0gbmV3IENv
bG9yKCpjMSk7Ci0gICAgQ29sb3IqIGMzID0gbmV3IENvbG9yKCpjMik7Ci0KLSAgICBhdXRvIFty
LCBnLCBiLCBhbHBoYV0gPSBjMi0+YXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKLQotICAgIEVY
UEVDVF9GTE9BVF9FUSgxLjAsIHIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGcpOwotICAg
IEVYUEVDVF9GTE9BVF9FUSgwLjI1LCBiKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBhbHBo
YSk7Ci0gICAgRVhQRUNUX0VRKDN1LCBjMi0+YXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotICAg
IEVYUEVDVF9FUShzZXJpYWxpemF0aW9uRm9yQ1NTKCpjMiksICJjb2xvcihkaXNwbGF5LXAzIDEg
MC41IDAuMjUpIik7Ci0KLSAgICBkZWxldGUgYzE7Ci0gICAgRVhQRUNUX0VRKDJ1LCBjMi0+YXNF
eHRlbmRlZCgpLnJlZkNvdW50KCkpOwotCi0gICAgZGVsZXRlIGMyOwotICAgIEVYUEVDVF9FUSgx
dSwgYzMtPmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLQotICAgIGRlbGV0ZSBjMzsKLX0KLQot
Q29sb3IgbWFrZUNvbG9yKCkKLXsKLSAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxmbG9hdD4geyAx
LjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkp
OwotICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwotCi0gICAg
cmV0dXJuIGMxOwotfQotCi1URVNUKEV4dGVuZGVkQ29sb3IsIFJldHVyblZhbHVlcykKLXsKLSAg
ICBDb2xvciBjMiA9IG1ha2VDb2xvcigpOwotICAgIEVYUEVDVF9UUlVFKGMyLmlzRXh0ZW5kZWQo
KSk7Ci0KLSAgICBFWFBFQ1RfRVEoMXUsIGMyLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKLSAg
ICBFWFBFQ1RfRVEoc2VyaWFsaXphdGlvbkZvckNTUyhjMiksICJjb2xvcihkaXNwbGF5LXAzIDEg
MC41IDAuMjUpIik7Ci19Ci0KLVRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdC
KQotewotICAgIENvbG9yIHAzQ29sb3IgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAu
MjUsIDAuNzUgfSB9OwotICAgIEVYUEVDVF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsKLQot
ICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwotICAg
IEVYUEVDVF9GTE9BVF9FUShzUkdCQUNvbG9yLnJlZCwgMS4wZik7Ci0gICAgRVhQRUNUX0ZMT0FU
X0VRKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNDYyNTMyODJmKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
c1JHQkFDb2xvci5ibHVlLCAwLjE0OTEyNzQ4Zik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JB
Q29sb3IuYWxwaGEsIDAuNzVmKTsKLX0KLQotVEVTVChFeHRlbmRlZENvbG9yLCBMaW5lYXJTUkdC
Q29udmVyc2lvblRvU1JHQikKLXsKLSAgICBDb2xvciBsaW5lYXJTUkdCQUNvbG9yIHsgTGluZWFy
U1JHQkE8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDAuNzUgfSB9OwotICAgIEVYUEVDVF9UUlVF
KGxpbmVhclNSR0JBQ29sb3IuaXNFeHRlbmRlZCgpKTsKLQotICAgIGF1dG8gc1JHQkFDb2xvciA9
IGxpbmVhclNSR0JBQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwotICAgIEVYUEVDVF9GTE9B
VF9FUShzUkdCQUNvbG9yLnJlZCwgMS4wZik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29s
b3IuZ3JlZW4sIDAuNzM1MzU2OTI3Zik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHNSR0JBQ29sb3Iu
Ymx1ZSwgMC41MzcwOTg3MDZmKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoc1JHQkFDb2xvci5hbHBo
YSwgMC43NWYpOwotfQotCi1URVNUKEV4dGVuZGVkQ29sb3IsIENvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KQotewotICAgIENvbG9yIGNvbG9yIHsgU1JHQkE8ZmxvYXQ+IHsgMC4sIDAuLCAxLiwg
MC42IH0gfTsKLSAgICBFWFBFQ1RfVFJVRShjb2xvci5pc0V4dGVuZGVkKCkpOwotCi0gICAgewot
ICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KDEuKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoY29sb3JXaXRoQWxw
aGFNdWx0aXBsaWVkQnkuaXNFeHRlbmRlZCgpKTsKLSAgICAgICAgRVhQRUNUX0VRKGNvbG9yLCBj
b2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBDb2xv
ciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5KDAuNSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5LmlzRXh0ZW5kZWQoKSk7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnkuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKLSAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKHIsIDAuKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGcsIDAuKTsKLSAg
ICAgICAgRVhQRUNUX0ZMT0FUX0VRKGIsIDEuKTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKGEs
IDAuMyk7Ci0gICAgfQotCi0gICAgewotICAgICAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRp
cGxpZWRCeSA9IGNvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KDAuKTsKLSAgICAgICAg
RVhQRUNUX1RSVUUoY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkuaXNFeHRlbmRlZCgpKTsKLSAg
ICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeS5hc0V4
dGVuZGVkKCkuY29tcG9uZW50cygpOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEociwgMC4pOwot
ICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoZywgMC4pOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEo
YiwgMS4pOwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEoYSwgMC4pOwotICAgIH0KLX0KLQotfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkRlbGV0ZWQ6IHN2bjprZXl3b3JkcwojIyAtMSArMCwwICMj
Ci1EYXRlIEF1dGhvciBJZCBSZXZpc2lvbiBIZWFkVVJMClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkK
</data>

          </attachment>
      

    </bug>

</bugzilla>