<?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>213948</bug_id>
          
          <creation_ts>2020-07-03 19:08:09 -0700</creation_ts>
          <short_desc>SimpleColor and SRGBA&lt;uint8_t&gt; are essentially the same - let&apos;s converge them</short_desc>
          <delta_ts>2020-07-04 19:11:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>aboxhall</cc>
    
    <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1668707</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 19:08:09 -0700</bug_when>
    <thetext>Now that we have SRGBA&lt;uint8_t&gt;, SimpleColor feels a bit redundant. Let&apos;s see what it will take to replace SimpleColor with SRGBA&lt;uint8_t&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668710</commentid>
    <comment_count>1</comment_count>
      <attachid>403499</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 19:36:32 -0700</bug_when>
    <thetext>Created attachment 403499
Part 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668711</commentid>
    <comment_count>2</comment_count>
      <attachid>403499</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 19:41:16 -0700</bug_when>
    <thetext>Comment on attachment 403499
Part 1

Part 1: Removes red, green, and blue component accessors from SimpleColor, replacing it with easier access to SRGBA&lt;uint8_t&gt; from Color itself. This is done by replacing toSRGBASimpleColorLossy() and toSRGBALossy() on Color, with one templatized toSRGBALossy&lt;&gt;() that can do both.

As a result of this, many call sites that used to deal with SimpleColors now deal with SRGBA&lt;uint8_t&gt;, so utilities like premulitiply/unpremultiply now should be in terms of SRGBA&lt;uint8_t&gt; rather than SimpleColor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668712</commentid>
    <comment_count>3</comment_count>
      <attachid>403500</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 19:43:50 -0700</bug_when>
    <thetext>Created attachment 403500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668716</commentid>
    <comment_count>4</comment_count>
      <attachid>403501</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 19:56:23 -0700</bug_when>
    <thetext>Created attachment 403501
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668717</commentid>
    <comment_count>5</comment_count>
      <attachid>403502</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 19:57:53 -0700</bug_when>
    <thetext>Created attachment 403502
Part 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668719</commentid>
    <comment_count>6</comment_count>
      <attachid>403503</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 20:22:41 -0700</bug_when>
    <thetext>Created attachment 403503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668720</commentid>
    <comment_count>7</comment_count>
      <attachid>403504</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-03 20:26:09 -0700</bug_when>
    <thetext>Created attachment 403504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668758</commentid>
    <comment_count>8</comment_count>
      <attachid>403514</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-04 01:20:29 -0700</bug_when>
    <thetext>Created attachment 403514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668774</commentid>
    <comment_count>9</comment_count>
      <attachid>403521</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-04 06:23:43 -0700</bug_when>
    <thetext>Created attachment 403521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668785</commentid>
    <comment_count>10</comment_count>
      <attachid>403523</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-04 08:45:34 -0700</bug_when>
    <thetext>Created attachment 403523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668803</commentid>
    <comment_count>11</comment_count>
      <attachid>403529</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-04 11:10:44 -0700</bug_when>
    <thetext>Created attachment 403529
Part 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668804</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-04 11:11:13 -0700</bug_when>
    <thetext>Ok, I think Part 1 is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668809</commentid>
    <comment_count>13</comment_count>
      <attachid>403529</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-04 11:32:12 -0700</bug_when>
    <thetext>Comment on attachment 403529
Part 1

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

Love the direction this is going.

&gt; Source/WebCore/ChangeLog:9
&gt; +        Begin converging SimpleColor and SRGBA&lt;uint8_t&gt;, starting with removing usages that
&gt; +        were getting SimpleColors to access or operate on the color&apos;s components.

Converging seems great. The strangest thing about SimpleColor is probably how it can seems to prefer to represent all 4 channels in a single integer.

&gt; Source/WebCore/ChangeLog:12
&gt; +        - Replace toSRGBASimpleColorLossy() with toSRGBALossy&lt;uint8_t&gt;
&gt; +        - Replace toSRGBALossy() with toSRGBALossy&lt;float&gt;().

It worries me that the integer vs. floating point type also implies [0-255] vs. [0-1]. Kind of wish there was a &quot;uint8_t to mean [0-1]&quot; type instead of actual uint8_t, but that would also ruin the code I guess. But it would be good to prevent accidental conversion between that and floating point. Also ignores the fact that floating point [0-255] is a thing.

&gt; Source/WebCore/platform/graphics/Color.cpp:152
&gt; +    return { makeSimpleColor(toSRGBALossy&lt;uint8_t&gt;()), Semantic };

This isn’t so pretty. The makeSimpleColor call here seems strange.

&gt; Source/WebCore/platform/graphics/ColorTypes.h:243
&gt; +struct ARGB {

Not sure if this is a specific enough name to imply &quot;stored as a 32-bit integer with 8-bit components&quot;. Seems like either 32 or 8 might need to be in the name. SRGBA also defines the color space more precisely by including the letter &quot;S&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668818</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-04 12:04:52 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #13)
&gt; Comment on attachment 403529 [details]
&gt; Part 1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403529&amp;action=review
&gt; 
&gt; Love the direction this is going.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Begin converging SimpleColor and SRGBA&lt;uint8_t&gt;, starting with removing usages that
&gt; &gt; +        were getting SimpleColors to access or operate on the color&apos;s components.
&gt; 
&gt; Converging seems great. The strangest thing about SimpleColor is probably
&gt; how it can seems to prefer to represent all 4 channels in a single integer.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        - Replace toSRGBASimpleColorLossy() with toSRGBALossy&lt;uint8_t&gt;
&gt; &gt; +        - Replace toSRGBALossy() with toSRGBALossy&lt;float&gt;().
&gt; 
&gt; It worries me that the integer vs. floating point type also implies [0-255]
&gt; vs. [0-1]. Kind of wish there was a &quot;uint8_t to mean [0-1]&quot; type instead of
&gt; actual uint8_t, but that would also ruin the code I guess. But it would be
&gt; good to prevent accidental conversion between that and floating point. Also
&gt; ignores the fact that floating point [0-255] is a thing.

When you wrote &quot;uint8_t to mean [0-1]&quot; did you mean &quot;uint8_t to mean [0-255]&quot;? Or maybe I am misunderstanding. Either way, one idea for how to better abstract this was to use something like the c++ std::byte type - https://en.cppreference.com/w/cpp/types/byte (not it specifically, but something akin to it). And require something like std::to_integer to convert it to a usable integer. Going to play around with that more after this round of chances.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.cpp:152
&gt; &gt; +    return { makeSimpleColor(toSRGBALossy&lt;uint8_t&gt;()), Semantic };
&gt; 
&gt; This isn’t so pretty. The makeSimpleColor call here seems strange.

Yeah, follow up will make this quite a bit nicer by allowing Color to be constructed from typed colors like SRGBA&lt;uint8_t&gt; directly.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorTypes.h:243
&gt; &gt; +struct ARGB {
&gt; 
&gt; Not sure if this is a specific enough name to imply &quot;stored as a 32-bit
&gt; integer with 8-bit components&quot;. Seems like either 32 or 8 might need to be
&gt; in the name. SRGBA also defines the color space more precisely by including
&gt; the letter &quot;S&quot;.

Yeah, I am not completely happy with this naming yet. Going to keep iterating on it.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668821</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-04 12:20:54 -0700</bug_when>
    <thetext>Committed r263941: &lt;https://trac.webkit.org/changeset/263941&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403529.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668823</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-04 12:21:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/65098023&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1668860</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-04 19:11:14 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #14)
&gt; When you wrote &quot;uint8_t to mean [0-1]&quot; did you mean &quot;uint8_t to mean
&gt; [0-255]&quot;?

I meant what you thought; just didn’t say the words right.

A uint8_t that uses integer values in the range 0-255 to represent channel values in the abstract range 0-1.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403499</attachid>
            <date>2020-07-03 19:36:32 -0700</date>
            <delta_ts>2020-07-03 19:43:48 -0700</delta_ts>
            <desc>Part 1</desc>
            <filename>bug-213948-20200703193631.patch</filename>
            <type>text/plain</type>
            <size>62441</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsaWdodG5lc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omx1bWluYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VP
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJD
b3JlOjphc0FSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNTUkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRGbG9vcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2VpbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjp1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29t
cG9uZW50Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBpeGVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNv
bG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xv
cjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVkQ29t
cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpncmVlbkNvbXBv
bmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Ymx1ZUNvbXBvbmVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHA6CisgICAgICAgIChQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFVzZUNvbnZleEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmRDb2xvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29sb3JG
dW5jdGlvbjo6YW5pbWF0ZSk6CisKIDIwMjAtMDctMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYkNvcmUvU291cmNlcy50eHQ6IFJlbW92ZSAjaWYgRU5BQkxF
X1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcwLDcgKzE5NzAsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTk4NCw3ICs5OTg0LDYgQEAKIAkJN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2
IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQWJvcnRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBE
OTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MzMEQ5ODIxRjgxNUFDMjAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBTaW1w
bGVDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVD
b2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzFDODhDMjQ3QUQ1OTUw
MDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMzFERjlFOTVCMDBEMzM5NUMgLyog
UG9zaXRpb25PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3NpdGlvbk9wdGlvbnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjU2OTcsNyArMjU2OTYsNiBAQAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBT
aW1wbGVDb2xvci5jcHAgKi8sCiAJCQkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBs
ZUNvbG9yLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgzLDEwICsxOTgzLDEwIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFzQ29sb3IoKS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0g
Y29sb3IuZ3JlZW5Db21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOwor
ICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1
ZUFzQ29sb3IoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOwor
ICAgIGcgPSBjb2xvci5ncmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE0ICs5MiwxNCBAQCBzdGF0aWMg
QXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0NvbG9yID0g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIGJ1ZmZl
ci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICBy
ZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAK
ICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7
CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDEwICs3MDEsMTAgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRv
IGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSku
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7
Ci0gICAgZyA9IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWVDb21w
b25lbnQoKTsKKyAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgciA9IGNvbG9y
LnJlZDsKKyAgICBnID0gY29sb3IuZ3JlZW47CisgICAgYiA9IGNvbG9yLmJsdWU7CiB9CiAKIEFY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJl
Y2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKG1fY29sb3IpOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZT4gY3JlYXRlV3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVy
VHlwZSBudW1iZXIpCkBAIC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBE
ZXByZWNhdGVkQ1NTT01SR0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSkKLSAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLnJl
ZENvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2FscGhhKGNyZWF0
ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkpKQorICAgICAg
ICA6IG1fY29sb3IoY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpCisgICAgICAgICwgbV9y
ZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5yZWQpKQorICAgICAgICAsIG1fZ3JlZW4o
Y3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbikpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZSkpCisgICAgICAgICwgbV9hbHBoYShjcmVh
dGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkp
CiAgICAgewogICAgIH0KIAotICAgIFNpbXBsZUNvbG9yIG1fY29sb3I7CisgICAgU1JHQkE8dWlu
dDhfdD4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1f
cmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAg
ICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjIxLDcgKzYyMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246
OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3R5bGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xh
ID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhl
IHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5
IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVh
ciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2Fu
IGJlIHNwZWNpZmllZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitp
bmxpbmUgdWludDhfdCBibGVuZCh1aW50OF90IGZyb20sIHVpbnQ4X3QgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kKHN0YXRpY19j
YXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9n
cmVzcykpOworfQorCiBpbmxpbmUgaW50IGJsZW5kKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNf
Y2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogcHJv
Z3Jlc3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHRlbmVkKCkgY29uc3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAg
ICBpZiAodiA9PSAwLjBmKQpAQCAtMTAzLDcgKzEwMyw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5l
ZCgpIGNvbnN0CiAgICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSB3aGl0ZSkKICAg
ICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTQs
MTQgKzExNCwxNCBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogZmxvYXQgQ29sb3I6
OmxpZ2h0bmVzcygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGF2
b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3BhY2UgYWxnb3JpdGht
cyBmb3IgSFNMLgotICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5KCkp
OworICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5PGZsb2F0PigpKTsK
IH0KIAogZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgY2FuIHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNv
bG9yc3BhY2UgYWxnb3JpdGhtcwogICAgIC8vIGZvciBsdW1pbmFuY2UgKGUuZy4gY29udmVydFRv
WFlaKGMpLnlDb21wb25lbnQoKSkuCi0gICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NS
R0JBTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkpOwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0CkBAIC0xNDksNyArMTQ5LDcgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBj
b25zdAogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAg
IHJldHVybiB7IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07CisgICAgcmV0
dXJuIHsgbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkFMb3NzeTx1aW50OF90PigpKSwgU2VtYW50aWMg
fTsKIH0KIAogc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IENv
bG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CkBAIC0xNTksMjAgKzE1OSw2IEBA
IHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmwKICAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhhc1NpbXBsZSgpLmFzU1JHQkE8Zmxv
YXQ+KCkpIH07CiB9CiAKLVNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCkpOwotICAgIHJldHVybiBhc1Np
bXBsZSgpOwotfQotCi1TUkdCQTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NS
R0JBTG9zc3koKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpOwotfQot
CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgcmV0dXJuIHRzIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEwICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29u
dmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9F
WFBPUlQgU2ltcGxlQ29sb3IgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdDsKLQotICAg
IC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JH
Qi4KLSAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwpAQCAtMjY4LDYgKzI2NSwxMyBAQCBp
bmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6OmludEhh
c2gobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAoreworICAgIGlmIChp
c0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5PFQ+
KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxUPigpOworfQorCiBpbmxpbmUgQ29s
b3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBj
b25zdAogewogICAgIHJldHVybiBhbHBoYSA/IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEu
dmFsdWUoKSkgOiAqdGhpczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJh
Y2tkCiAgICAgaWYgKCFzb3VyY2UuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuIGJhY2tkcm9wOwog
Ci0gICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9
IGJhY2tkcm9wLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byBbc291cmNlUiwg
c291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKKyAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJv
cEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbc291cmNl
Uiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3Rp
bmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCiAg
ICAgU2ltcGxlQ29sb3IgcmVzdWx0OwogICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsg
YWxwaGEgPD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CkBAIC05NywxOCAr
OTcsMTcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGlm
IChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICAvLyBTaW5jZSBwcmVtdWx0aXBseUNlaWxpbmcoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBz
cGVjaWFsLWNhc2UgdGhhdC4KLSAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gZnJvbS5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkg
OiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSB0by5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDog
Q29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgYXV0byBwcmVtdWx0QmxlbmRlZCA9IG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkQ29t
cG9uZW50KCksIHByZW11bHRpcGxpZWRUby5yZWRDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBw
cmVtdWx0aXBsaWVkVG8uZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJD
b3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ibHVlQ29tcG9uZW50KCksIHByZW11bHRpcGxp
ZWRUby5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQo
cHJlbXVsdGlwbGllZEZyb20uYWxwaGFDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmFscGhh
Q29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJv
bSA9IHByZW11bHRpcGxpZWRDZWlsaW5nKGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOwor
ICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCkpOwogCi0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkocHJlbXVsdEJs
ZW5kZWQpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBTUkdCQSB7CisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJl
ZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5n
cmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVlLCBwcm9n
cmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBw
cmVtdWx0aXBsaWVkVG8uYWxwaGEsIHByb2dyZXNzKQorICAgIH07CisKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBsaWVkQmxlbmRlZCkpOwogfQog
CiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xMTgsMTUgKzExNywxNSBAQCBDb2xvciBi
bGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNS
R0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byB0b1NSR0IgPSBm
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbkNv
bXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29tcG9u
ZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGFD
b21wb25lbnQoKSwgdG9TUkdCLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7CisgICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpi
bGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNz
KQorICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNyw0ICsyMzcsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKworLy8gUGl4ZWwgRm9y
bWF0cworCitzdHJ1Y3QgQVJHQiB7CisgICAgdW5zaWduZWQgdmFsdWU7Cit9OworCitjb25zdGV4
cHIgQVJHQiBhc0FSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwg
Y29sb3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH07Cit9CisKK2NvbnN0ZXhwciBTUkdCQTx1
aW50OF90PiBhc1NSR0JBKEFSR0IgY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oY29sb3IudmFsdWUgPj4gMTYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52
YWx1ZSA+PiA4KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUpLCBzdGF0aWNfY2Fz
dDx1aW50OF90Pihjb2xvci52YWx1ZSA+PiAyNCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw0
ICs2Niw0MyBAQCBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmCiAgICAg
cmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCitTUkdCQTxmbG9hdD4gdW5w
cmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvcjsKKyAgICByZXR1cm4geyByIC8gYSwgZyAvIGEsIGIgLyBhLCBhIH07
Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSkK
KyAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OworICAgIGlmIChhID09IDI1NSkKKyAgICAg
ICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3RE
aXZpZGVCeTI1NShyICogYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSksIGEg
fTsKK30KKworU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4gY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBpZiAoIWEp
CisgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICBpZiAoYSA9PSAyNTUpCisgICAg
ICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0
RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlk
ZUJ5MjU1KGcgKiBhICsgMjU0KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1
NShiICogYSArIDI1NCkpLCBhIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVt
dWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90IGMsIHVpbnQ4X3QgYSkKK3sKKyAgICByZXR1
cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworU1JHQkE8dWludDhf
dD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAgICAgICByZXR1
cm4gY29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4odW5wcmVtdWx0aXBs
aWVkQ29tcG9uZW50Qnl0ZShyLCBhKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVucHJlbXVsdGlw
bGllZENvbXBvbmVudEJ5dGUoZywgYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih1bnByZW11bHRp
cGxpZWRDb21wb25lbnRCeXRlKGIsIGEpKSwgYSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEx
IEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNSR0JB
PGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+
IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHBy
ZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHVucHJl
bXVsdGlwbGllZChTUkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVz
Y2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDE4IEBAIGNvbnN0
ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4gYnl0ZSAvIDI1
NS4wZjsKIH0KIAordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25z
dCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4g
dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+JiBjb2xvcikKK3sKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRz
WzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1szXSkgfTsKK30KKwogY29u
c3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAg
IHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5k
ZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0g
YzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwog
fQogCi1TUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK1NS
R0JBPGZsb2F0PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBj
b25zdAogewogICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4
IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAg
LTQ5LDExICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0
aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKLSAgICBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5
KCkgY29uc3Q7Ci0KICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29sIGlzQmxhY2so
KSBjb25zdDsKIAorICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2Ug
Y29sb3JzIGludG8gc1JHQi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JH
QkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQorICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkFGbG9h
dENvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgICAgIDogbV9jb21wb25lbnRzKGMxLCBj
MiwgYzMsIGFscGhhKQpAQCAtNjEsNiArNzAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xv
c3N5KCkgY29uc3Q7CisKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsK
ICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9u
IDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwyOSArMTUyLDI5IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNpbXBsZUNvbG9y
IHBpeGVsIHsgKmRlc3QgfTsKKyAgICAgICAgYXV0byBwaXhlbCA9IHRvU1JHQkEoQVJHQiB7ICpk
ZXN0IH0pOwogCi0gICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuaXNWaXNpYmxlKCkpIHsK
KyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5hbHBoYSkgewogICAgICAgICAgICAgc2V0
UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0g
cHJlbXVsdGlwbHlGbG9vcmluZyhwaXhlbCk7CisgICAgICAgICAgICBwaXhlbCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhwaXhlbCk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9IDI1NSAtIGE7CiAK
LSAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICogYSArIHBpeGVsLnJlZENvbXBvbmVudCgp
ICogZCk7Ci0gICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyBwaXhlbC5ncmVlbkNv
bXBvbmVudCgpICogZCk7Ci0gICAgICAgIGIgPSBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhl
bC5ibHVlQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgYSArPSBmYXN0RGl2aWRlQnkyNTUoZCAq
IHBpeGVsLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIg
KiBhICsgcGl4ZWwucmVkICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEg
KyBwaXhlbC5ncmVlbiAqIGQpOworICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsg
cGl4ZWwuYmx1ZSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwu
YWxwaGEpOwogCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIs
IGEpOworICAgICAgICBhdXRvIHJlc3VsdCA9IFNSR0JBPHVpbnQ4X3Q+IHsgciwgZywgYiwgYSB9
OwogCiAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcmVzdWx0
ID0gdW5wcmVtdWx0aXBseShyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0ID0gdW5wcmVtdWx0
aXBsaWVkKHJlc3VsdCk7CiAKLSAgICAgICAgKmRlc3QgPSByZXN1bHQudmFsdWVBc0FSR0IoKTsK
KyAgICAgICAgKmRlc3QgPSB0b0FSR0IocmVzdWx0KS52YWx1ZTsKICAgICB9CiAKICAgICBzdGF0
aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0yMjYsMTIgKzIyNiwx
MiBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmICFhKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgYXV0byByZXN1bHQgPSBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgYSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gU1JHQkE8dWludDhfdD4geyBy
LCBnLCBiLCBhIH07CiAKICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1
KQotICAgICAgICAgICAgcmVzdWx0ID0gcHJlbXVsdGlwbHlGbG9vcmluZyhyZXN1bHQpOworICAg
ICAgICAgICAgcmVzdWx0ID0gcHJlbXVsdGlwbGllZEZsb29yaW5nKHJlc3VsdCk7CiAKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC52YWx1ZUFzQVJHQigpOworICAgICAgICByZXR1cm4gYXNBUkdCKHJl
c3VsdCkudmFsdWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21l
bnQ+IG1fcGl4ZWxzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVDb2xvci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVNpbXBsZUNvbG9yIHByZW11bHRpcGx5Rmxvb3JpbmcoU2ltcGxl
Q29sb3IgY29sb3IpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKLSAgICBpZiAo
IWEgfHwgYSA9PSAyNTUpCi0gICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKGZhc3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVCeTI1NShnICogYSks
IGZhc3REaXZpZGVCeTI1NShiICogYSksIGEpOwotfQotCi1TaW1wbGVDb2xvciBwcmVtdWx0aXBs
eUNlaWxpbmcoU2ltcGxlQ29sb3IgY29sb3IpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBj
b2xvcjsKLSAgICBpZiAoIWEgfHwgYSA9PSAyNTUpCi0gICAgICAgIHJldHVybiBjb2xvcjsKLSAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGZhc3REaXZpZGVCeTI1NShyICogYSArIDI1NCksIGZh
c3REaXZpZGVCeTI1NShnICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShiICogYSArIDI1NCks
IGEpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQxNl90IHVucHJlbXVsdGlwbHlDaGFubmVsKHVp
bnQ4X3QgYywgdWludDhfdCBhKQotewotICAgIHJldHVybiAoZmFzdE11bHRpcGx5QnkyNTUoYykg
KyBhIC0gMSkgLyBhOwotfQotCi1TaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9y
IGNvbG9yKQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8
IGEgPT0gMjU1KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcih1bnByZW11bHRpcGx5Q2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBseUNoYW5uZWwoZywg
YSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGIsIGEpLCBhKTsKLX0KLQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDExICs0Miw3IEBA
IHB1YmxpYzoKICAgICBjb25zdGV4cHIgdWludDMyX3QgdmFsdWVBc0FSR0IoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQogCi0gICAgY29uc3RleHByIHVpbnQ4X3QgcmVkQ29tcG9uZW50KCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAxNjsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGdy
ZWVuQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiA4OyB9Ci0gICAgY29uc3Rl
eHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAg
ICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWUgPj4gMjQ7IH0KLQogICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQo
KSBjb25zdCB7IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgp
KTsgfQogCiAgICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBhbHBo
YUNvbXBvbmVudCgpID09IDB4RkY7IH0KQEAgLTYyLDcgKzU4LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIHJlZENvbXBvbmVudCgpKSwg
c3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGdyZWVuQ29tcG9uZW50KCkpLCBzdGF0aWNfY2Fz
dDx1aW50OF90PigweEZGIC0gYmx1ZUNvbXBvbmVudCgpKSwgYWxwaGEgfTsKICAgICB9CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQSgpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBhc1NSR0JBKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxv
YXQ+KQorICAgICAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQocmVkQ29t
cG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBvbmVudCgpKSwgY29u
dmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChz
dGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikKKyAgICAgICAgICAgIHJldHVybiB7IHJlZENvbXBv
bmVudCgpLCBncmVlbkNvbXBvbmVudCgpLCBibHVlQ29tcG9uZW50KCksIGFscGhhQ29tcG9uZW50
KCkgfTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgogICAgIGNvbnN0ZXhw
ciB1aW50OF90IGdldCgpIGNvbnN0CkBAIC03OSw2ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgorICAgIGNvbnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgPj4gMTY7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBv
bmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gODsgfQorICAgIGNvbnN0ZXhwciB1aW50
OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKICAgICB1aW50
MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKIApAQCAtOTAsMTMgKzk2LDkgQEAgY29uc3RleHByIFNp
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvcihjb25zdCBTUkdCQTx1aW50OF90PiYpOwogU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCi1TaW1wbGVDb2xvciBwcmVtdWx0aXBseUZs
b29yaW5nKFNpbXBsZUNvbG9yKTsKLVNpbXBsZUNvbG9yIHByZW11bHRpcGx5Q2VpbGluZyhTaW1w
bGVDb2xvcik7Ci1TaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yKTsKLQogaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewotICAg
IHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOworICAgIHJldHVybiBhLnZhbHVlQXNBUkdC
KCkgPT0gYi52YWx1ZUFzQVJHQigpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBs
ZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIpCkBAIC0xMTYsMjUgKzExOCwxNCBAQCBjb25zdGV4cHIg
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiAKIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWludDhfdD4mIHNSR0JBKQogewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gc1JHQkE7Ci0gICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OworICAgIHJl
dHVybiB7IHNSR0JBLnJlZCwgc1JHQkEuZ3JlZW4sIHNSR0JBLmJsdWUsIHNSR0JBLmFscGhhIH07
CiB9CiAKIGlubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAgIHJldHVy
biB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUociksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZyks
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYiksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkgfTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JB
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBTaW1wbGVD
b2xvcjo6YXNTUkdCQSgpIGNvbnN0Ci17Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Zsb2F0
aW5nX3BvaW50X3Y8VD4pCi0gICAgICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQo
KSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9OwotICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIHsgcmVkQ29tcG9uZW50KCksIGdyZWVuQ29tcG9uZW50KCksIGJsdWVDb21wb25lbnQoKSwg
YWxwaGFDb21wb25lbnQoKSB9OwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFt
ZXNwYWNlIHN0ZCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
Lm1tCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM5Niw3ICszOTYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZh
CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAg
YXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICBb
c3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9t
VmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAgLTQzOSw3ICs0MzksNyBA
QCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1CiB7CiAgICAgaWYgKCFp
c0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICBbc3RhdGljX2Nhc3Q8Q0FC
YXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQChyKSwgQChn
KSwgQChiKSwgQChhKV1dOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcwogICAgICAgICByZXR1cm47CiAKICAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6
Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NSR0JBTG9zc3k8dWludDhfdD4oKTsK
ICAgICAgICAgcmV0dXJuIEBbQChyKSwgQChnKSwgQChiKSwgQChhKV07CiAgICAgfSkuZ2V0KCld
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24g
MjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsOCArMzY3LDggQEAg
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2ltcGxlQ29s
b3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIENHRmxvYXQgYVs0XSA9
IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50
KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25l
bnQoKSB9OworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3Jl
ZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxD
QUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBD
QUNGQW5pbWF0aW9uU2V0RnJvbVZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0K
QEAgLTQxOSw4ICs0MTksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFs
dWUoCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
Ci0gICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxl
Q29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRz
LnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhh
IH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JD
cmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRUb1ZhbHVlKG1fYW5pbWF0aW9uLmdl
dCgpLCB2LmdldCgpKTsKIH0KQEAgLTQ4OSw4ICs0ODksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25XaW46OnNldFZhbHVlcyhjCiAgICAgICAgIAogICAgIFJldGFpblB0cjxDRk11dGFibGVB
cnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNp
emUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVl
W2ldLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIENHRmxvYXQgYVs0XSA9IHsg
c2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCks
IHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQo
KSB9OworICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZVtpXS50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9u
ZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgICAg
IFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQs
IGEpKTsKICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDkgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZAogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CiAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKICAgICAgICAgICAg
IHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBhdXRvIHBpeGVsQ29sb3Ig
PSB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0pOwotICAgICAgICAgICAgcGl4
ZWxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENvbXBv
bmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9va1Vw
VGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29tcG9u
ZW50KCkpOwotICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbHlDZWlsaW5nKHBpeGVsQ29s
b3IpLnZhbHVlQXNBUkdCKCk7CisgICAgICAgICAgICBhdXRvIHBpeGVsQ29tcG9uZW50cyA9IHVu
cHJlbXVsdGlwbGllZCh0b1NSR0JBKEFSR0IgeyAqcGl4ZWwgfSkpOworICAgICAgICAgICAgcGl4
ZWxDb21wb25lbnRzID0geyBsb29rVXBUYWJsZVtwaXhlbENvbXBvbmVudHMucmVkXSwgbG9va1Vw
VGFibGVbcGl4ZWxDb21wb25lbnRzLmdyZWVuXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRz
LmJsdWVdLCBwaXhlbENvbXBvbmVudHMuYWxwaGEgfTsKKyAgICAgICAgICAgICpwaXhlbCA9IHRv
QVJHQihwcmVtdWx0aXBsaWVkQ2VpbGluZyhwaXhlbENvbXBvbmVudHMpKS52YWx1ZTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3Vy
ZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhl
aWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05h
dGl2ZUltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNjM5MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJv
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBDb2xvciBuYXRpdmVJbWFnZVNp
bmdsZVBpeGVsU29saWRDb2xvcihjCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCiAgICAgdW5z
aWduZWQqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIHVucHJlbXVsdGlw
bHkoU2ltcGxlQ29sb3IgeyAqcGl4ZWwgfSk7CisgICAgcmV0dXJuIHRvQVJHQih1bnByZW11bHRp
cGxpZWQodG9TUkdCQShBUkdCIHsgKnBpeGVsIH0pKSkudmFsdWU7CiB9CiAKIHZvaWQgZHJhd05h
dGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkocmV2aXNp
b24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMSArMTExLDEx
IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW8KICAgICAvLyBTZXQg
bGlnaHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9IDE7
CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFTaW1wbGVD
b2xvckxvc3N5KCk7CisgICAgYXV0byBjb2xvciA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9z
c3k8dWludDhfdD4oKTsKIAotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yUmVkID0gc2ltcGxlQ29s
b3IucmVkQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IHNpbXBs
ZUNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JCbHVlID0g
c2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yUmVk
ID0gY29sb3IucmVkOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBjb2xvci5ncmVl
bjsKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBjb2xvci5ibHVlOwogICAgIGZsb2F0
QXJndW1lbnRzLnBhZGRpbmc0ID0gMDsKIAogICAgIGlmIChtX2xpZ2h0U291cmNlLT50eXBlKCkg
PT0gTFNfUE9JTlQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDA1LDEwICs0MDUsMTAgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3
TGlnaHRpbmcoVWludDhDbGFtcAogICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWln
aHQgLSAxOwogICAgIAogICAgIGlmIChvcGVyYXRpbmdDb2xvclNwYWNlKCkgPT0gQ29sb3JTcGFj
ZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9MaW5lYXJTUkdC
QShtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KSk7CiAgICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9y
ID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgICAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAg
ICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxv
YXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0KICAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRp
bmdEYXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyAr
MTEwLDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlm
IChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
c1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9u
IDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xv
cihzUkdCQUNvbG9yKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6
OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwog
CiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYg
KCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90
c0ZvckRvY3VtZW4KICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdyYW1tYXJQYXR0
ZXJuQ29sb3IgeyBtYWtlU2ltcGxlQ29sb3IoMCwgMTI4LCAwKSB9OwogCiAgICAgY29uc3QgU2lt
cGxlQ29sb3ImIHBhdHRlcm5Db2xvciA9IHN0eWxlLm1vZGUgPT0gRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9yIDogc3BlbGxpbmdQYXR0
ZXJuQ29sb3I7Ci0gICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0dGVy
bkNvbG9yLnJlZENvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgcGF0
dGVybkNvbG9yLmJsdWVDb21wb25lbnQoKSwgcGF0dGVybkNvbG9yLmFscGhhQ29tcG9uZW50KCkp
OworICAgIGF1dG8gcGF0dGVybkNvbG9yQ29tcG9uZW50cyA9IHBhdHRlcm5Db2xvci5hc1NSR0JB
PHVpbnQ4X3Q+KCk7CisgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0
dGVybkNvbG9yQ29tcG9uZW50cy5yZWQsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMuZ3JlZW4sIHBh
dHRlcm5Db2xvckNvbXBvbmVudHMuYmx1ZSwgcGF0dGVybkNvbG9yQ29tcG9uZW50cy5hbHBoYSk7
CiAKICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlID0gZ2V0VXNlclRvQmFzZUNUTShj
b250ZXh0KTsKICAgICBDR1BvaW50IHBoYXNlID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3Jt
KHBvaW50LCB1c2VyVG9CYXNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMiw3ICsxNDAyLDcgQEAgQ29s
b3IgUmVuZGVyVGhlbWU6OmRpc2FibGVkVGV4dENvbG9yKGNvbgogICAgIC8vIElmIHRoZXJlJ3Mg
bm90IHZlcnkgbXVjaCBjb250cmFzdCBiZXR3ZWVuIHRoZSBkaXNhYmxlZCBjb2xvciBhbmQgdGhl
IGJhY2tncm91bmQgY29sb3IsCiAgICAgLy8ganVzdCBsZWF2ZSB0aGUgdGV4dCBjb2xvciBhbG9u
ZS4gV2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgYSBnb29kIGNvbnRyYXN0IGNvbG9yIHNjaGVtZSBz
byB0aGF0IGl0IGhhcyByZWFsbHkgYmFkIGNvbnRyYXN0LgogICAgIC8vIElmIHRoZSBjb250cmFz
dCB3YXMgYWxyZWFkeSBwb29yLCB0aGVuIGl0IGRvZXNuJ3QgZG8gYW55IGdvb2QgdG8gY2hhbmdl
IGl0IHRvIGEgZGlmZmVyZW50IHBvb3IgY29udHJhc3QgY29sb3Igc2NoZW1lLgotICAgIGlmIChj
b250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUxvc3N5KCksIGJhY2tncm91bmRDb2xv
ci50b1NSR0JBTG9zc3koKSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUpCisgICAgaWYgKGNvbnRy
YXN0UmF0aW8oZGlzYWJsZWRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCksIGJhY2tncm91bmRD
b2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpIDwgbWluQ29sb3JDb250cmFzdFZhbHVlKQogICAg
ICAgICByZXR1cm4gdGV4dENvbG9yOwogCiAgICAgcmV0dXJuIGRpc2FibGVkQ29sb3I7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAy
NjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwNTUsNyArMTA1NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50QnV0dG9uRGVjb3JhdGkKIHN0YXRpYyBib29sIHNob3VsZFVzZUNvbnZleEdyYWRpZW50KGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJh
Y2tncm91bmRDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJh
Y2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgZmxvYXQgbGFyZ2VzdE5v
bkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1cm4gYSA+IDAu
NSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgdGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmQKIHsKICAgICAvLyBVc2VzIHRoZSBXQ0FHIDIuMCBkZWZpbml0aW9uIG9mIGxlZ2liaWxpdHk6
IGEgY29udHJhc3QgcmF0aW8gb2YgNC41OjEgb3IgZ3JlYXRlci4KICAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvV0NBRzIwLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJhc3QKLSAgICBy
ZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IudG9TUkdCQUxvc3N5KCksIGJhY2tncm91bmRD
b2xvci50b1NSR0JBTG9zc3koKSkgPiA0LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4
dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKSkgPiA0LjU7CiB9CiAKIHN0YXRpYyBDb2xvciBhZGp1c3RDb2xvckZvclZpc2li
aWxpdHlPbkJhY2tncm91bmQoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25J
bXBsLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtODEsMTUgKzgxLDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50
KiwgZmxvYXQgcHJvZ3Jlc3MsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQp
CiAgICAgewotICAgICAgICBhdXRvIHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0ZWQudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25N
b2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
biA9IHRvQXRFbmRPZkR1cmF0aW9uKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAg
ICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9u
TW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CisgICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlv
bigpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICAKLSAgICAgICAgZmxvYXQgcmVk
ID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20ucmVkQ29t
cG9uZW50KCksIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5yZWRDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQucmVkQ29tcG9uZW50KCkpOwotICAgICAg
ICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1w
bGVGcm9tLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCksIHNpbXBs
ZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmdyZWVu
Q29tcG9uZW50KCkpOwotICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUby5ibHVl
Q29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWVDb21wb25lbnQoKSwgc2lt
cGxlQW5pbWF0ZWQuYmx1ZUNvbXBvbmVudCgpKTsKLSAgICAgICAgZmxvYXQgYWxwaGEgPSBCYXNl
OjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5hbHBoYUNvbXBvbmVu
dCgpLCBzaW1wbGVUby5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5h
bHBoYUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICAg
ICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBs
ZUZyb20ucmVkLCBzaW1wbGVUby5yZWQsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLnJlZCwgc2lt
cGxlQW5pbWF0ZWQucmVkKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHBy
b2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uZ3JlZW4sIHNp
bXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuLCBzaW1wbGVBbmltYXRlZC5ncmVlbik7CisgICAg
ICAgIGZsb2F0IGJsdWUgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2lt
cGxlRnJvbS5ibHVlLCBzaW1wbGVUby5ibHVlLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVl
LCBzaW1wbGVBbmltYXRlZC5ibHVlKTsKKyAgICAgICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmlt
YXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5hbHBoYSwgc2ltcGxlVG8uYWxw
aGEsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmFscGhhLCBzaW1wbGVBbmltYXRlZC5hbHBoYSk7
CiAgICAgICAgIAogICAgICAgICBhbmltYXRlZCA9IG1ha2VTaW1wbGVDb2xvcihyb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4pLCBy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KGFscGhhKSk7CiAgICAgfQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgcHVibGljOgogICAgICAgICBp
ZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
ICAgIAotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3IudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJvbUNvbG9yLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gdG9Db2xvci50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgICAgICBmbG9hdCByZWQgPSBzaW1wbGVGcm9tLnJl
ZENvbXBvbmVudCgpIC0gc2ltcGxlVG8ucmVkQ29tcG9uZW50KCk7Ci0gICAgICAgIGZsb2F0IGdy
ZWVuID0gc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgpIC0gc2ltcGxlVG8uZ3JlZW5Db21wb25l
bnQoKTsKLSAgICAgICAgZmxvYXQgYmx1ZSA9IHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpIC0g
c2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpOworICAgICAgICBmbG9hdCByZWQgPSBzaW1wbGVGcm9t
LnJlZCAtIHNpbXBsZVRvLnJlZDsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdy
ZWVuIC0gc2ltcGxlVG8uZ3JlZW47CisgICAgICAgIGZsb2F0IGJsdWUgPSBzaW1wbGVGcm9tLmJs
dWUgLSBzaW1wbGVUby5ibHVlOwogCiAgICAgICAgIHJldHVybiBzdGQ6Omh5cG90KHJlZCwgZ3Jl
ZW4sIGJsdWUpOwogICAgIH0KQEAgLTEyNiwxNCArMTI2LDE0IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50Kikgb3ZlcnJpZGUKICAgICB7Ci0gICAg
ICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwot
ICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
ICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwog
CiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhhIG9uIHJlc3VsdCB0
byAxMDAlIG9wYXF1ZS4KICAgICAgICAgbV90byA9IG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
ICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkQ29tcG9uZW50KCkgKyBz
aW1wbGVGcm9tLnJlZENvbXBvbmVudCgpKSwKLSAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoc2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSArIHNpbXBsZUZyb20uZ3JlZW5Db21w
b25lbnQoKSksCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRv
LmJsdWVDb21wb25lbnQoKSArIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpKQorICAgICAgICAg
ICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5yZWQgKyBzaW1wbGVGcm9tLnJl
ZCksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVu
ICsgc2ltcGxlRnJvbS5ncmVlbiksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHNpbXBsZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpCiAgICAgICAgICk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wNy0wMyAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAxIG9mIFNpbXBsZUNvbG9yIGFu
ZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252ZXJn
ZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTM5NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAg
QWRhcHQgdG8gdXNlIHRlbXBsYXRpemVkIHRvU1JHQkFMb3NzeTxmbG9hdC91aW50OF90Pi4KKwog
MjAyMC0wNy0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHN1cHBvcnQgZm9yIEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJl
dmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU2LDcgKzY1Niw3IEBAIGJvb2wgV2ViRnJhbWU6
OmdldERvY3VtZW50QmFja2dyb3VuZENvbG8KICAgICBpZiAoIWJnQ29sb3IuaXNWYWxpZCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3Iu
dG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKTsKICAgICAqcmVkID0gcjsKICAgICAqZ3JlZW4gPSBnOwogICAgICpibHVl
ID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlLm1tCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIHN0YXRpYyBOU09iamVjdCogYW5pbWF0
aW9uVmFsdWVGcm9tS2V5ZnIKICAgICAgICAgcmV0dXJuIEAoa2V5ZnJhbWVWYWx1ZS5udW1iZXJW
YWx1ZSgpKTsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZTo6S2V5ZnJhbWVWYWx1ZTo6Q29sb3JLZXlUeXBlOiB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBrZXlmcmFtZVZhbHVlLmNvbG9yVmFsdWUo
KS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICAgICAgcmV0dXJuIEBbIEAociksIEAoZyks
IEAoYiksIEAoYSkgXTsKICAgICB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkyNSkKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIwLTA3LTAzICBTYW0gV2Vpbmln
ICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3IgYW5k
IFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZlcmdl
IHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
Mzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToK
KyAgICAgICAgQWRhcHQgdGVzdHMgdG8gdXNlIHRlbXBsYXRpemVkIHRvU1JHQkFMb3NzeTxmbG9h
dC91aW50OF90Pi4KKwogMjAyMC0wNy0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1F
X0lOQ09NUExFVEUKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyAr
MzgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkKIHsKICAgICBDb2xvciBjb2xvciA9
IENvbG9yOjp3aGl0ZTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JH
QkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9z
c3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC01NCw3ICs1
NCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogewogICAgIENvbG9yIGNvbG9yID0g
Q29sb3I6OmJsYWNrOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdC
QUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTcwLDcgKzcw
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogewogICAgIENvbG9yIGNvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShj
b2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29s
b3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpA
QCAtODYsNyArODYsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIHsKICAgICBDb2xv
ciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApOwogCi0gICAgYXV0byBoc2xhQ29s
b3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0g
dG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRf
RVEoMC4zMzMzMzMzNCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhz
bGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBURVNUKENvbG9yLCBSR0JU
b0hTTF9CbHVlKQogewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1
NSk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7
CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0Pigp
KTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLjY2NjY2NjY5LCBoc2xhQ29sb3IuaHVlKTsKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTE4LDcgKzEx
OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0RhcmtHcmF5KQogewogICAgIENvbG9yIGNvbG9y
ID0gQ29sb3I6OmRhcmtHcmF5OwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3Iu
dG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1
ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEz
NCw3ICsxMzQsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmF5KQogewogICAgIENvbG9yIGNv
bG9yID0gQ29sb3I6OmdyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdC
QUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVl
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTUw
LDcgKzE1MCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xpZ2h0R3JheSkKIHsKICAgICBDb2xv
ciBjb2xvciA9IENvbG9yOjpsaWdodEdyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNM
QShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29s
b3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xh
Q29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24p
OwpAQCAtMTgzLDI5ICsxODMsMjkgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAgICAgdmFsaWRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigxLCAyLCAzLCA0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWxp
ZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29sb3IuaXNFeHRlbmRl
ZCgpKTsKLSAgICBhdXRvIHNpbXBsZVZhbGlkQ29sb3IgPSB2YWxpZENvbG9yLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IucmVkQ29tcG9u
ZW50KCksIDEpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLmdyZWVuQ29tcG9uZW50
KCksIDIpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLmJsdWVDb21wb25lbnQoKSwg
Myk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYWxwaGFDb21wb25lbnQoKSwgNCk7
CisgICAgYXV0byB2YWxpZENvbG9yQ29tcG9uZW50cyA9IHZhbGlkQ29sb3IudG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7
CisgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAyKTsKKyAgICBFWFBF
Q1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMuYmx1ZSwgMyk7CisgICAgRVhQRUNUX0VRKHZhbGlk
Q29sb3JDb21wb25lbnRzLmFscGhhLCA0KTsKIAogICAgIENvbG9yIHlldEFub3RoZXJWYWxpZENv
bG9yKFdURk1vdmUodmFsaWRDb2xvcikpOwogICAgIEVYUEVDVF9UUlVFKHlldEFub3RoZXJWYWxp
ZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHlldEFub3RoZXJWYWxpZENvbG9y
LmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvciA9IHll
dEFub3RoZXJWYWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgRVhQRUNU
X0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKLSAgICBF
WFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgMik7
Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLmJsdWVDb21wb25lbnQo
KSwgMyk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLmFscGhhQ29t
cG9uZW50KCksIDQpOworICAgIGF1dG8geWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0g
eWV0QW5vdGhlclZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNU
X0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOworICAgIEVYUEVDVF9F
USh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOworICAgIEVYUEVDVF9F
USh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuYmx1ZSwgMyk7CisgICAgRVhQRUNUX0VR
KHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5hbHBoYSwgNCk7CiAKICAgICBvdGhlclZh
bGlkQ29sb3IgPSBXVEZNb3ZlKHlldEFub3RoZXJWYWxpZENvbG9yKTsKICAgICBFWFBFQ1RfVFJV
RShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJWYWxp
ZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzaW1wbGVPdGhlclZhbGlkQ29sb3IgPSBv
dGhlclZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRVEo
c2ltcGxlT3RoZXJWYWxpZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEo
c2ltcGxlT3RoZXJWYWxpZENvbG9yLmdyZWVuQ29tcG9uZW50KCksIDIpOwotICAgIEVYUEVDVF9F
UShzaW1wbGVPdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAzKTsKLSAgICBFWFBFQ1Rf
RVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmFscGhhQ29tcG9uZW50KCksIDQpOworICAgIGF1dG8g
b3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5yZWQs
IDEpOworICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAyKTsK
KyAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKKyAgICBF
WFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5hbHBoYSwgNCk7CiB9CiAKIFRFU1Qo
Q29sb3IsIEx1bWluYW5jZSkKQEAgLTIxNiwyMSArMjE2LDIyIEBAIFRFU1QoQ29sb3IsIEx1bWlu
YW5jZSkKICAgICBhdXRvIGMgPSBtYWtlU2ltcGxlQ29sb3IoODUsIDkwLCAxNjApOwogICAgIEVY
UEVDVF9GTE9BVF9FUShDb2xvcihjKS5sdW1pbmFuY2UoKSwgMC4xMTc4MTY5Mik7CiAKLSAgICBF
WFBFQ1RfRVEoYy5yZWRDb21wb25lbnQoKSwgODUpOwotICAgIEVYUEVDVF9FUShjLmdyZWVuQ29t
cG9uZW50KCksIDkwKTsKLSAgICBFWFBFQ1RfRVEoYy5ibHVlQ29tcG9uZW50KCksIDE2MCk7Ci0K
LSAgICBhdXRvIGNMaWd0ZW5lZCA9IENvbG9yKGMpLmxpZ2h0ZW5lZCgpLnRvU1JHQkFTaW1wbGVD
b2xvckxvc3N5KCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKGNMaWd0ZW5lZCkubHVtaW5h
bmNlKCksIDAuMjkxNjg4MDgpOwotICAgIEVYUEVDVF9FUShjTGlndGVuZWQucmVkQ29tcG9uZW50
KCksIDEzMCk7Ci0gICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ncmVlbkNvbXBvbmVudCgpLCAxMzcp
OwotICAgIEVYUEVDVF9FUShjTGlndGVuZWQuYmx1ZUNvbXBvbmVudCgpLCAyNDQpOwotCi0gICAg
YXV0byBjRGFya2VuZWQgPSBDb2xvcihjKS5kYXJrZW5lZCgpLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKGNEYXJrZW5lZCkubHVtaW5hbmNlKCks
IDAuMDI3MDA2NzI3KTsKLSAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLnJlZENvbXBvbmVudCgpLCA0
MCk7Ci0gICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ncmVlbkNvbXBvbmVudCgpLCA0Myk7Ci0gICAg
RVhQRUNUX0VRKGNEYXJrZW5lZC5ibHVlQ29tcG9uZW50KCksIDc2KTsKKyAgICBhdXRvIGNDb21w
b25lbnRzID0gYy5hc1NSR0JBPHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0VRKGNDb21wb25lbnRz
LnJlZCwgODUpOworICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5ncmVlbiwgOTApOworICAgIEVY
UEVDVF9FUShjQ29tcG9uZW50cy5ibHVlLCAxNjApOworCisgICAgYXV0byBjTGlndGVuZWQgPSBD
b2xvcihjKS5saWdodGVuZWQoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoQ29sb3IobWFrZVNpbXBsZUNvbG9yKGNMaWd0ZW5lZCkpLmx1bWluYW5jZSgpLCAw
LjI5MTY4ODA4KTsKKyAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLnJlZCwgMTMwKTsKKyAgICBFWFBF
Q1RfRVEoY0xpZ3RlbmVkLmdyZWVuLCAxMzcpOworICAgIEVYUEVDVF9FUShjTGlndGVuZWQuYmx1
ZSwgMjQ0KTsKKworICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoYykuZGFya2VuZWQoKS50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKGNEYXJrZW5lZCkpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjcyNyk7CisgICAgRVhQRUNU
X0VRKGNEYXJrZW5lZC5yZWQsIDQwKTsKKyAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdyZWVuLCA0
Myk7CisgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ibHVlLCA3Nik7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3Rz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgUDNDb252ZXJzaW9uVG9TUkdCKQogICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAg
IEVYUEVDVF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAotICAgIGF1dG8gc1JHQkFDb2xv
ciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRp
YWxseUVxdWFsKHNSR0JBQ29sb3IucmVkLCAxLjBmKSk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjph
cmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNDYyNTM3ODg1ZikpOwogICAg
IEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmJsdWUsIDAu
MTQ5MTQ3ODM4ZikpOwpAQCAtMjUyLDcgKzI1Miw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgTGlu
ZWFyU1JHQkNvbnZlcnNpb24KIHsKICAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRl
ZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07CiAg
ICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBhdXRvIHNSR0JB
Q29sb3IgPSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3Ig
PSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgRVhQRUNUX1RSVUUoV1RG
OjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IucmVkLCAxLjBmKSk7CiAgICAgRVhQRUNU
X1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuZ3JlZW4sIDAuNzM1MzU2
OTI3ZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNv
bG9yLmJsdWUsIDAuNTM3MDk4NzA2ZikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403500</attachid>
            <date>2020-07-03 19:43:50 -0700</date>
            <delta_ts>2020-07-03 19:56:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213948-20200703194349.patch</filename>
            <type>text/plain</type>
            <size>62529</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsaWdodG5lc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omx1bWluYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VP
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJD
b3JlOjphc0FSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNTUkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRGbG9vcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2VpbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjp1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29t
cG9uZW50Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBpeGVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNv
bG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xv
cjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVkQ29t
cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpncmVlbkNvbXBv
bmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Ymx1ZUNvbXBvbmVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHA6CisgICAgICAgIChQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFVzZUNvbnZleEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmRDb2xvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29sb3JG
dW5jdGlvbjo6YW5pbWF0ZSk6CisKIDIwMjAtMDctMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYkNvcmUvU291cmNlcy50eHQ6IFJlbW92ZSAjaWYgRU5BQkxF
X1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcwLDcgKzE5NzAsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTk4NCw3ICs5OTg0LDYgQEAKIAkJN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2
IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQWJvcnRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBE
OTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MzMEQ5ODIxRjgxNUFDMjAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBTaW1w
bGVDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVD
b2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzFDODhDMjQ3QUQ1OTUw
MDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMzFERjlFOTVCMDBEMzM5NUMgLyog
UG9zaXRpb25PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3NpdGlvbk9wdGlvbnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjU2OTcsNyArMjU2OTYsNiBAQAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBT
aW1wbGVDb2xvci5jcHAgKi8sCiAJCQkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBs
ZUNvbG9yLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgzLDEwICsxOTgzLDEwIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFzQ29sb3IoKS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0g
Y29sb3IuZ3JlZW5Db21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOwor
ICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1
ZUFzQ29sb3IoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOwor
ICAgIGcgPSBjb2xvci5ncmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE0ICs5MiwxNCBAQCBzdGF0aWMg
QXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0NvbG9yID0g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIGJ1ZmZl
ci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICBy
ZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAK
ICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7
CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDEwICs3MDEsMTAgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRv
IGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSku
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7
Ci0gICAgZyA9IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWVDb21w
b25lbnQoKTsKKyAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgciA9IGNvbG9y
LnJlZDsKKyAgICBnID0gY29sb3IuZ3JlZW47CisgICAgYiA9IGNvbG9yLmJsdWU7CiB9CiAKIEFY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJl
Y2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKG1fY29sb3IpOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZT4gY3JlYXRlV3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVy
VHlwZSBudW1iZXIpCkBAIC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBE
ZXByZWNhdGVkQ1NTT01SR0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSkKLSAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLnJl
ZENvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2FscGhhKGNyZWF0
ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkpKQorICAgICAg
ICA6IG1fY29sb3IoY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpCisgICAgICAgICwgbV9y
ZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5yZWQpKQorICAgICAgICAsIG1fZ3JlZW4o
Y3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbikpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZSkpCisgICAgICAgICwgbV9hbHBoYShjcmVh
dGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkp
CiAgICAgewogICAgIH0KIAotICAgIFNpbXBsZUNvbG9yIG1fY29sb3I7CisgICAgU1JHQkE8dWlu
dDhfdD4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1f
cmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAg
ICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjIxLDcgKzYyMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246
OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3R5bGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xh
ID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhl
IHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5
IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVh
ciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2Fu
IGJlIHNwZWNpZmllZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitp
bmxpbmUgdWludDhfdCBibGVuZCh1aW50OF90IGZyb20sIHVpbnQ4X3QgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kKHN0YXRpY19j
YXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9n
cmVzcykpOworfQorCiBpbmxpbmUgaW50IGJsZW5kKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNf
Y2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogcHJv
Z3Jlc3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHRlbmVkKCkgY29uc3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAg
ICBpZiAodiA9PSAwLjBmKQpAQCAtMTAzLDcgKzEwMyw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5l
ZCgpIGNvbnN0CiAgICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSB3aGl0ZSkKICAg
ICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTQs
MTQgKzExNCwxNCBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogZmxvYXQgQ29sb3I6
OmxpZ2h0bmVzcygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGF2
b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3BhY2UgYWxnb3JpdGht
cyBmb3IgSFNMLgotICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5KCkp
OworICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5PGZsb2F0PigpKTsK
IH0KIAogZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgY2FuIHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNv
bG9yc3BhY2UgYWxnb3JpdGhtcwogICAgIC8vIGZvciBsdW1pbmFuY2UgKGUuZy4gY29udmVydFRv
WFlaKGMpLnlDb21wb25lbnQoKSkuCi0gICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NS
R0JBTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkpOwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0CkBAIC0xNDksNyArMTQ5LDcgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBj
b25zdAogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAg
IHJldHVybiB7IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07CisgICAgcmV0
dXJuIHsgbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkFMb3NzeTx1aW50OF90PigpKSwgU2VtYW50aWMg
fTsKIH0KIAogc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IENv
bG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CkBAIC0xNTksMjAgKzE1OSw2IEBA
IHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmwKICAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhhc1NpbXBsZSgpLmFzU1JHQkE8Zmxv
YXQ+KCkpIH07CiB9CiAKLVNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCkpOwotICAgIHJldHVybiBhc1Np
bXBsZSgpOwotfQotCi1TUkdCQTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NS
R0JBTG9zc3koKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpOwotfQot
CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgcmV0dXJuIHRzIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEwICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29u
dmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9F
WFBPUlQgU2ltcGxlQ29sb3IgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdDsKLQotICAg
IC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JH
Qi4KLSAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwpAQCAtMjY4LDYgKzI2NSwxMyBAQCBp
bmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6OmludEhh
c2gobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAoreworICAgIGlmIChp
c0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5PFQ+
KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxUPigpOworfQorCiBpbmxpbmUgQ29s
b3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBj
b25zdAogewogICAgIHJldHVybiBhbHBoYSA/IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEu
dmFsdWUoKSkgOiAqdGhpczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJh
Y2tkCiAgICAgaWYgKCFzb3VyY2UuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuIGJhY2tkcm9wOwog
Ci0gICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9
IGJhY2tkcm9wLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byBbc291cmNlUiwg
c291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKKyAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJv
cEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbc291cmNl
Uiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3Rp
bmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCiAg
ICAgU2ltcGxlQ29sb3IgcmVzdWx0OwogICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsg
YWxwaGEgPD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CkBAIC05NywxOCAr
OTcsMTcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGlm
IChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICAvLyBTaW5jZSBwcmVtdWx0aXBseUNlaWxpbmcoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBz
cGVjaWFsLWNhc2UgdGhhdC4KLSAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gZnJvbS5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkg
OiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSB0by5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDog
Q29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgYXV0byBwcmVtdWx0QmxlbmRlZCA9IG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkQ29t
cG9uZW50KCksIHByZW11bHRpcGxpZWRUby5yZWRDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBw
cmVtdWx0aXBsaWVkVG8uZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJD
b3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ibHVlQ29tcG9uZW50KCksIHByZW11bHRpcGxp
ZWRUby5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQo
cHJlbXVsdGlwbGllZEZyb20uYWxwaGFDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmFscGhh
Q29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJv
bSA9IHByZW11bHRpcGxpZWRDZWlsaW5nKGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOwor
ICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCkpOwogCi0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkocHJlbXVsdEJs
ZW5kZWQpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBTUkdCQSB7CisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJl
ZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5n
cmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVlLCBwcm9n
cmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBw
cmVtdWx0aXBsaWVkVG8uYWxwaGEsIHByb2dyZXNzKQorICAgIH07CisKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBsaWVkQmxlbmRlZCkpOwogfQog
CiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xMTgsMTUgKzExNywxNSBAQCBDb2xvciBi
bGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNS
R0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byB0b1NSR0IgPSBm
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbkNv
bXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29tcG9u
ZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGFD
b21wb25lbnQoKSwgdG9TUkdCLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7CisgICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpi
bGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNz
KQorICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNyw0ICsyMzcsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKworLy8gUGl4ZWwgRm9y
bWF0cworCitzdHJ1Y3QgQVJHQiB7CisgICAgdW5zaWduZWQgdmFsdWU7Cit9OworCitjb25zdGV4
cHIgQVJHQiBhc0FSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwg
Y29sb3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH07Cit9CisKK2NvbnN0ZXhwciBTUkdCQTx1
aW50OF90PiBhc1NSR0JBKEFSR0IgY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oY29sb3IudmFsdWUgPj4gMTYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52
YWx1ZSA+PiA4KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUpLCBzdGF0aWNfY2Fz
dDx1aW50OF90Pihjb2xvci52YWx1ZSA+PiAyNCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw0
ICs2Niw0MyBAQCBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmCiAgICAg
cmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCitTUkdCQTxmbG9hdD4gdW5w
cmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvcjsKKyAgICByZXR1cm4geyByIC8gYSwgZyAvIGEsIGIgLyBhLCBhIH07
Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSkK
KyAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OworICAgIGlmIChhID09IDI1NSkKKyAgICAg
ICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3RE
aXZpZGVCeTI1NShyICogYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSksIGEg
fTsKK30KKworU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4gY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBpZiAoIWEp
CisgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICBpZiAoYSA9PSAyNTUpCisgICAg
ICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0
RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlk
ZUJ5MjU1KGcgKiBhICsgMjU0KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1
NShiICogYSArIDI1NCkpLCBhIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVt
dWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90IGMsIHVpbnQ4X3QgYSkKK3sKKyAgICByZXR1
cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworU1JHQkE8dWludDhf
dD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAgICAgICByZXR1
cm4gY29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4odW5wcmVtdWx0aXBs
aWVkQ29tcG9uZW50Qnl0ZShyLCBhKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVucHJlbXVsdGlw
bGllZENvbXBvbmVudEJ5dGUoZywgYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih1bnByZW11bHRp
cGxpZWRDb21wb25lbnRCeXRlKGIsIGEpKSwgYSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEx
IEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNSR0JB
PGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+
IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHBy
ZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHVucHJl
bXVsdGlwbGllZChTUkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVz
Y2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDE4IEBAIGNvbnN0
ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4gYnl0ZSAvIDI1
NS4wZjsKIH0KIAordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25z
dCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4g
dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+JiBjb2xvcikKK3sKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRz
WzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1szXSkgfTsKK30KKwogY29u
c3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAg
IHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5k
ZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0g
YzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwog
fQogCi1TUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK1NS
R0JBPGZsb2F0PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBj
b25zdAogewogICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4
IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAg
LTQ5LDExICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0
aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKLSAgICBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5
KCkgY29uc3Q7Ci0KICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29sIGlzQmxhY2so
KSBjb25zdDsKIAorICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2Ug
Y29sb3JzIGludG8gc1JHQi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JH
QkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQorICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkFGbG9h
dENvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgICAgIDogbV9jb21wb25lbnRzKGMxLCBj
MiwgYzMsIGFscGhhKQpAQCAtNjEsNiArNzAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xv
c3N5KCkgY29uc3Q7CisKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsK
ICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9u
IDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwyOSArMTUyLDI5IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNpbXBsZUNvbG9y
IHBpeGVsIHsgKmRlc3QgfTsKKyAgICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoQVJHQiB7ICpk
ZXN0IH0pOwogCi0gICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuaXNWaXNpYmxlKCkpIHsK
KyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5hbHBoYSkgewogICAgICAgICAgICAgc2V0
UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0g
cHJlbXVsdGlwbHlGbG9vcmluZyhwaXhlbCk7CisgICAgICAgICAgICBwaXhlbCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhwaXhlbCk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9IDI1NSAtIGE7CiAK
LSAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICogYSArIHBpeGVsLnJlZENvbXBvbmVudCgp
ICogZCk7Ci0gICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyBwaXhlbC5ncmVlbkNv
bXBvbmVudCgpICogZCk7Ci0gICAgICAgIGIgPSBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhl
bC5ibHVlQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgYSArPSBmYXN0RGl2aWRlQnkyNTUoZCAq
IHBpeGVsLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIg
KiBhICsgcGl4ZWwucmVkICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEg
KyBwaXhlbC5ncmVlbiAqIGQpOworICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsg
cGl4ZWwuYmx1ZSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwu
YWxwaGEpOwogCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIs
IGEpOworICAgICAgICBhdXRvIHJlc3VsdCA9IFNSR0JBPHVpbnQ4X3Q+IHsgciwgZywgYiwgYSB9
OwogCiAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcmVzdWx0
ID0gdW5wcmVtdWx0aXBseShyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0ID0gdW5wcmVtdWx0
aXBsaWVkKHJlc3VsdCk7CiAKLSAgICAgICAgKmRlc3QgPSByZXN1bHQudmFsdWVBc0FSR0IoKTsK
KyAgICAgICAgKmRlc3QgPSBhc0FSR0IocmVzdWx0KS52YWx1ZTsKICAgICB9CiAKICAgICBzdGF0
aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0yMjYsMTIgKzIyNiwx
MiBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmICFhKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgYXV0byByZXN1bHQgPSBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgYSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gU1JHQkE8dWludDhfdD4geyBz
dGF0aWNfY2FzdDx1aW50OF90PihyKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZyksIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGIpLCBzdGF0aWNfY2FzdDx1aW50OF90PihhKSB9OwogCiAgICAgICAgIGlm
IChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHBy
ZW11bHRpcGx5Rmxvb3JpbmcocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiByZXN1bHQudmFsdWVBc0FS
R0IoKTsKKyAgICAgICAgcmV0dXJuIGFzQVJHQihyZXN1bHQpLnZhbHVlOwogICAgIH0KIAogICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiBtX3BpeGVsczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaW1wbGVD
b2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQotewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0gMjU1KQotICAgICAgICBy
ZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUo
ciAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBh
KTsKLX0KLQotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlDZWlsaW5nKFNpbXBsZUNvbG9yIGNvbG9y
KQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0g
MjU1KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihm
YXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQp
LCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKLX0KLQotc3RhdGljIGlubGluZSB1
aW50MTZfdCB1bnByZW11bHRpcGx5Q2hhbm5lbCh1aW50OF90IGMsIHVpbnQ4X3QgYSkKLXsKLSAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKLX0KLQotU2ltcGxl
Q29sb3IgdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciBjb2xvcikKLXsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yOwotICAgIGlmICghYSB8fCBhID09IDI1NSkKLSAgICAgICAgcmV0dXJu
IGNvbG9yOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBseUNoYW5uZWwo
ciwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5lbChi
LCBhKSwgYSk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIHVp
bnQzMl90IHZhbHVlQXNBUkdCKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0
ZXhwciB1aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIGNv
bnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4g
MTY7IH0KLSAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBvbmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUgPj4gODsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFD
b21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDI0OyB9Ci0KICAgICBjb25zdGV4
cHIgZmxvYXQgYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gY29udmVydFRv
Q29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSk7IH0KIAogICAgIGNvbnN0ZXhwciBib29s
IGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CkBA
IC02Miw3ICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KDB4RkYgLSByZWRDb21wb25lbnQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYg
LSBncmVlbkNvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGJsdWVDb21w
b25lbnQoKSksIGFscGhhIH07CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgIHJldHVybiB7
IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9u
ZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVD
b21wb25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4p
CisgICAgICAgICAgICByZXR1cm4geyByZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwg
Ymx1ZUNvbXBvbmVudCgpLCBhbHBoYUNvbXBvbmVudCgpIH07CisgICAgfQogCiAgICAgdGVtcGxh
dGU8c3RkOjpzaXplX3QgTj4KICAgICBjb25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25zdApAQCAt
NzksNiArODEsMTAgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBjb25zdGV4cHIg
dWludDhfdCByZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9Cisg
ICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlID4+IDg7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorCiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CiAK
QEAgLTkwLDEzICs5Niw5IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3Io
aW4KIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWlu
dDhfdD4mKTsKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4m
KTsKIAotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlGbG9vcmluZyhTaW1wbGVDb2xvcik7Ci1TaW1w
bGVDb2xvciBwcmVtdWx0aXBseUNlaWxpbmcoU2ltcGxlQ29sb3IpOwotU2ltcGxlQ29sb3IgdW5w
cmVtdWx0aXBseShTaW1wbGVDb2xvcik7Ci0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxl
Q29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFs
dWUoKTsKKyAgICByZXR1cm4gYS52YWx1ZUFzQVJHQigpID09IGIudmFsdWVBc0FSR0IoKTsKIH0K
IAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQpA
QCAtMTE2LDI1ICsxMTgsMTQgQEAgY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xv
cihpbgogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JB
PHVpbnQ4X3Q+JiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAg
IHJldHVybiB7IHIsIGcsIGIsIGEgfTsKKyAgICByZXR1cm4geyBzUkdCQS5yZWQsIHNSR0JBLmdy
ZWVuLCBzUkdCQS5ibHVlLCBzUkdCQS5hbHBoYSB9OwogfQogCiBpbmxpbmUgU2ltcGxlQ29sb3Ig
bWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgc1JHQkEpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBzUkdCQTsKLSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGIp
LCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gU2ltcGxlQ29sb3I6OmFzU1JHQkEoKSBjb25zdAotewot
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19mbG9hdGluZ19wb2ludF92PFQ+KQotICAgICAgICBy
ZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChyZWRDb21wb25lbnQoKSksIGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dChibHVlQ29tcG9uZW50KCkpLCAgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25l
bnQoKSkgfTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpLCBncmVl
bkNvbXBvbmVudCgpLCBibHVlQ29tcG9uZW50KCksIGFscGhhQ29tcG9uZW50KCkgfTsKLX0KLQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBzdGQgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjYzOTE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYQogewogICAgIGlmICghaXNCYXNpY0FuaW1h
dGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRp
b24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwg
QChhKV1dOwogfQogCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFRvVmFsdQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VG9WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAt
NDk2LDcgKzQ5Niw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChh
dXRvJiBjb2xvcikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudGVt
cGxhdGUgdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIHJldHVybiBAW0AociksIEAo
ZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldp
bjo6c2V0RnJvbVZhbHUKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gdmFsdWUudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVu
dCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9u
ZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBDR0Zsb2F0IGFbNF0gPSB7
IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBv
bmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0Yo
Q0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldEZyb21WYWx1ZSht
X2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00MTksOCArNDE5LDggQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKAogICAgIGlmIChhbmltYXRpb25UeXBl
KCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2
YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIENHRmxvYXQgYVs0XSA9IHsgc2lt
cGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNp
bXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9
OworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwor
ICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNv
bXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVj
dG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5p
bWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00ODks
OCArNDg5LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoYwogICAg
ICAgICAKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihD
RkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFj
a3MpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOwotICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgp
LCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50
KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICAgICAgYXV0byBjb21wb25l
bnRzID0gdmFsdWVbaV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIENHRmxvYXQg
YVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1
ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4g
diA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgICAgIENGQXJyYXlBcHBl
bmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24g
MjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5
ICs4MCw5IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQKICAgICAg
ICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNy
YyArIHN0cmlkZSAqIHkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNp
emUud2lkdGgoKTsgeCsrKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4
OwotICAgICAgICAgICAgYXV0byBwaXhlbENvbG9yID0gdW5wcmVtdWx0aXBseShTaW1wbGVDb2xv
ciB7ICpwaXhlbCB9KTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
bG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKV0sIGxvb2tVcFRhYmxlW3BpeGVs
Q29sb3IuZ3JlZW5Db21wb25lbnQoKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZUNvbXBv
bmVudCgpXSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsKLSAgICAgICAgICAgICpwaXhl
bCA9IHByZW11bHRpcGx5Q2VpbGluZyhwaXhlbENvbG9yKS52YWx1ZUFzQVJHQigpOworICAgICAg
ICAgICAgYXV0byBwaXhlbENvbXBvbmVudHMgPSB1bnByZW11bHRpcGxpZWQoYXNTUkdCQShBUkdC
IHsgKnBpeGVsIH0pKTsKKyAgICAgICAgICAgIHBpeGVsQ29tcG9uZW50cyA9IHsgbG9va1VwVGFi
bGVbcGl4ZWxDb21wb25lbnRzLnJlZF0sIGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5ncmVl
bl0sIGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5ibHVlXSwgcGl4ZWxDb21wb25lbnRzLmFs
cGhhIH07CisgICAgICAgICAgICAqcGl4ZWwgPSBhc0FSR0IocHJlbXVsdGlwbGllZENlaWxpbmco
cGl4ZWxDb21wb25lbnRzKSkudmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2Fpcm9fc3Vy
ZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNh
bFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFn
ZUNhaXJvLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDcgKzU0LDcgQEAgQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IoYwogICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKIAogICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPHVuc2lnbmVkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5n
ZXQoKSkpOwotICAgIHJldHVybiB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0p
OworICAgIHJldHVybiBhc0FSR0IodW5wcmVtdWx0aXBsaWVkKGFzU1JHQkEoQVJHQiB7ICpwaXhl
bCB9KSkpLnZhbHVlOwogfQogCiB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFn
ZVB0ciYgaW1hZ2UsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsMTEgKzExMSwxMSBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5TmVvCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAg
ICAgZmxvYXRBcmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgYXV0byBzaW1wbGVDb2xvciA9
IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gY29s
b3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKLSAgICBmbG9h
dEFyZ3VtZW50cy5jb2xvclJlZCA9IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpOwotICAgIGZs
b2F0QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpOwot
ICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQo
KTsKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IGNvbG9yLnJlZDsKKyAgICBmbG9hdEFy
Z3VtZW50cy5jb2xvckdyZWVuID0gY29sb3IuZ3JlZW47CisgICAgZmxvYXRBcmd1bWVudHMuY29s
b3JCbHVlID0gY29sb3IuYmx1ZTsKICAgICBmbG9hdEFyZ3VtZW50cy5wYWRkaW5nNCA9IDA7CiAK
ICAgICBpZiAobV9saWdodFNvdXJjZS0+dHlwZSgpID09IExTX1BPSU5UKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNSwxMCAr
NDA1LDEwIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXAKICAgICBk
YXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKICAgICAKICAgICBpZiAob3Bl
cmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9yLnRvU1JHQkFM
b3NzeSgpKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0xpbmVhclNSR0JBKG1fbGln
aHRpbmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogICAgICAgICBwYWludGluZ0RhdGEu
aW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xv
ci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5n
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlh
bExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKICAgICB9
CiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRh
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0
aW9uczo6dHJhbnNmb3JtQ29sb3IoQ28KICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JB
TG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+
KCk7CiAKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAg
ICBpZiAoIW9wZXJhdGlvbi0+dHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkBAIC0xMjksNyAr
MTI5LDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQwogICAgIGlm
IChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
c1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9u
IDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT5pbnZlcnNlVHJhbnNm
b3JtQ29sb3Ioc1JHQkFDb2xvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJl
dmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVuCiAgICAgc3RhdGljIGNv
bnN0ZXhwciBTaW1wbGVDb2xvciBncmFtbWFyUGF0dGVybkNvbG9yIHsgbWFrZVNpbXBsZUNvbG9y
KDAsIDEyOCwgMCkgfTsKIAogICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29sb3IgPSBz
dHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8gZ3Jh
bW1hclBhdHRlcm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOwotICAgIENHQ29udGV4dFNl
dFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQoKSwgcGF0
dGVybkNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9uZW50KCks
IHBhdHRlcm5Db2xvci5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICBhdXRvIHBhdHRlcm5Db2xvckNv
bXBvbmVudHMgPSBwYXR0ZXJuQ29sb3IuYXNTUkdCQTx1aW50OF90PigpOworICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMucmVkLCBw
YXR0ZXJuQ29sb3JDb21wb25lbnRzLmdyZWVuLCBwYXR0ZXJuQ29sb3JDb21wb25lbnRzLmJsdWUs
IHBhdHRlcm5Db2xvckNvbXBvbmVudHMuYWxwaGEpOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dXNlclRvQmFzZSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAgICAgQ0dQb2ludCBwaGFz
ZSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwb2ludCwgdXNlclRvQmFzZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI2Mzkx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MDIsNyArMTQwMiw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpkaXNhYmxlZFRl
eHRDb2xvcihjb24KICAgICAvLyBJZiB0aGVyZSdzIG5vdCB2ZXJ5IG11Y2ggY29udHJhc3QgYmV0
d2VlbiB0aGUgZGlzYWJsZWQgY29sb3IgYW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLAogICAgIC8v
IGp1c3QgbGVhdmUgdGhlIHRleHQgY29sb3IgYWxvbmUuIFdlIGRvbid0IHdhbnQgdG8gY2hhbmdl
IGEgZ29vZCBjb250cmFzdCBjb2xvciBzY2hlbWUgc28gdGhhdCBpdCBoYXMgcmVhbGx5IGJhZCBj
b250cmFzdC4KICAgICAvLyBJZiB0aGUgY29udHJhc3Qgd2FzIGFscmVhZHkgcG9vciwgdGhlbiBp
dCBkb2Vzbid0IGRvIGFueSBnb29kIHRvIGNoYW5nZSBpdCB0byBhIGRpZmZlcmVudCBwb29yIGNv
bnRyYXN0IGNvbG9yIHNjaGVtZS4KLSAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNhYmxlZENvbG9y
LnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkpIDwgbWluQ29s
b3JDb250cmFzdFZhbHVlKQorICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0Pigp
KSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKICAgICAgICAgcmV0dXJuIHRleHRDb2xvcjsKIAog
ICAgIHJldHVybiBkaXNhYmxlZENvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU1LDcgKzEw
NTUsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRpCiBzdGF0aWMg
Ym9vbCBzaG91bGRVc2VDb252ZXhHcmFkaWVudChjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBsdW1pbmFu
Y2UuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOwogICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heCh7
IHIsIGcsIGIgfSk7CiAgICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5l
bCA8IDAuNTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0
eWxlLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRQYWludFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBib29sIHRl
eHRDb2xvcklzTGVnaWJsZUFnYWluc3RCYWNrZ3JvdW5kCiB7CiAgICAgLy8gVXNlcyB0aGUgV0NB
RyAyLjAgZGVmaW5pdGlvbiBvZiBsZWdpYmlsaXR5OiBhIGNvbnRyYXN0IHJhdGlvIG9mIDQuNTox
IG9yIGdyZWF0ZXIuCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jdmlzdWFs
LWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0Ci0gICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENv
bG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkpID4gNC41
OworICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+
KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpID4gNC41OwogfQogCiBz
dGF0aWMgQ29sb3IgYWRqdXN0Q29sb3JGb3JWaXNpYmlsaXR5T25CYWNrZ3JvdW5kKGNvbnN0IENv
bG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rp
b25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNjM5MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE1ICs4MSwxNSBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGFuaW1hdGUoU1ZHRWxlbWVudCosIGZsb2F0IHByb2dyZXNzLCB1bnNpZ25l
ZCByZXBlYXRDb3VudCwgQ29sb3ImIGFuaW1hdGVkKQogICAgIHsKLSAgICAgICAgYXV0byBzaW1w
bGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAg
IGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25Nb2RlOjpUbyA/
IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAg
ICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAg
ICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlvbigpLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBh
bmltYXRlZC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9t
ID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0ZWQg
OiBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8g
PSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRvQXRF
bmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKICAgICAgICAgCi0gICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3Ms
IHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUby5yZWRDb21w
b25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCksIHNpbXBsZUFu
aW1hdGVkLnJlZENvbXBvbmVudCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmlt
YXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBz
aW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVlbkNv
bXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKLSAgICAgICAgZmxv
YXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9t
LmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5k
T2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVDb21wb25lbnQo
KSk7Ci0gICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0
Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxwaGFDb21wb25l
bnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlQW5p
bWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1h
dGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8ucmVkLCBz
aW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWQsIHNpbXBsZUFuaW1hdGVkLnJlZCk7CisgICAgICAg
IGZsb2F0IGdyZWVuID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBs
ZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmdyZWVuLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVl
biwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW4pOworICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5p
bWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2ltcGxlVG8uYmx1
ZSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZSk7Cisg
ICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQs
IHNpbXBsZUZyb20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5hbHBoYSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKICAgICAgICAgYW5pbWF0
ZWQgPSBtYWtlU2ltcGxlQ29sb3Iocm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyZWQpLCByb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChi
bHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkpOwogICAgIH0KQEAgLTEwMywx
MiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKICAg
ICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0byBzaW1wbGVG
cm9tID0gZnJvbUNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIGF1dG8g
c2ltcGxlVG8gPSB0b0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1
dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAg
ICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKLSAg
ICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSAtIHNpbXBsZVRvLnJl
ZENvbXBvbmVudCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZyb20uZ3JlZW5Db21w
b25lbnQoKSAtIHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgICAgIGZsb2F0IGJsdWUg
PSBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSAtIHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKTsK
KyAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWQgLSBzaW1wbGVUby5yZWQ7CisgICAg
ICAgIGZsb2F0IGdyZWVuID0gc2ltcGxlRnJvbS5ncmVlbiAtIHNpbXBsZVRvLmdyZWVuOworICAg
ICAgICBmbG9hdCBibHVlID0gc2ltcGxlRnJvbS5ibHVlIC0gc2ltcGxlVG8uYmx1ZTsKIAogICAg
ICAgICByZXR1cm4gc3RkOjpoeXBvdChyZWQsIGdyZWVuLCBibHVlKTsKICAgICB9CkBAIC0xMjYs
MTQgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRGcm9tQW5kVG9WYWx1ZXMoU1ZH
RWxlbWVudCopIG92ZXJyaWRlCiAgICAgewotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zy
b20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1f
dG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0g
bV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0g
bV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFueSBh
bHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAgICAgICAgIG1f
dG8gPSBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSks
Ci0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVuQ29t
cG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAotICAgICAgICAgICAgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBzaW1wbGVG
cm9tLmJsdWVDb21wb25lbnQoKSkKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQpLAorICAgICAgICAgICAgcm91bmRBbmRD
bGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4pLAorICAg
ICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlICsgc2ltcGxl
RnJvbS5ibHVlKQogICAgICAgICApOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIFBhcnQgMSBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhfdD4gYXJlIGVzc2Vu
dGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzOTQ4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW06CisgICAgICAgIChXZWJLaXQ6
OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1
bWVudEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIEFkYXB0IHRvIHVzZSB0ZW1wbGF0aXplZCB0
b1NSR0JBTG9zc3k8ZmxvYXQvdWludDhfdD4uCisKIDIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBFTkFCTEVfSU5Q
VVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1Niw3ICs2NTYsNyBAQCBib29sIFdlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xv
CiAgICAgaWYgKCFiZ0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgKnJlZCA9
IHI7CiAgICAgKmdyZWVuID0gZzsKICAgICAqYmx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkocmV2aXNpb24gMjYz
OTE4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5Myw3ICs2
OTMsNyBAQCBzdGF0aWMgTlNPYmplY3QqIGFuaW1hdGlvblZhbHVlRnJvbUtleWZyCiAgICAgICAg
IHJldHVybiBAKGtleWZyYW1lVmFsdWUubnVtYmVyVmFsdWUoKSk7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6OkNvbG9yS2V5
VHlwZTogewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGtleWZyYW1lVmFsdWUuY29sb3JW
YWx1ZSgpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CiAgICAgICAgIHJldHVybiBAWyBAKHIpLCBAKGcpLCBAKGIpLCBAKGEpIF07CiAgICAgfQogCklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNjM5MjUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNiBAQAorMjAyMC0wNy0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgUGFydCAxIG9mIFNpbXBsZUNvbG9yIGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50
aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM5NDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIEFkYXB0IHRlc3RzIHRvIHVz
ZSB0ZW1wbGF0aXplZCB0b1NSR0JBTG9zc3k8ZmxvYXQvdWludDhfdD4uCisKIDIwMjAtMDctMDMg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0
IGZvciBFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lv
biAyNjM5MTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9I
U0xfV2hpdGUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRv
IGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xh
Q29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVD
VF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtNTQsNyArNTQsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9CbGFjaykKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKIAotICAgIGF1dG8g
aHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFD
b2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xh
Q29sb3Iuc2F0dXJhdGlvbik7CkBAIC03MCw3ICs3MCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X1JlZCkKIHsKICAgICBDb2xvciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwog
Ci0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAg
IGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FU
X0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTg2LDcgKzg2LDcgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfR3JlZW4pCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
MCwgMjU1LCAwKTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFM
b3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhzbGFDb2xvci5o
dWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0x
MDIsNyArMTAyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKICAgICBDb2xvciBj
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAyNTUpOwogCi0gICAgYXV0byBoc2xhQ29sb3Ig
PSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9I
U0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MC42NjY2NjY2OSwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFD
b2xvci5zYXR1cmF0aW9uKTsKQEAgLTExOCw3ICsxMTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9EYXJrR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAg
IGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRv
IGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgw
LCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMzQsNyArMTM0LDcgQEAgVEVTVChDb2xvciwg
UkdCVG9IU0xfR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmF5OwogCi0gICAg
YXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8g
aHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBF
WFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAs
IGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBURVNUKENvbG9yLCBS
R0JUb0hTTF9MaWdodEdyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5
OwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOwor
ICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZM
T0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTE4MywyOSArMTgzLDI5IEBAIFRF
U1QoQ29sb3IsIFZhbGlkaXR5KQogICAgIHZhbGlkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMSwg
MiwgMywgNCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVY
UEVDVF9GQUxTRSh2YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzaW1wbGVWYWxp
ZENvbG9yID0gdmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVD
VF9FUShzaW1wbGVWYWxpZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEo
c2ltcGxlVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsKLSAgICBFWFBFQ1RfRVEoc2lt
cGxlVmFsaWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1wbGVW
YWxpZENvbG9yLmFscGhhQ29tcG9uZW50KCksIDQpOworICAgIGF1dG8gdmFsaWRDb2xvckNvbXBv
bmVudHMgPSB2YWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9F
USh2YWxpZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9y
Q29tcG9uZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRz
LmJsdWUsIDMpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5hbHBoYSwgNCk7
CiAKICAgICBDb2xvciB5ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3IpKTsK
ICAgICBFWFBFQ1RfVFJVRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVY
UEVDVF9GQUxTRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8g
c2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRD
b2xvci5yZWRDb21wb25lbnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJW
YWxpZENvbG9yLmdyZWVuQ29tcG9uZW50KCksIDIpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRB
bm90aGVyVmFsaWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1w
bGVZZXRBbm90aGVyVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKKyAgICBhdXRvIHll
dEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNv
bXBvbmVudHMucmVkLCAxKTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21w
b25lbnRzLmdyZWVuLCAyKTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21w
b25lbnRzLmJsdWUsIDMpOworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBv
bmVudHMuYWxwaGEsIDQpOwogCiAgICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90
aGVyVmFsaWRDb2xvcik7CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQo
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAg
IGF1dG8gc2ltcGxlT3RoZXJWYWxpZENvbG9yID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5yZWRD
b21wb25lbnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5ncmVl
bkNvbXBvbmVudCgpLCAyKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmJs
dWVDb21wb25lbnQoKSwgMyk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5h
bHBoYUNvbXBvbmVudCgpLCA0KTsKKyAgICBhdXRvIG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMg
PSBvdGhlclZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0VR
KG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKKyAgICBFWFBFQ1RfRVEob3RoZXJW
YWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRD
b2xvckNvbXBvbmVudHMuYmx1ZSwgMyk7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNv
bXBvbmVudHMuYWxwaGEsIDQpOwogfQogCiBURVNUKENvbG9yLCBMdW1pbmFuY2UpCkBAIC0yMTYs
MjEgKzIxNiwyMiBAQCBURVNUKENvbG9yLCBMdW1pbmFuY2UpCiAgICAgYXV0byBjID0gbWFrZVNp
bXBsZUNvbG9yKDg1LCA5MCwgMTYwKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoYykubHVt
aW5hbmNlKCksIDAuMTE3ODE2OTIpOwogCi0gICAgRVhQRUNUX0VRKGMucmVkQ29tcG9uZW50KCks
IDg1KTsKLSAgICBFWFBFQ1RfRVEoYy5ncmVlbkNvbXBvbmVudCgpLCA5MCk7Ci0gICAgRVhQRUNU
X0VRKGMuYmx1ZUNvbXBvbmVudCgpLCAxNjApOwotCi0gICAgYXV0byBjTGlndGVuZWQgPSBDb2xv
cihjKS5saWdodGVuZWQoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9G
TE9BVF9FUShDb2xvcihjTGlndGVuZWQpLmx1bWluYW5jZSgpLCAwLjI5MTY4ODA4KTsKLSAgICBF
WFBFQ1RfRVEoY0xpZ3RlbmVkLnJlZENvbXBvbmVudCgpLCAxMzApOwotICAgIEVYUEVDVF9FUShj
TGlndGVuZWQuZ3JlZW5Db21wb25lbnQoKSwgMTM3KTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVk
LmJsdWVDb21wb25lbnQoKSwgMjQ0KTsKLQotICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoYyku
ZGFya2VuZWQoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9GTE9BVF9F
UShDb2xvcihjRGFya2VuZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjcyNyk7Ci0gICAgRVhQRUNU
X0VRKGNEYXJrZW5lZC5yZWRDb21wb25lbnQoKSwgNDApOwotICAgIEVYUEVDVF9FUShjRGFya2Vu
ZWQuZ3JlZW5Db21wb25lbnQoKSwgNDMpOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQuYmx1ZUNv
bXBvbmVudCgpLCA3Nik7CisgICAgYXV0byBjQ29tcG9uZW50cyA9IGMuYXNTUkdCQTx1aW50OF90
PigpOworICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5yZWQsIDg1KTsKKyAgICBFWFBFQ1RfRVEo
Y0NvbXBvbmVudHMuZ3JlZW4sIDkwKTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwg
MTYwKTsKKworICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKG1ha2VTaW1wbGVD
b2xvcihjTGlndGVuZWQpKS5sdW1pbmFuY2UoKSwgMC4yOTE2ODgwOCk7CisgICAgRVhQRUNUX0VR
KGNMaWd0ZW5lZC5yZWQsIDEzMCk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ncmVlbiwgMTM3
KTsKKyAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmJsdWUsIDI0NCk7CisKKyAgICBhdXRvIGNEYXJr
ZW5lZCA9IENvbG9yKGMpLmRhcmtlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKENvbG9yKG1ha2VTaW1wbGVDb2xvcihjRGFya2VuZWQpKS5sdW1pbmFu
Y2UoKSwgMC4wMjcwMDY3MjcpOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkLCA0MCk7Cisg
ICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ncmVlbiwgNDMpOworICAgIEVYUEVDVF9FUShjRGFya2Vu
ZWQuYmx1ZSwgNzYpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRD
b2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
MSw3ICsyNDEsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKICAg
ICBDb2xvciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0
ZW5kZWQoKSk7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeSgp
OworICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwog
ICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwg
MS4wZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNv
bG9yLmdyZWVuLCAwLjQ2MjUzNzg4NWYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2Vu
dGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTE0NzgzOGYpKTsKQEAgLTI1Miw3ICsy
NTIsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIExpbmVhclNSR0JDb252ZXJzaW9uCiB7CiAgICAg
Q29sb3IgbGluZWFyQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43
NSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB9OwogICAgIEVYUEVDVF9UUlVFKGxpbmVhckNvbG9y
LmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdC
QUxvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdC
QUNvbG9yLnJlZCwgMS4wZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlF
cXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKICAgICBFWFBFQ1RfVFJVRShX
VEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403501</attachid>
            <date>2020-07-03 19:56:23 -0700</date>
            <delta_ts>2020-07-03 19:57:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213948-20200703195622.patch</filename>
            <type>text/plain</type>
            <size>70873</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsaWdodG5lc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omx1bWluYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VP
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJD
b3JlOjphc0FSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNTUkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRGbG9vcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2VpbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjp1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29t
cG9uZW50Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBpeGVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNv
bG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xv
cjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVkQ29t
cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpncmVlbkNvbXBv
bmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Ymx1ZUNvbXBvbmVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHA6CisgICAgICAgIChQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFVzZUNvbnZleEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmRDb2xvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29sb3JG
dW5jdGlvbjo6YW5pbWF0ZSk6CisKIDIwMjAtMDctMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYkNvcmUvU291cmNlcy50eHQ6IFJlbW92ZSAjaWYgRU5BQkxF
X1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcwLDcgKzE5NzAsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTk4NCw3ICs5OTg0LDYgQEAKIAkJN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2
IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQWJvcnRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBE
OTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MzMEQ5ODIxRjgxNUFDMjAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBTaW1w
bGVDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVD
b2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzFDODhDMjQ3QUQ1OTUw
MDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMzFERjlFOTVCMDBEMzM5NUMgLyog
UG9zaXRpb25PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3NpdGlvbk9wdGlvbnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjU2OTcsNyArMjU2OTYsNiBAQAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBT
aW1wbGVDb2xvci5jcHAgKi8sCiAJCQkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBs
ZUNvbG9yLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgzLDEwICsxOTgzLDEwIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFzQ29sb3IoKS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0g
Y29sb3IuZ3JlZW5Db21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOwor
ICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1
ZUFzQ29sb3IoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOwor
ICAgIGcgPSBjb2xvci5ncmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE0ICs5MiwxNCBAQCBzdGF0aWMg
QXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0NvbG9yID0g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIGJ1ZmZl
ci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICBy
ZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAK
ICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7
CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDEwICs3MDEsMTAgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRv
IGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSku
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7
Ci0gICAgZyA9IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWVDb21w
b25lbnQoKTsKKyAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgciA9IGNvbG9y
LnJlZDsKKyAgICBnID0gY29sb3IuZ3JlZW47CisgICAgYiA9IGNvbG9yLmJsdWU7CiB9CiAKIEFY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJl
Y2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKG1fY29sb3IpOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZT4gY3JlYXRlV3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVy
VHlwZSBudW1iZXIpCkBAIC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBE
ZXByZWNhdGVkQ1NTT01SR0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSkKLSAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLnJl
ZENvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2FscGhhKGNyZWF0
ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkpKQorICAgICAg
ICA6IG1fY29sb3IoY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpCisgICAgICAgICwgbV9y
ZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5yZWQpKQorICAgICAgICAsIG1fZ3JlZW4o
Y3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbikpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZSkpCisgICAgICAgICwgbV9hbHBoYShjcmVh
dGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkp
CiAgICAgewogICAgIH0KIAotICAgIFNpbXBsZUNvbG9yIG1fY29sb3I7CisgICAgU1JHQkE8dWlu
dDhfdD4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1f
cmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAg
ICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjIxLDcgKzYyMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246
OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3R5bGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xh
ID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhl
IHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5
IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVh
ciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2Fu
IGJlIHNwZWNpZmllZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitp
bmxpbmUgdWludDhfdCBibGVuZCh1aW50OF90IGZyb20sIHVpbnQ4X3QgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kKHN0YXRpY19j
YXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9n
cmVzcykpOworfQorCiBpbmxpbmUgaW50IGJsZW5kKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNf
Y2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogcHJv
Z3Jlc3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHRlbmVkKCkgY29uc3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAg
ICBpZiAodiA9PSAwLjBmKQpAQCAtMTAzLDcgKzEwMyw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5l
ZCgpIGNvbnN0CiAgICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSB3aGl0ZSkKICAg
ICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTQs
MTQgKzExNCwxNCBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogZmxvYXQgQ29sb3I6
OmxpZ2h0bmVzcygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGF2
b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3BhY2UgYWxnb3JpdGht
cyBmb3IgSFNMLgotICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5KCkp
OworICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5PGZsb2F0PigpKTsK
IH0KIAogZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgY2FuIHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNv
bG9yc3BhY2UgYWxnb3JpdGhtcwogICAgIC8vIGZvciBsdW1pbmFuY2UgKGUuZy4gY29udmVydFRv
WFlaKGMpLnlDb21wb25lbnQoKSkuCi0gICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NS
R0JBTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkpOwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0CkBAIC0xNDksNyArMTQ5LDcgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBj
b25zdAogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAg
IHJldHVybiB7IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07CisgICAgcmV0
dXJuIHsgbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkFMb3NzeTx1aW50OF90PigpKSwgU2VtYW50aWMg
fTsKIH0KIAogc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IENv
bG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CkBAIC0xNTksMjAgKzE1OSw2IEBA
IHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmwKICAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhhc1NpbXBsZSgpLmFzU1JHQkE8Zmxv
YXQ+KCkpIH07CiB9CiAKLVNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCkpOwotICAgIHJldHVybiBhc1Np
bXBsZSgpOwotfQotCi1TUkdCQTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NS
R0JBTG9zc3koKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpOwotfQot
CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgcmV0dXJuIHRzIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEwICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29u
dmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9F
WFBPUlQgU2ltcGxlQ29sb3IgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdDsKLQotICAg
IC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JH
Qi4KLSAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwpAQCAtMjY4LDYgKzI2NSwxMyBAQCBp
bmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6OmludEhh
c2gobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAoreworICAgIGlmIChp
c0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5PFQ+
KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxUPigpOworfQorCiBpbmxpbmUgQ29s
b3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBj
b25zdAogewogICAgIHJldHVybiBhbHBoYSA/IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEu
dmFsdWUoKSkgOiAqdGhpczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJh
Y2tkCiAgICAgaWYgKCFzb3VyY2UuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuIGJhY2tkcm9wOwog
Ci0gICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9
IGJhY2tkcm9wLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byBbc291cmNlUiwg
c291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKKyAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJv
cEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbc291cmNl
Uiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3Rp
bmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCiAg
ICAgU2ltcGxlQ29sb3IgcmVzdWx0OwogICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsg
YWxwaGEgPD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CkBAIC05NywxOCAr
OTcsMTcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGlm
IChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICAvLyBTaW5jZSBwcmVtdWx0aXBseUNlaWxpbmcoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBz
cGVjaWFsLWNhc2UgdGhhdC4KLSAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gZnJvbS5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkg
OiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSB0by5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDog
Q29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgYXV0byBwcmVtdWx0QmxlbmRlZCA9IG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkQ29t
cG9uZW50KCksIHByZW11bHRpcGxpZWRUby5yZWRDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBw
cmVtdWx0aXBsaWVkVG8uZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJD
b3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ibHVlQ29tcG9uZW50KCksIHByZW11bHRpcGxp
ZWRUby5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQo
cHJlbXVsdGlwbGllZEZyb20uYWxwaGFDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmFscGhh
Q29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJv
bSA9IHByZW11bHRpcGxpZWRDZWlsaW5nKGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOwor
ICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCkpOwogCi0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkocHJlbXVsdEJs
ZW5kZWQpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBTUkdCQSB7CisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJl
ZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5n
cmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVlLCBwcm9n
cmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBw
cmVtdWx0aXBsaWVkVG8uYWxwaGEsIHByb2dyZXNzKQorICAgIH07CisKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBsaWVkQmxlbmRlZCkpOwogfQog
CiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xMTgsMTUgKzExNywxNSBAQCBDb2xvciBi
bGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNS
R0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byB0b1NSR0IgPSBm
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbkNv
bXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29tcG9u
ZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGFD
b21wb25lbnQoKSwgdG9TUkdCLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7CisgICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpi
bGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNz
KQorICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNyw0ICsyMzcsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKworLy8gUGl4ZWwgRm9y
bWF0cworCitzdHJ1Y3QgQVJHQiB7CisgICAgdW5zaWduZWQgdmFsdWU7Cit9OworCitjb25zdGV4
cHIgQVJHQiBhc0FSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwg
Y29sb3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH07Cit9CisKK2NvbnN0ZXhwciBTUkdCQTx1
aW50OF90PiBhc1NSR0JBKEFSR0IgY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oY29sb3IudmFsdWUgPj4gMTYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52
YWx1ZSA+PiA4KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUpLCBzdGF0aWNfY2Fz
dDx1aW50OF90Pihjb2xvci52YWx1ZSA+PiAyNCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw0
ICs2Niw0MyBAQCBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmCiAgICAg
cmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCitTUkdCQTxmbG9hdD4gdW5w
cmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvcjsKKyAgICByZXR1cm4geyByIC8gYSwgZyAvIGEsIGIgLyBhLCBhIH07
Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSkK
KyAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OworICAgIGlmIChhID09IDI1NSkKKyAgICAg
ICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3RE
aXZpZGVCeTI1NShyICogYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSksIGEg
fTsKK30KKworU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4gY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBpZiAoIWEp
CisgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICBpZiAoYSA9PSAyNTUpCisgICAg
ICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0
RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlk
ZUJ5MjU1KGcgKiBhICsgMjU0KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1
NShiICogYSArIDI1NCkpLCBhIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVt
dWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90IGMsIHVpbnQ4X3QgYSkKK3sKKyAgICByZXR1
cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworU1JHQkE8dWludDhf
dD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAgICAgICByZXR1
cm4gY29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4odW5wcmVtdWx0aXBs
aWVkQ29tcG9uZW50Qnl0ZShyLCBhKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVucHJlbXVsdGlw
bGllZENvbXBvbmVudEJ5dGUoZywgYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih1bnByZW11bHRp
cGxpZWRDb21wb25lbnRCeXRlKGIsIGEpKSwgYSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEx
IEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNSR0JB
PGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+
IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHBy
ZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHVucHJl
bXVsdGlwbGllZChTUkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVz
Y2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDE4IEBAIGNvbnN0
ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4gYnl0ZSAvIDI1
NS4wZjsKIH0KIAordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25z
dCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4g
dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+JiBjb2xvcikKK3sKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRz
WzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1szXSkgfTsKK30KKwogY29u
c3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAg
IHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5k
ZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0g
YzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwog
fQogCi1TUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK1NS
R0JBPGZsb2F0PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBj
b25zdAogewogICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4
IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAg
LTQ5LDExICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0
aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKLSAgICBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5
KCkgY29uc3Q7Ci0KICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29sIGlzQmxhY2so
KSBjb25zdDsKIAorICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2Ug
Y29sb3JzIGludG8gc1JHQi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JH
QkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQorICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkFGbG9h
dENvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgICAgIDogbV9jb21wb25lbnRzKGMxLCBj
MiwgYzMsIGFscGhhKQpAQCAtNjEsNiArNzAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xv
c3N5KCkgY29uc3Q7CisKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsK
ICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9u
IDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwyOSArMTUyLDI5IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNpbXBsZUNvbG9y
IHBpeGVsIHsgKmRlc3QgfTsKKyAgICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoQVJHQiB7ICpk
ZXN0IH0pOwogCi0gICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuaXNWaXNpYmxlKCkpIHsK
KyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5hbHBoYSkgewogICAgICAgICAgICAgc2V0
UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0g
cHJlbXVsdGlwbHlGbG9vcmluZyhwaXhlbCk7CisgICAgICAgICAgICBwaXhlbCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhwaXhlbCk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9IDI1NSAtIGE7CiAK
LSAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICogYSArIHBpeGVsLnJlZENvbXBvbmVudCgp
ICogZCk7Ci0gICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyBwaXhlbC5ncmVlbkNv
bXBvbmVudCgpICogZCk7Ci0gICAgICAgIGIgPSBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhl
bC5ibHVlQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgYSArPSBmYXN0RGl2aWRlQnkyNTUoZCAq
IHBpeGVsLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIg
KiBhICsgcGl4ZWwucmVkICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEg
KyBwaXhlbC5ncmVlbiAqIGQpOworICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsg
cGl4ZWwuYmx1ZSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwu
YWxwaGEpOwogCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIs
IGEpOworICAgICAgICBhdXRvIHJlc3VsdCA9IFNSR0JBPHVpbnQ4X3Q+IHsgciwgZywgYiwgYSB9
OwogCiAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcmVzdWx0
ID0gdW5wcmVtdWx0aXBseShyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0ID0gdW5wcmVtdWx0
aXBsaWVkKHJlc3VsdCk7CiAKLSAgICAgICAgKmRlc3QgPSByZXN1bHQudmFsdWVBc0FSR0IoKTsK
KyAgICAgICAgKmRlc3QgPSBhc0FSR0IocmVzdWx0KS52YWx1ZTsKICAgICB9CiAKICAgICBzdGF0
aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0yMjYsMTIgKzIyNiwx
MiBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmICFhKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgYXV0byByZXN1bHQgPSBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgYSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gU1JHQkE8dWludDhfdD4geyBz
dGF0aWNfY2FzdDx1aW50OF90PihyKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZyksIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGIpLCBzdGF0aWNfY2FzdDx1aW50OF90PihhKSB9OwogCiAgICAgICAgIGlm
IChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHBy
ZW11bHRpcGx5Rmxvb3JpbmcocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiByZXN1bHQudmFsdWVBc0FS
R0IoKTsKKyAgICAgICAgcmV0dXJuIGFzQVJHQihyZXN1bHQpLnZhbHVlOwogICAgIH0KIAogICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiBtX3BpeGVsczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaW1wbGVD
b2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQotewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0gMjU1KQotICAgICAgICBy
ZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUo
ciAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBh
KTsKLX0KLQotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlDZWlsaW5nKFNpbXBsZUNvbG9yIGNvbG9y
KQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0g
MjU1KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihm
YXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQp
LCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKLX0KLQotc3RhdGljIGlubGluZSB1
aW50MTZfdCB1bnByZW11bHRpcGx5Q2hhbm5lbCh1aW50OF90IGMsIHVpbnQ4X3QgYSkKLXsKLSAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKLX0KLQotU2ltcGxl
Q29sb3IgdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciBjb2xvcikKLXsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yOwotICAgIGlmICghYSB8fCBhID09IDI1NSkKLSAgICAgICAgcmV0dXJu
IGNvbG9yOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBseUNoYW5uZWwo
ciwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5lbChi
LCBhKSwgYSk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIHVp
bnQzMl90IHZhbHVlQXNBUkdCKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0
ZXhwciB1aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIGNv
bnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4g
MTY7IH0KLSAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBvbmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUgPj4gODsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFD
b21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDI0OyB9Ci0KICAgICBjb25zdGV4
cHIgZmxvYXQgYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gY29udmVydFRv
Q29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSk7IH0KIAogICAgIGNvbnN0ZXhwciBib29s
IGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CkBA
IC02Miw3ICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KDB4RkYgLSByZWRDb21wb25lbnQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYg
LSBncmVlbkNvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGJsdWVDb21w
b25lbnQoKSksIGFscGhhIH07CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgIHJldHVybiB7
IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9u
ZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVD
b21wb25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4p
CisgICAgICAgICAgICByZXR1cm4geyByZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwg
Ymx1ZUNvbXBvbmVudCgpLCBhbHBoYUNvbXBvbmVudCgpIH07CisgICAgfQogCiAgICAgdGVtcGxh
dGU8c3RkOjpzaXplX3QgTj4KICAgICBjb25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25zdApAQCAt
NzksNiArODEsMTAgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBjb25zdGV4cHIg
dWludDhfdCByZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9Cisg
ICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlID4+IDg7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorCiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CiAK
QEAgLTkwLDEzICs5Niw5IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3Io
aW4KIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWlu
dDhfdD4mKTsKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4m
KTsKIAotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlGbG9vcmluZyhTaW1wbGVDb2xvcik7Ci1TaW1w
bGVDb2xvciBwcmVtdWx0aXBseUNlaWxpbmcoU2ltcGxlQ29sb3IpOwotU2ltcGxlQ29sb3IgdW5w
cmVtdWx0aXBseShTaW1wbGVDb2xvcik7Ci0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxl
Q29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFs
dWUoKTsKKyAgICByZXR1cm4gYS52YWx1ZUFzQVJHQigpID09IGIudmFsdWVBc0FSR0IoKTsKIH0K
IAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQpA
QCAtMTE2LDI1ICsxMTgsMTQgQEAgY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xv
cihpbgogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JB
PHVpbnQ4X3Q+JiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAg
IHJldHVybiB7IHIsIGcsIGIsIGEgfTsKKyAgICByZXR1cm4geyBzUkdCQS5yZWQsIHNSR0JBLmdy
ZWVuLCBzUkdCQS5ibHVlLCBzUkdCQS5hbHBoYSB9OwogfQogCiBpbmxpbmUgU2ltcGxlQ29sb3Ig
bWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgc1JHQkEpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBzUkdCQTsKLSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGIp
LCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gU2ltcGxlQ29sb3I6OmFzU1JHQkEoKSBjb25zdAotewot
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19mbG9hdGluZ19wb2ludF92PFQ+KQotICAgICAgICBy
ZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChyZWRDb21wb25lbnQoKSksIGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dChibHVlQ29tcG9uZW50KCkpLCAgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25l
bnQoKSkgfTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpLCBncmVl
bkNvbXBvbmVudCgpLCBibHVlQ29tcG9uZW50KCksIGFscGhhQ29tcG9uZW50KCkgfTsKLX0KLQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBzdGQgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjYzOTE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYQogewogICAgIGlmICghaXNCYXNpY0FuaW1h
dGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRp
b24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwg
QChhKV1dOwogfQogCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFRvVmFsdQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VG9WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAt
NDk2LDcgKzQ5Niw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChh
dXRvJiBjb2xvcikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudGVt
cGxhdGUgdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIHJldHVybiBAW0AociksIEAo
ZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldp
bjo6c2V0RnJvbVZhbHUKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gdmFsdWUudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVu
dCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9u
ZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBDR0Zsb2F0IGFbNF0gPSB7
IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBv
bmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0Yo
Q0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldEZyb21WYWx1ZSht
X2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00MTksOCArNDE5LDggQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKAogICAgIGlmIChhbmltYXRpb25UeXBl
KCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2
YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIENHRmxvYXQgYVs0XSA9IHsgc2lt
cGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNp
bXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9
OworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwor
ICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNv
bXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVj
dG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5p
bWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00ODks
OCArNDg5LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoYwogICAg
ICAgICAKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihD
RkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFj
a3MpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOwotICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgp
LCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50
KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICAgICAgYXV0byBjb21wb25l
bnRzID0gdmFsdWVbaV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIENHRmxvYXQg
YVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1
ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4g
diA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgICAgIENGQXJyYXlBcHBl
bmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3
IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBzZXRT
b3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHN0YXRpYyB2b2lkIGFk
ZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVudCwgR3JhZGllbnQ6OkNvbG9y
U3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9w
LmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xv
cl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxw
aGEpOwogfQogCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogCiBz
dGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwg
aW50IGlkLCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAg
IGNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCBy
LCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwogfQogCkBAIC0xMzUsOCArMTM1LDggQEAgc3RhdGlj
IHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0dGVybgogCiBzdGF0aWMgR3JhZGllbnQ6OkNv
bG9yU3RvcCBpbnRlcnBvbGF0ZUNvbG9yU3RvcChHcmFkaWVudDo6Q29sb3JTdG9wIGZyb20sIEdy
YWRpZW50OjpDb2xvclN0b3AgdG8pCiB7Ci0gICAgYXV0byBbcjEsIGcxLCBiMSwgYTFdID0gZnJv
bS5jb2xvci50b1NSR0JBTG9zc3koKTsKLSAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0by5j
b2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyMSwgZzEsIGIxLCBhMV0gPSBmcm9tLmNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0
by5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAKICAgICBmbG9hdCBvZmZzZXQgPSBmcm9t
Lm9mZnNldCArICh0by5vZmZzZXQgLSBmcm9tLm9mZnNldCkgKiAwLjVmOwogICAgIGZsb2F0IHIg
PSByMSArIChyMiAtIHIxKSAqIDAuNWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDkgQEAgdm9p
ZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZAogICAgICAgICB1bnNpZ25lZCog
cm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4
KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAg
ICBhdXRvIHBpeGVsQ29sb3IgPSB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0p
OwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihsb29rVXBUYWJsZVtw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNv
bXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhl
bENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwotICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlw
bHlDZWlsaW5nKHBpeGVsQ29sb3IpLnZhbHVlQXNBUkdCKCk7CisgICAgICAgICAgICBhdXRvIHBp
eGVsQ29tcG9uZW50cyA9IHVucHJlbXVsdGlwbGllZChhc1NSR0JBKEFSR0IgeyAqcGl4ZWwgfSkp
OworICAgICAgICAgICAgcGl4ZWxDb21wb25lbnRzID0geyBsb29rVXBUYWJsZVtwaXhlbENvbXBv
bmVudHMucmVkXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLmdyZWVuXSwgbG9va1VwVGFi
bGVbcGl4ZWxDb21wb25lbnRzLmJsdWVdLCBwaXhlbENvbXBvbmVudHMuYWxwaGEgfTsKKyAgICAg
ICAgICAgICpwaXhlbCA9IGFzQVJHQihwcmVtdWx0aXBsaWVkQ2VpbGluZyhwaXhlbENvbXBvbmVu
dHMpKS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICBjYWlyb19zdXJmYWNlX21hcmtfZGly
dHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgp
LCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCShy
ZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9OYXRpdmVJbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBD
b2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihjCiAgICAgICAgIHJldHVybiBD
b2xvcigpOwogCiAgICAgdW5zaWduZWQqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5z
aWduZWQqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAg
cmV0dXJuIHVucHJlbXVsdGlwbHkoU2ltcGxlQ29sb3IgeyAqcGl4ZWwgfSk7CisgICAgcmV0dXJu
IGFzQVJHQih1bnByZW11bHRpcGxpZWQoYXNTUkdCQShBUkdCIHsgKnBpeGVsIH0pKSkudmFsdWU7
CiB9CiAKIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdo
dGluZ05FT04uaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMSwxMSArMTExLDExIEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHlOZW8KICAgICAvLyBTZXQgbGlnaHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3Vt
ZW50cy5jb25zdE9uZSA9IDE7CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gbV9saWdodGluZ0Nv
bG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBjb2xvciA9IG1fbGlnaHRp
bmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgIGZsb2F0QXJndW1lbnRzLmNv
bG9yUmVkID0gc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRBcmd1bWVudHMu
Y29sb3JHcmVlbiA9IHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRBcmd1
bWVudHMuY29sb3JCbHVlID0gc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpOworICAgIGZsb2F0
QXJndW1lbnRzLmNvbG9yUmVkID0gY29sb3IucmVkOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9y
R3JlZW4gPSBjb2xvci5ncmVlbjsKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBjb2xv
ci5ibHVlOwogICAgIGZsb2F0QXJndW1lbnRzLnBhZGRpbmc0ID0gMDsKIAogICAgIGlmIChtX2xp
Z2h0U291cmNlLT50eXBlKCkgPT0gTFNfUE9JTlQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2
aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDEwICs0MDUsMTAgQEAgYm9v
bCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcAogICAgIGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwogICAgIAogICAgIGlmIChvcGVyYXRpbmdDb2xvclNw
YWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gdG9MaW5lYXJTUkdCQShtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCkpOworICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9yLnRv
U1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRp
bmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3Nz
eSgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCk7CiAgICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRh
LmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0KICAgICBtX2xpZ2h0
U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zv
cm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAg
IGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKIAogICAgIGZv
ciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0
aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBib29s
IEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2Vt
YW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9yID0g
Y29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdC
QUxvc3N5PGZsb2F0PigpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlv
bnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihzUkdC
QUNvbG9yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xv
ckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQCBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCiAKIENvbG9yOjpvcGVy
YXRvciBHZGtSR0JBKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFM
b3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwog
ICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyArMjUz
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJlZjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9n
cmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVzZVBy
b2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBw
cmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICBnbFVu
aWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGlu
ZVdpZHRoKHdpZHRoKTsKIApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpkcmF3TnVtYmVyKGludCBudW0KICAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShzdXJm
YWNlKTsKIAogICAgIC8vIFNpbmNlIHdlIHdvbid0IHN3YXAgUitCIHdoZW4gdXBsb2FkaW5nIGEg
dGV4dHVyZSwgcGFpbnQgd2l0aCB0aGUgc3dhcHBlZCBSK0IgY29sb3IuCi0gICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEo
Y3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCB3aWR0aCwg
aGVpZ2h0KTsKQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJv
Z3JhbShUZXh0dXJlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAg
ICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNv
bnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5KCkpOworICAg
ICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigp
LnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFt
LmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihw
cm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBm
bG9hdChzaXplLmhlaWdodCgpKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNo
YWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KICAgICBSZWY8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsK
ICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBbciwg
ZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0Pigp
KTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEp
OwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dlZCkKICAgICAgICAgZmxhZ3MgfD0g
U2hvdWxkQmxlbmQ7CkBAIC02ODYsNyArNjg2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRy
YXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JB
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKICAgICBnbENsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgZ2xDbGVhcihHTF9DT0xP
Ul9CVUZGRVJfQklUKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9S
X0YgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBn
LCBiLCBhKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QKIHsK
LSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiBEMkQxOjpWZWN0b3I0
RihyLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjYz
OTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGly
ZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgR3JhZGllbnQ6
OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW4KICAgICBWZWN0b3I8RDJEMV9HUkFESUVOVF9TVE9Q
PiBncmFkaWVudFN0b3BzOwogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRXh0ZW5kZWRD
b2xvci4KICAgICBmb3IgKGF1dG8gc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgICAgIGdyYWRpZW50
U3RvcHMuYXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JG
KHIsIGcsIGIsIGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJ
KHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVuCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBTaW1wbGVDb2xvciBncmFtbWFyUGF0dGVybkNvbG9yIHsgbWFrZVNpbXBsZUNv
bG9yKDAsIDEyOCwgMCkgfTsKIAogICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29sb3Ig
PSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8g
Z3JhbW1hclBhdHRlcm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOwotICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQoKSwg
cGF0dGVybkNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9uZW50
KCksIHBhdHRlcm5Db2xvci5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICBhdXRvIHBhdHRlcm5Db2xv
ckNvbXBvbmVudHMgPSBwYXR0ZXJuQ29sb3IuYXNTUkdCQTx1aW50OF90PigpOworICAgIENHQ29u
dGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMucmVk
LCBwYXR0ZXJuQ29sb3JDb21wb25lbnRzLmdyZWVuLCBwYXR0ZXJuQ29sb3JDb21wb25lbnRzLmJs
dWUsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMuYWxwaGEpOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gdXNlclRvQmFzZSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAgICAgQ0dQb2ludCBw
aGFzZSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwb2ludCwgdXNlclRvQmFzZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJl
Y3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAKIEQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRl
eHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiBEMkQx
OjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCkpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9u
IDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MDIsNyArMTQwMiw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpkaXNh
YmxlZFRleHRDb2xvcihjb24KICAgICAvLyBJZiB0aGVyZSdzIG5vdCB2ZXJ5IG11Y2ggY29udHJh
c3QgYmV0d2VlbiB0aGUgZGlzYWJsZWQgY29sb3IgYW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLAog
ICAgIC8vIGp1c3QgbGVhdmUgdGhlIHRleHQgY29sb3IgYWxvbmUuIFdlIGRvbid0IHdhbnQgdG8g
Y2hhbmdlIGEgZ29vZCBjb250cmFzdCBjb2xvciBzY2hlbWUgc28gdGhhdCBpdCBoYXMgcmVhbGx5
IGJhZCBjb250cmFzdC4KICAgICAvLyBJZiB0aGUgY29udHJhc3Qgd2FzIGFscmVhZHkgcG9vciwg
dGhlbiBpdCBkb2Vzbid0IGRvIGFueSBnb29kIHRvIGNoYW5nZSBpdCB0byBhIGRpZmZlcmVudCBw
b29yIGNvbnRyYXN0IGNvbG9yIHNjaGVtZS4KLSAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNhYmxl
ZENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkpIDwg
bWluQ29sb3JDb250cmFzdFZhbHVlKQorICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVkQ29s
b3IudG9TUkdCQUxvc3N5PGZsb2F0PigpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpKSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKICAgICAgICAgcmV0dXJuIHRleHRDb2xv
cjsKIAogICAgIHJldHVybiBkaXNhYmxlZENvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU1
LDcgKzEwNTUsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRpCiBz
dGF0aWMgYm9vbCBzaG91bGRVc2VDb252ZXhHcmFkaWVudChjb25zdCBDb2xvciYgYmFja2dyb3Vu
ZENvbG9yKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBs
dW1pbmFuY2UuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdC
QUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdC
QUxvc3N5PGZsb2F0PigpOwogICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6
Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhh
Q2hhbm5lbCA8IDAuNTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQ
YWludFN0eWxlLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRQYWludFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBi
b29sIHRleHRDb2xvcklzTGVnaWJsZUFnYWluc3RCYWNrZ3JvdW5kCiB7CiAgICAgLy8gVXNlcyB0
aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBvZiBsZWdpYmlsaXR5OiBhIGNvbnRyYXN0IHJhdGlvIG9m
IDQuNToxIG9yIGdyZWF0ZXIuCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8j
dmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0Ci0gICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8o
dGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkp
ID4gNC41OworICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBTG9zc3k8
ZmxvYXQ+KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpID4gNC41Owog
fQogCiBzdGF0aWMgQ29sb3IgYWRqdXN0Q29sb3JGb3JWaXNpYmlsaXR5T25CYWNrZ3JvdW5kKGNv
bnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2
ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE1ICs4MSwxNSBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGFuaW1hdGUoU1ZHRWxlbWVudCosIGZsb2F0IHByb2dyZXNzLCB1
bnNpZ25lZCByZXBlYXRDb3VudCwgQ29sb3ImIGFuaW1hdGVkKQogICAgIHsKLSAgICAgICAgYXV0
byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0g
ICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25Nb2Rl
OjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
Ci0gICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlv
bigpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0
ZWQgPSBhbmltYXRlZC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1w
bGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5p
bWF0ZWQgOiBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2lt
cGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBs
ZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKICAgICAgICAgCi0gICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJv
Z3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUby5y
ZWRDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCksIHNp
bXBsZUFuaW1hdGVkLnJlZENvbXBvbmVudCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNl
OjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVu
dCgpLCBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5n
cmVlbkNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKLSAgICAg
ICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1w
bGVGcm9tLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVU
b0F0RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVDb21w
b25lbnQoKSk7Ci0gICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywg
cmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxwaGFD
b21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwgc2lt
cGxlQW5pbWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6
OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8u
cmVkLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWQsIHNpbXBsZUFuaW1hdGVkLnJlZCk7Cisg
ICAgICAgIGZsb2F0IGdyZWVuID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQs
IHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmdyZWVuLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5ncmVlbiwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW4pOworICAgICAgICBmbG9hdCBibHVlID0gQmFz
ZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2ltcGxl
VG8uYmx1ZSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQuYmx1
ZSk7CisgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0
Q291bnQsIHNpbXBsZUZyb20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5kT2ZE
dXJhdGlvbi5hbHBoYSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKICAgICAgICAg
YW5pbWF0ZWQgPSBtYWtlU2ltcGxlQ29sb3Iocm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyZWQp
LCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbChibHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkpOwogICAgIH0KQEAg
LTEwMywxMiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0byBz
aW1wbGVGcm9tID0gZnJvbUNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAg
IGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAg
ICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsK
KyAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CiAKLSAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSAtIHNpbXBs
ZVRvLnJlZENvbXBvbmVudCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZyb20uZ3Jl
ZW5Db21wb25lbnQoKSAtIHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgICAgIGZsb2F0
IGJsdWUgPSBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSAtIHNpbXBsZVRvLmJsdWVDb21wb25l
bnQoKTsKKyAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWQgLSBzaW1wbGVUby5yZWQ7
CisgICAgICAgIGZsb2F0IGdyZWVuID0gc2ltcGxlRnJvbS5ncmVlbiAtIHNpbXBsZVRvLmdyZWVu
OworICAgICAgICBmbG9hdCBibHVlID0gc2ltcGxlRnJvbS5ibHVlIC0gc2ltcGxlVG8uYmx1ZTsK
IAogICAgICAgICByZXR1cm4gc3RkOjpoeXBvdChyZWQsIGdyZWVuLCBibHVlKTsKICAgICB9CkBA
IC0xMjYsMTQgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRGcm9tQW5kVG9WYWx1
ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCiAgICAgewotICAgICAgICBhdXRvIHNpbXBsZUZyb20g
PSBtX2Zyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVU
byA9IG1fdG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1wbGVG
cm9tID0gbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBs
ZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25vcmVz
IGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAgICAg
ICAgIG1fdG8gPSBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25l
bnQoKSksCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdy
ZWVuQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAotICAgICAgICAg
ICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBz
aW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSkKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQpLAorICAgICAgICAgICAgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4p
LAorICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlICsg
c2ltcGxlRnJvbS5ibHVlKQogICAgICAgICApOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFBhcnQgMSBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhfdD4gYXJl
IGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzOTQ4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW06CisgICAgICAgIChX
ZWJLaXQ6OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpn
ZXREb2N1bWVudEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIEFkYXB0IHRvIHVzZSB0ZW1wbGF0
aXplZCB0b1NSR0JBTG9zc3k8ZmxvYXQvdWludDhfdD4uCisKIDIwMjAtMDctMDMgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjYzOTE4KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCB3ZWJraXRDb2xvckZpbGxGcm9tV2ViQ29y
ZUNvbG9yKGNvbgogewogICAgIFJFTEVBU0VfQVNTRVJUKHdlYkNvcmVDb2xvci5pc1ZhbGlkKCkp
OwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5KCk7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0
PigpOwogICAgIGNvbG9yLT5yZWQgPSByOwogICAgIGNvbG9yLT5ncmVlbiA9IGc7CiAgICAgY29s
b3ItPmJsdWUgPSBiOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0
dXJlQ29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OmJlZ2luU3dpcGVHZQogICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CiAgICAg
ICAgICAgICBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdCA9IGNvbG9yOwogICAg
ICAgICAgICAgaWYgKCFtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0dGVybikgewotICAgICAgICAg
ICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3Nz
eSgpOworICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTd2lw
ZVNuYXBzaG90UGF0dGVybiA9IGFkb3B0UmVmKGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYmEocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNp
b24gMjYzOTE4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTYsNyArNjU2LDcgQEAgYm9vbCBXZWJGcmFtZTo6Z2V0
RG9jdW1lbnRCYWNrZ3JvdW5kQ29sbwogICAgIGlmICghYmdDb2xvci5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NS
R0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOwogICAgICpyZWQgPSByOwogICAgICpncmVlbiA9IGc7CiAgICAgKmJsdWUgPSBi
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGUubW0JKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OTMsNyArNjkzLDcgQEAgc3RhdGljIE5TT2JqZWN0KiBhbmltYXRpb25W
YWx1ZUZyb21LZXlmcgogICAgICAgICByZXR1cm4gQChrZXlmcmFtZVZhbHVlLm51bWJlclZhbHVl
KCkpOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpL
ZXlmcmFtZVZhbHVlOjpDb2xvcktleVR5cGU6IHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBrZXlmcmFtZVZhbHVlLmNvbG9yVmFsdWUoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgpLnRv
U1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICByZXR1cm4gQFsgQChyKSwgQChnKSwgQChi
KSwgQChhKSBdOwogICAgIH0KIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzOTI1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFBhcnQgMSBvZiBTaW1wbGVDb2xvciBhbmQgU1JH
QkE8dWludDhfdD4gYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhl
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzOTQ4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0
ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAg
ICAgICBBZGFwdCB0ZXN0cyB0byB1c2UgdGVtcGxhdGl6ZWQgdG9TUkdCQUxvc3N5PGZsb2F0L3Vp
bnQ4X3Q+LgorCiAyMDIwLTA3LTAzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5D
T01QTEVURQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVz
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3
IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29s
b3I6OndoaXRlOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxv
c3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTU0LDcgKzU0LDcg
QEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xv
cjo6YmxhY2s7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9z
c3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBF
WFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtNzAsNyArNzAsNyBA
QCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjU1LCAwLCAwKTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9y
LnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5o
dWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC04
Niw3ICs4Niw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9yIGNv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9
IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hT
TEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgw
LjMzMzMzMzM0LCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNv
bG9yLnNhdHVyYXRpb24pOwpAQCAtMTAyLDcgKzEwMiw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KTsK
IAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAg
ICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjY2NjY2NjksIGhzbGFDb2xvci5odWUpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMTgsNyArMTE4LDcg
QEAgVEVTVChDb2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBD
b2xvcjo6ZGFya0dyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NS
R0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsK
ICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTM0LDcg
KzEzNCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3Ig
PSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JH
QkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9z
c3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xNTAsNyAr
MTUwLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogewogICAgIENvbG9yIGNv
bG9yID0gQ29sb3I6OmxpZ2h0R3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNv
bG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xv
ci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBA
IC0xODMsMjkgKzE4MywyOSBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKICAgICB2YWxpZENvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKDEsIDIsIDMsIDQpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29s
b3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4dGVuZGVkKCkp
OwotICAgIGF1dG8gc2ltcGxlVmFsaWRDb2xvciA9IHZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5yZWRDb21wb25lbnQo
KSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwg
Mik7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAzKTsK
LSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKKyAg
ICBhdXRvIHZhbGlkQ29sb3JDb21wb25lbnRzID0gdmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKKyAg
ICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOworICAgIEVYUEVDVF9F
USh2YWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRDb2xv
ckNvbXBvbmVudHMuYWxwaGEsIDQpOwogCiAgICAgQ29sb3IgeWV0QW5vdGhlclZhbGlkQ29sb3Io
V1RGTW92ZSh2YWxpZENvbG9yKSk7CiAgICAgRVhQRUNUX1RSVUUoeWV0QW5vdGhlclZhbGlkQ29s
b3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNF
eHRlbmRlZCgpKTsKLSAgICBhdXRvIHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yID0geWV0QW5v
dGhlclZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRVEo
c2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOwotICAgIEVYUEVD
VF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsKLSAg
ICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAz
KTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYWxwaGFDb21wb25l
bnQoKSwgNCk7CisgICAgYXV0byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSB5ZXRB
bm90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEo
eWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CisgICAgRVhQRUNUX0VRKHll
dEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VRKHll
dEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEoeWV0
QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmFscGhhLCA0KTsKIAogICAgIG90aGVyVmFsaWRD
b2xvciA9IFdURk1vdmUoeWV0QW5vdGhlclZhbGlkQ29sb3IpOwogICAgIEVYUEVDVF9UUlVFKG90
aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRShvdGhlclZhbGlkQ29s
b3IuaXNFeHRlbmRlZCgpKTsKLSAgICBhdXRvIHNpbXBsZU90aGVyVmFsaWRDb2xvciA9IG90aGVy
VmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShzaW1w
bGVPdGhlclZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOwotICAgIEVYUEVDVF9FUShzaW1w
bGVPdGhlclZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgMik7Ci0gICAgRVhQRUNUX0VRKHNp
bXBsZU90aGVyVmFsaWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShz
aW1wbGVPdGhlclZhbGlkQ29sb3IuYWxwaGFDb21wb25lbnQoKSwgNCk7CisgICAgYXV0byBvdGhl
clZhbGlkQ29sb3JDb21wb25lbnRzID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50
OF90PigpOworICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7
CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOworICAg
IEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOworICAgIEVYUEVD
VF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmFscGhhLCA0KTsKIH0KIAogVEVTVChDb2xv
ciwgTHVtaW5hbmNlKQpAQCAtMjE2LDIxICsyMTYsMjIgQEAgVEVTVChDb2xvciwgTHVtaW5hbmNl
KQogICAgIGF1dG8gYyA9IG1ha2VTaW1wbGVDb2xvcig4NSwgOTAsIDE2MCk7CiAgICAgRVhQRUNU
X0ZMT0FUX0VRKENvbG9yKGMpLmx1bWluYW5jZSgpLCAwLjExNzgxNjkyKTsKIAotICAgIEVYUEVD
VF9FUShjLnJlZENvbXBvbmVudCgpLCA4NSk7Ci0gICAgRVhQRUNUX0VRKGMuZ3JlZW5Db21wb25l
bnQoKSwgOTApOwotICAgIEVYUEVDVF9FUShjLmJsdWVDb21wb25lbnQoKSwgMTYwKTsKLQotICAg
IGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0xpZ3RlbmVkKS5sdW1pbmFuY2Uo
KSwgMC4yOTE2ODgwOCk7Ci0gICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWRDb21wb25lbnQoKSwg
MTMwKTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmdyZWVuQ29tcG9uZW50KCksIDEzNyk7Ci0g
ICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlQ29tcG9uZW50KCksIDI0NCk7Ci0KLSAgICBhdXRv
IGNEYXJrZW5lZCA9IENvbG9yKGMpLmRhcmtlbmVkKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0RhcmtlbmVkKS5sdW1pbmFuY2UoKSwgMC4w
MjcwMDY3MjcpOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkQ29tcG9uZW50KCksIDQwKTsK
LSAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdyZWVuQ29tcG9uZW50KCksIDQzKTsKLSAgICBFWFBF
Q1RfRVEoY0RhcmtlbmVkLmJsdWVDb21wb25lbnQoKSwgNzYpOworICAgIGF1dG8gY0NvbXBvbmVu
dHMgPSBjLmFzU1JHQkE8dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMucmVk
LCA4NSk7CisgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLmdyZWVuLCA5MCk7CisgICAgRVhQRUNU
X0VRKGNDb21wb25lbnRzLmJsdWUsIDE2MCk7CisKKyAgICBhdXRvIGNMaWd0ZW5lZCA9IENvbG9y
KGMpLmxpZ2h0ZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9GTE9B
VF9FUShDb2xvcihtYWtlU2ltcGxlQ29sb3IoY0xpZ3RlbmVkKSkubHVtaW5hbmNlKCksIDAuMjkx
Njg4MDgpOworICAgIEVYUEVDVF9FUShjTGlndGVuZWQucmVkLCAxMzApOworICAgIEVYUEVDVF9F
UShjTGlndGVuZWQuZ3JlZW4sIDEzNyk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlLCAy
NDQpOworCisgICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjKS5kYXJrZW5lZCgpLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihtYWtlU2ltcGxlQ29s
b3IoY0RhcmtlbmVkKSkubHVtaW5hbmNlKCksIDAuMDI3MDA2NzI3KTsKKyAgICBFWFBFQ1RfRVEo
Y0RhcmtlbmVkLnJlZCwgNDApOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQuZ3JlZW4sIDQzKTsK
KyAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmJsdWUsIDc2KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4
dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBQ
M0NvbnZlcnNpb25Ub1NSR0IpCiAgICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQ
RUNUX1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCi0gICAgYXV0byBzUkdCQUNvbG9yID0g
cDNDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRv
U1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5
RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVz
c2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC40NjI1Mzc4ODVmKSk7CiAgICAgRVhQ
RUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC4xNDkx
NDc4MzhmKSk7CkBAIC0yNTIsNyArMjUyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBMaW5lYXJT
UkdCQ29udmVyc2lvbgogewogICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29s
b3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKICAgICBF
WFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc1JHQkFDb2xv
ciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGxp
bmVhckNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJV
RShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5Mjdm
KSk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3Iu
Ymx1ZSwgMC41MzcwOTg3MDZmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403502</attachid>
            <date>2020-07-03 19:57:53 -0700</date>
            <delta_ts>2020-07-03 20:22:39 -0700</delta_ts>
            <desc>Part 1</desc>
            <filename>bug-213948-20200703195752.patch</filename>
            <type>text/plain</type>
            <size>70876</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsaWdodG5lc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omx1bWluYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VP
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJD
b3JlOjphc0FSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNTUkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRGbG9vcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2VpbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjp1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29t
cG9uZW50Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBpeGVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNv
bG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xv
cjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVkQ29t
cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpncmVlbkNvbXBv
bmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Ymx1ZUNvbXBvbmVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHA6CisgICAgICAgIChQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFVzZUNvbnZleEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmRDb2xvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29sb3JG
dW5jdGlvbjo6YW5pbWF0ZSk6CisKIDIwMjAtMDctMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYkNvcmUvU291cmNlcy50eHQ6IFJlbW92ZSAjaWYgRU5BQkxF
X1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcwLDcgKzE5NzAsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTk4NCw3ICs5OTg0LDYgQEAKIAkJN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2
IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQWJvcnRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBE
OTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MzMEQ5ODIxRjgxNUFDMjAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBTaW1w
bGVDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVD
b2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzFDODhDMjQ3QUQ1OTUw
MDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMzFERjlFOTVCMDBEMzM5NUMgLyog
UG9zaXRpb25PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3NpdGlvbk9wdGlvbnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjU2OTcsNyArMjU2OTYsNiBAQAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBT
aW1wbGVDb2xvci5jcHAgKi8sCiAJCQkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBs
ZUNvbG9yLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgzLDEwICsxOTgzLDEwIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFzQ29sb3IoKS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0g
Y29sb3IuZ3JlZW5Db21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOwor
ICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1
ZUFzQ29sb3IoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOwor
ICAgIGcgPSBjb2xvci5ncmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE0ICs5MiwxNCBAQCBzdGF0aWMg
QXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0NvbG9yID0g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIGJ1ZmZl
ci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICBy
ZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAK
ICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7
CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDEwICs3MDEsMTAgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRv
IGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSku
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7
Ci0gICAgZyA9IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWVDb21w
b25lbnQoKTsKKyAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgciA9IGNvbG9y
LnJlZDsKKyAgICBnID0gY29sb3IuZ3JlZW47CisgICAgYiA9IGNvbG9yLmJsdWU7CiB9CiAKIEFY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJl
Y2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKG1fY29sb3IpOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZT4gY3JlYXRlV3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVy
VHlwZSBudW1iZXIpCkBAIC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBE
ZXByZWNhdGVkQ1NTT01SR0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSkKLSAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLnJl
ZENvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2FscGhhKGNyZWF0
ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkpKQorICAgICAg
ICA6IG1fY29sb3IoY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpCisgICAgICAgICwgbV9y
ZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5yZWQpKQorICAgICAgICAsIG1fZ3JlZW4o
Y3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbikpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZSkpCisgICAgICAgICwgbV9hbHBoYShjcmVh
dGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkp
CiAgICAgewogICAgIH0KIAotICAgIFNpbXBsZUNvbG9yIG1fY29sb3I7CisgICAgU1JHQkE8dWlu
dDhfdD4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1f
cmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAg
ICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjIxLDcgKzYyMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246
OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3R5bGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xh
ID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhl
IHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5
IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVh
ciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2Fu
IGJlIHNwZWNpZmllZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitp
bmxpbmUgdWludDhfdCBibGVuZCh1aW50OF90IGZyb20sIHVpbnQ4X3QgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kKHN0YXRpY19j
YXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9n
cmVzcykpOworfQorCiBpbmxpbmUgaW50IGJsZW5kKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNf
Y2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogcHJv
Z3Jlc3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHRlbmVkKCkgY29uc3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAg
ICBpZiAodiA9PSAwLjBmKQpAQCAtMTAzLDcgKzEwMyw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5l
ZCgpIGNvbnN0CiAgICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSB3aGl0ZSkKICAg
ICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTQs
MTQgKzExNCwxNCBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogZmxvYXQgQ29sb3I6
OmxpZ2h0bmVzcygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGF2
b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3BhY2UgYWxnb3JpdGht
cyBmb3IgSFNMLgotICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5KCkp
OworICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5PGZsb2F0PigpKTsK
IH0KIAogZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgY2FuIHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNv
bG9yc3BhY2UgYWxnb3JpdGhtcwogICAgIC8vIGZvciBsdW1pbmFuY2UgKGUuZy4gY29udmVydFRv
WFlaKGMpLnlDb21wb25lbnQoKSkuCi0gICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NS
R0JBTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkpOwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0CkBAIC0xNDksNyArMTQ5LDcgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBj
b25zdAogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAg
IHJldHVybiB7IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07CisgICAgcmV0
dXJuIHsgbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkFMb3NzeTx1aW50OF90PigpKSwgU2VtYW50aWMg
fTsKIH0KIAogc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IENv
bG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CkBAIC0xNTksMjAgKzE1OSw2IEBA
IHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmwKICAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhhc1NpbXBsZSgpLmFzU1JHQkE8Zmxv
YXQ+KCkpIH07CiB9CiAKLVNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCkpOwotICAgIHJldHVybiBhc1Np
bXBsZSgpOwotfQotCi1TUkdCQTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NS
R0JBTG9zc3koKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpOwotfQot
CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgcmV0dXJuIHRzIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEwICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29u
dmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9F
WFBPUlQgU2ltcGxlQ29sb3IgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdDsKLQotICAg
IC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JH
Qi4KLSAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwpAQCAtMjY4LDYgKzI2NSwxMyBAQCBp
bmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6OmludEhh
c2gobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAoreworICAgIGlmIChp
c0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5PFQ+
KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxUPigpOworfQorCiBpbmxpbmUgQ29s
b3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBj
b25zdAogewogICAgIHJldHVybiBhbHBoYSA/IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEu
dmFsdWUoKSkgOiAqdGhpczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJh
Y2tkCiAgICAgaWYgKCFzb3VyY2UuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuIGJhY2tkcm9wOwog
Ci0gICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9
IGJhY2tkcm9wLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byBbc291cmNlUiwg
c291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKKyAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJv
cEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbc291cmNl
Uiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3Rp
bmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCiAg
ICAgU2ltcGxlQ29sb3IgcmVzdWx0OwogICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsg
YWxwaGEgPD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CkBAIC05NywxOCAr
OTcsMTcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGlm
IChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICAvLyBTaW5jZSBwcmVtdWx0aXBseUNlaWxpbmcoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBz
cGVjaWFsLWNhc2UgdGhhdC4KLSAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gZnJvbS5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkg
OiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSB0by5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDog
Q29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgYXV0byBwcmVtdWx0QmxlbmRlZCA9IG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkQ29t
cG9uZW50KCksIHByZW11bHRpcGxpZWRUby5yZWRDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBw
cmVtdWx0aXBsaWVkVG8uZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJD
b3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ibHVlQ29tcG9uZW50KCksIHByZW11bHRpcGxp
ZWRUby5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQo
cHJlbXVsdGlwbGllZEZyb20uYWxwaGFDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmFscGhh
Q29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJv
bSA9IHByZW11bHRpcGxpZWRDZWlsaW5nKGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOwor
ICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCkpOwogCi0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkocHJlbXVsdEJs
ZW5kZWQpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBTUkdCQSB7CisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJl
ZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5n
cmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVlLCBwcm9n
cmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBw
cmVtdWx0aXBsaWVkVG8uYWxwaGEsIHByb2dyZXNzKQorICAgIH07CisKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBsaWVkQmxlbmRlZCkpOwogfQog
CiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xMTgsMTUgKzExNywxNSBAQCBDb2xvciBi
bGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNS
R0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byB0b1NSR0IgPSBm
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbkNv
bXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29tcG9u
ZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGFD
b21wb25lbnQoKSwgdG9TUkdCLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7CisgICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpi
bGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNz
KQorICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNyw0ICsyMzcsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKworLy8gUGl4ZWwgRm9y
bWF0cworCitzdHJ1Y3QgQVJHQiB7CisgICAgdW5zaWduZWQgdmFsdWU7Cit9OworCitjb25zdGV4
cHIgQVJHQiBhc0FSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwg
Y29sb3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH07Cit9CisKK2NvbnN0ZXhwciBTUkdCQTx1
aW50OF90PiBhc1NSR0JBKEFSR0IgY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oY29sb3IudmFsdWUgPj4gMTYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52
YWx1ZSA+PiA4KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUpLCBzdGF0aWNfY2Fz
dDx1aW50OF90Pihjb2xvci52YWx1ZSA+PiAyNCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw0
ICs2Niw0MyBAQCBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmCiAgICAg
cmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCitTUkdCQTxmbG9hdD4gdW5w
cmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvcjsKKyAgICByZXR1cm4geyByIC8gYSwgZyAvIGEsIGIgLyBhLCBhIH07
Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSkK
KyAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OworICAgIGlmIChhID09IDI1NSkKKyAgICAg
ICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3RE
aXZpZGVCeTI1NShyICogYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSksIGEg
fTsKK30KKworU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4gY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBpZiAoIWEp
CisgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICBpZiAoYSA9PSAyNTUpCisgICAg
ICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0
RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlk
ZUJ5MjU1KGcgKiBhICsgMjU0KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1
NShiICogYSArIDI1NCkpLCBhIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVt
dWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90IGMsIHVpbnQ4X3QgYSkKK3sKKyAgICByZXR1
cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworU1JHQkE8dWludDhf
dD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAgICAgICByZXR1
cm4gY29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4odW5wcmVtdWx0aXBs
aWVkQ29tcG9uZW50Qnl0ZShyLCBhKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVucHJlbXVsdGlw
bGllZENvbXBvbmVudEJ5dGUoZywgYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih1bnByZW11bHRp
cGxpZWRDb21wb25lbnRCeXRlKGIsIGEpKSwgYSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEx
IEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNSR0JB
PGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+
IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHBy
ZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHVucHJl
bXVsdGlwbGllZChTUkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVz
Y2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDE4IEBAIGNvbnN0
ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4gYnl0ZSAvIDI1
NS4wZjsKIH0KIAordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25z
dCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4g
dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+JiBjb2xvcikKK3sKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRz
WzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1szXSkgfTsKK30KKwogY29u
c3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAg
IHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5k
ZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0g
YzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwog
fQogCi1TUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK1NS
R0JBPGZsb2F0PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBj
b25zdAogewogICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4
IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAg
LTQ5LDExICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0
aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKLSAgICBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5
KCkgY29uc3Q7Ci0KICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29sIGlzQmxhY2so
KSBjb25zdDsKIAorICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2Ug
Y29sb3JzIGludG8gc1JHQi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JH
QkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQorICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkFGbG9h
dENvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgICAgIDogbV9jb21wb25lbnRzKGMxLCBj
MiwgYzMsIGFscGhhKQpAQCAtNjEsNiArNzAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xv
c3N5KCkgY29uc3Q7CisKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsK
ICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9u
IDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwyOSArMTUyLDI5IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNpbXBsZUNvbG9y
IHBpeGVsIHsgKmRlc3QgfTsKKyAgICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoQVJHQiB7ICpk
ZXN0IH0pOwogCi0gICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuaXNWaXNpYmxlKCkpIHsK
KyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5hbHBoYSkgewogICAgICAgICAgICAgc2V0
UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0g
cHJlbXVsdGlwbHlGbG9vcmluZyhwaXhlbCk7CisgICAgICAgICAgICBwaXhlbCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhwaXhlbCk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9IDI1NSAtIGE7CiAK
LSAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICogYSArIHBpeGVsLnJlZENvbXBvbmVudCgp
ICogZCk7Ci0gICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyBwaXhlbC5ncmVlbkNv
bXBvbmVudCgpICogZCk7Ci0gICAgICAgIGIgPSBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhl
bC5ibHVlQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgYSArPSBmYXN0RGl2aWRlQnkyNTUoZCAq
IHBpeGVsLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIg
KiBhICsgcGl4ZWwucmVkICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEg
KyBwaXhlbC5ncmVlbiAqIGQpOworICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsg
cGl4ZWwuYmx1ZSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwu
YWxwaGEpOwogCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIs
IGEpOworICAgICAgICBhdXRvIHJlc3VsdCA9IFNSR0JBPHVpbnQ4X3Q+IHsgciwgZywgYiwgYSB9
OwogCiAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcmVzdWx0
ID0gdW5wcmVtdWx0aXBseShyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0ID0gdW5wcmVtdWx0
aXBsaWVkKHJlc3VsdCk7CiAKLSAgICAgICAgKmRlc3QgPSByZXN1bHQudmFsdWVBc0FSR0IoKTsK
KyAgICAgICAgKmRlc3QgPSBhc0FSR0IocmVzdWx0KS52YWx1ZTsKICAgICB9CiAKICAgICBzdGF0
aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0yMjYsMTIgKzIyNiwx
MiBAQCBwcml2YXRlOgogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmICFhKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgYXV0byByZXN1bHQgPSBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgYSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gU1JHQkE8dWludDhfdD4geyBz
dGF0aWNfY2FzdDx1aW50OF90PihyKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZyksIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KGIpLCBzdGF0aWNfY2FzdDx1aW50OF90PihhKSB9OwogCiAgICAgICAgIGlm
IChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHBy
ZW11bHRpcGx5Rmxvb3JpbmcocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiByZXN1bHQudmFsdWVBc0FS
R0IoKTsKKyAgICAgICAgcmV0dXJuIGFzQVJHQihyZXN1bHQpLnZhbHVlOwogICAgIH0KIAogICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiBtX3BpeGVsczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaW1wbGVD
b2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQotewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0gMjU1KQotICAgICAgICBy
ZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUo
ciAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBh
KTsKLX0KLQotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlDZWlsaW5nKFNpbXBsZUNvbG9yIGNvbG9y
KQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0g
MjU1KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihm
YXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQp
LCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKLX0KLQotc3RhdGljIGlubGluZSB1
aW50MTZfdCB1bnByZW11bHRpcGx5Q2hhbm5lbCh1aW50OF90IGMsIHVpbnQ4X3QgYSkKLXsKLSAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKLX0KLQotU2ltcGxl
Q29sb3IgdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciBjb2xvcikKLXsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yOwotICAgIGlmICghYSB8fCBhID09IDI1NSkKLSAgICAgICAgcmV0dXJu
IGNvbG9yOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBseUNoYW5uZWwo
ciwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5lbChi
LCBhKSwgYSk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIHVp
bnQzMl90IHZhbHVlQXNBUkdCKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0
ZXhwciB1aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIGNv
bnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4g
MTY7IH0KLSAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBvbmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUgPj4gODsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFD
b21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDI0OyB9Ci0KICAgICBjb25zdGV4
cHIgZmxvYXQgYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gY29udmVydFRv
Q29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSk7IH0KIAogICAgIGNvbnN0ZXhwciBib29s
IGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CkBA
IC02Miw3ICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KDB4RkYgLSByZWRDb21wb25lbnQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYg
LSBncmVlbkNvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGJsdWVDb21w
b25lbnQoKSksIGFscGhhIH07CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgIHJldHVybiB7
IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9u
ZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVD
b21wb25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4p
CisgICAgICAgICAgICByZXR1cm4geyByZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwg
Ymx1ZUNvbXBvbmVudCgpLCBhbHBoYUNvbXBvbmVudCgpIH07CisgICAgfQogCiAgICAgdGVtcGxh
dGU8c3RkOjpzaXplX3QgTj4KICAgICBjb25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25zdApAQCAt
NzksNiArODEsMTAgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBjb25zdGV4cHIg
dWludDhfdCByZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9Cisg
ICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlID4+IDg7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorCiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CiAK
QEAgLTkwLDEzICs5Niw5IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3Io
aW4KIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWlu
dDhfdD4mKTsKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4m
KTsKIAotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlGbG9vcmluZyhTaW1wbGVDb2xvcik7Ci1TaW1w
bGVDb2xvciBwcmVtdWx0aXBseUNlaWxpbmcoU2ltcGxlQ29sb3IpOwotU2ltcGxlQ29sb3IgdW5w
cmVtdWx0aXBseShTaW1wbGVDb2xvcik7Ci0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxl
Q29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFs
dWUoKTsKKyAgICByZXR1cm4gYS52YWx1ZUFzQVJHQigpID09IGIudmFsdWVBc0FSR0IoKTsKIH0K
IAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQpA
QCAtMTE2LDI1ICsxMTgsMTQgQEAgY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xv
cihpbgogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JB
PHVpbnQ4X3Q+JiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAg
IHJldHVybiB7IHIsIGcsIGIsIGEgfTsKKyAgICByZXR1cm4geyBzUkdCQS5yZWQsIHNSR0JBLmdy
ZWVuLCBzUkdCQS5ibHVlLCBzUkdCQS5hbHBoYSB9OwogfQogCiBpbmxpbmUgU2ltcGxlQ29sb3Ig
bWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgc1JHQkEpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBzUkdCQTsKLSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGIp
LCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gU2ltcGxlQ29sb3I6OmFzU1JHQkEoKSBjb25zdAotewot
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19mbG9hdGluZ19wb2ludF92PFQ+KQotICAgICAgICBy
ZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChyZWRDb21wb25lbnQoKSksIGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dChibHVlQ29tcG9uZW50KCkpLCAgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25l
bnQoKSkgfTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpLCBncmVl
bkNvbXBvbmVudCgpLCBibHVlQ29tcG9uZW50KCksIGFscGhhQ29tcG9uZW50KCkgfTsKLX0KLQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBzdGQgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjYzOTE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYQogewogICAgIGlmICghaXNCYXNpY0FuaW1h
dGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRp
b24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwg
QChhKV1dOwogfQogCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFRvVmFsdQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VG9WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAt
NDk2LDcgKzQ5Niw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChh
dXRvJiBjb2xvcikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudGVt
cGxhdGUgdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIHJldHVybiBAW0AociksIEAo
ZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldp
bjo6c2V0RnJvbVZhbHUKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gdmFsdWUudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVu
dCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9u
ZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBDR0Zsb2F0IGFbNF0gPSB7
IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBv
bmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0Yo
Q0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldEZyb21WYWx1ZSht
X2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00MTksOCArNDE5LDggQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKAogICAgIGlmIChhbmltYXRpb25UeXBl
KCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2
YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIENHRmxvYXQgYVs0XSA9IHsgc2lt
cGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNp
bXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9
OworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwor
ICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNv
bXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVj
dG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5p
bWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00ODks
OCArNDg5LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoYwogICAg
ICAgICAKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihD
RkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFj
a3MpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOwotICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgp
LCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50
KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICAgICAgYXV0byBjb21wb25l
bnRzID0gdmFsdWVbaV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIENHRmxvYXQg
YVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1
ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4g
diA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgICAgIENGQXJyYXlBcHBl
bmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3
IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBzZXRT
b3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHN0YXRpYyB2b2lkIGFk
ZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVudCwgR3JhZGllbnQ6OkNvbG9y
U3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9w
LmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xv
cl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxw
aGEpOwogfQogCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogCiBz
dGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwg
aW50IGlkLCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAg
IGNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCBy
LCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwogfQogCkBAIC0xMzUsOCArMTM1LDggQEAgc3RhdGlj
IHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0dGVybgogCiBzdGF0aWMgR3JhZGllbnQ6OkNv
bG9yU3RvcCBpbnRlcnBvbGF0ZUNvbG9yU3RvcChHcmFkaWVudDo6Q29sb3JTdG9wIGZyb20sIEdy
YWRpZW50OjpDb2xvclN0b3AgdG8pCiB7Ci0gICAgYXV0byBbcjEsIGcxLCBiMSwgYTFdID0gZnJv
bS5jb2xvci50b1NSR0JBTG9zc3koKTsKLSAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0by5j
b2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyMSwgZzEsIGIxLCBhMV0gPSBmcm9tLmNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0
by5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAKICAgICBmbG9hdCBvZmZzZXQgPSBmcm9t
Lm9mZnNldCArICh0by5vZmZzZXQgLSBmcm9tLm9mZnNldCkgKiAwLjVmOwogICAgIGZsb2F0IHIg
PSByMSArIChyMiAtIHIxKSAqIDAuNWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDkgQEAgdm9p
ZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZAogICAgICAgICB1bnNpZ25lZCog
cm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4
KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAg
ICBhdXRvIHBpeGVsQ29sb3IgPSB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0p
OwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihsb29rVXBUYWJsZVtw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNv
bXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhl
bENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwotICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlw
bHlDZWlsaW5nKHBpeGVsQ29sb3IpLnZhbHVlQXNBUkdCKCk7CisgICAgICAgICAgICBhdXRvIHBp
eGVsQ29tcG9uZW50cyA9IHVucHJlbXVsdGlwbGllZChhc1NSR0JBKEFSR0IgeyAqcGl4ZWwgfSkp
OworICAgICAgICAgICAgcGl4ZWxDb21wb25lbnRzID0geyBsb29rVXBUYWJsZVtwaXhlbENvbXBv
bmVudHMucmVkXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLmdyZWVuXSwgbG9va1VwVGFi
bGVbcGl4ZWxDb21wb25lbnRzLmJsdWVdLCBwaXhlbENvbXBvbmVudHMuYWxwaGEgfTsKKyAgICAg
ICAgICAgICpwaXhlbCA9IGFzQVJHQihwcmVtdWx0aXBsaWVkQ2VpbGluZyhwaXhlbENvbXBvbmVu
dHMpKS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICBjYWlyb19zdXJmYWNlX21hcmtfZGly
dHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgp
LCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCShy
ZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9OYXRpdmVJbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBD
b2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihjCiAgICAgICAgIHJldHVybiBD
b2xvcigpOwogCiAgICAgdW5zaWduZWQqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5z
aWduZWQqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAg
cmV0dXJuIHVucHJlbXVsdGlwbHkoU2ltcGxlQ29sb3IgeyAqcGl4ZWwgfSk7CisgICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcih1bnByZW11bHRpcGxpZWQoYXNTUkdCQShBUkdCIHsgKnBpeGVsIH0p
KSk7CiB9CiAKIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFn
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVM
aWdodGluZ05FT04uaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMSwxMSArMTExLDExIEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlOZW8KICAgICAvLyBTZXQgbGlnaHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFy
Z3VtZW50cy5jb25zdE9uZSA9IDE7CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gbV9saWdodGlu
Z0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBjb2xvciA9IG1fbGln
aHRpbmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgIGZsb2F0QXJndW1lbnRz
LmNvbG9yUmVkID0gc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRBcmd1bWVu
dHMuY29sb3JHcmVlbiA9IHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRB
cmd1bWVudHMuY29sb3JCbHVlID0gc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpOworICAgIGZs
b2F0QXJndW1lbnRzLmNvbG9yUmVkID0gY29sb3IucmVkOworICAgIGZsb2F0QXJndW1lbnRzLmNv
bG9yR3JlZW4gPSBjb2xvci5ncmVlbjsKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBj
b2xvci5ibHVlOwogICAgIGZsb2F0QXJndW1lbnRzLnBhZGRpbmc0ID0gMDsKIAogICAgIGlmICht
X2xpZ2h0U291cmNlLT50eXBlKCkgPT0gTFNfUE9JTlQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDEwICs0MDUsMTAgQEAg
Ym9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcAogICAgIGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwogICAgIAogICAgIGlmIChvcGVyYXRpbmdDb2xv
clNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9MaW5lYXJTUkdCQShtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCkpOwor
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9y
LnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGln
aHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFM
b3NzeSgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdE
YXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0KICAgICBtX2xp
Z2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFu
c2Zvcm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwor
ICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKIAogICAg
IGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3Bl
cmF0aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBi
b29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlz
U2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9y
ID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJh
dGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihz
UkdCQUNvbG9yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQCBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCiAKIENvbG9yOjpv
cGVyYXRvciBHZGtSR0JBKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0Pigp
OwogICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyAr
MjUzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJl
ZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICBn
bFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGds
TGluZVdpZHRoKHdpZHRoKTsKIApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3TnVtYmVyKGludCBudW0KICAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShz
dXJmYWNlKTsKIAogICAgIC8vIFNpbmNlIHdlIHdvbid0IHN3YXAgUitCIHdoZW4gdXBsb2FkaW5n
IGEgdGV4dHVyZSwgcGFpbnQgd2l0aCB0aGUgc3dhcHBlZCBSK0IgY29sb3IuCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19zZXRfc291cmNlX3Jn
YmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0KTsKQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVy
UHJvZ3JhbShUZXh0dXJlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAg
ICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhl
IGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5KCkpOwor
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xv
cigpLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9n
cmFtLmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0y
Zihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkg
LyBmbG9hdChzaXplLmhlaWdodCgpKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFt
LnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KICAgICBSZWY8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25z
KTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0
PigpKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIs
IGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dlZCkKICAgICAgICAgZmxhZ3Mg
fD0gU2hvdWxkQmxlbmQ7CkBAIC02ODYsNyArNjg2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NS
R0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKICAgICBnbENsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgZ2xDbGVhcihHTF9D
T0xPUl9CVUZGRVJfQklUKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBAIENvbG9yOjpDb2xvcihEMkQxX0NP
TE9SX0YgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihy
LCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiBEMkQxOjpWZWN0
b3I0RihyLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24g
MjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgR3JhZGll
bnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW4KICAgICBWZWN0b3I8RDJEMV9HUkFESUVOVF9T
VE9QPiBncmFkaWVudFN0b3BzOwogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRXh0ZW5k
ZWRDb2xvci4KICAgICBmb3IgKGF1dG8gc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgICAgIGdyYWRp
ZW50U3RvcHMuYXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29s
b3JGKHIsIGcsIGIsIGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsy
MDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVuCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBncmFtbWFyUGF0dGVybkNvbG9yIHsgbWFrZVNpbXBs
ZUNvbG9yKDAsIDEyOCwgMCkgfTsKIAogICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29s
b3IgPSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFy
ID8gZ3JhbW1hclBhdHRlcm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOwotICAgIENHQ29u
dGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQo
KSwgcGF0dGVybkNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9u
ZW50KCksIHBhdHRlcm5Db2xvci5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICBhdXRvIHBhdHRlcm5D
b2xvckNvbXBvbmVudHMgPSBwYXR0ZXJuQ29sb3IuYXNTUkdCQTx1aW50OF90PigpOworICAgIENH
Q29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMu
cmVkLCBwYXR0ZXJuQ29sb3JDb21wb25lbnRzLmdyZWVuLCBwYXR0ZXJuQ29sb3JDb21wb25lbnRz
LmJsdWUsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMuYWxwaGEpOwogCiAgICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gdXNlclRvQmFzZSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAgICAgQ0dQb2lu
dCBwaGFzZSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwb2ludCwgdXNlclRvQmFzZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAKIEQyRDFfQ09MT1JfRiBHcmFwaGljc0Nv
bnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsK
LSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiBE
MkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCkpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNyArMTQwMiw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpk
aXNhYmxlZFRleHRDb2xvcihjb24KICAgICAvLyBJZiB0aGVyZSdzIG5vdCB2ZXJ5IG11Y2ggY29u
dHJhc3QgYmV0d2VlbiB0aGUgZGlzYWJsZWQgY29sb3IgYW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9y
LAogICAgIC8vIGp1c3QgbGVhdmUgdGhlIHRleHQgY29sb3IgYWxvbmUuIFdlIGRvbid0IHdhbnQg
dG8gY2hhbmdlIGEgZ29vZCBjb250cmFzdCBjb2xvciBzY2hlbWUgc28gdGhhdCBpdCBoYXMgcmVh
bGx5IGJhZCBjb250cmFzdC4KICAgICAvLyBJZiB0aGUgY29udHJhc3Qgd2FzIGFscmVhZHkgcG9v
ciwgdGhlbiBpdCBkb2Vzbid0IGRvIGFueSBnb29kIHRvIGNoYW5nZSBpdCB0byBhIGRpZmZlcmVu
dCBwb29yIGNvbnRyYXN0IGNvbG9yIHNjaGVtZS4KLSAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNh
YmxlZENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkp
IDwgbWluQ29sb3JDb250cmFzdFZhbHVlKQorICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVk
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpKSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKICAgICAgICAgcmV0dXJuIHRleHRD
b2xvcjsKIAogICAgIHJldHVybiBkaXNhYmxlZENvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDU1LDcgKzEwNTUsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRp
CiBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb252ZXhHcmFkaWVudChjb25zdCBDb2xvciYgYmFja2dy
b3VuZENvbG9yKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2lu
ZyBsdW1pbmFuY2UuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9T
UkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBz
dGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFs
cGhhQ2hhbm5lbCA8IDAuNTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCBib29sIHRleHRDb2xvcklzTGVnaWJsZUFnYWluc3RCYWNrZ3JvdW5kCiB7CiAgICAgLy8gVXNl
cyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBvZiBsZWdpYmlsaXR5OiBhIGNvbnRyYXN0IHJhdGlv
IG9mIDQuNToxIG9yIGdyZWF0ZXIuCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcy
MC8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0Ci0gICAgcmV0dXJuIGNvbnRyYXN0UmF0
aW8odGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5
KCkpID4gNC41OworICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBTG9z
c3k8ZmxvYXQ+KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpID4gNC41
OwogfQogCiBzdGF0aWMgQ29sb3IgYWRqdXN0Q29sb3JGb3JWaXNpYmlsaXR5T25CYWNrZ3JvdW5k
KGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZh
bHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAy
NjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE1ICs4MSwxNSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGFuaW1hdGUoU1ZHRWxlbWVudCosIGZsb2F0IHByb2dyZXNz
LCB1bnNpZ25lZCByZXBlYXRDb3VudCwgQ29sb3ImIGFuaW1hdGVkKQogICAgIHsKLSAgICAgICAg
YXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25N
b2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJh
dGlvbigpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlQW5p
bWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBz
aW1wbGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxl
QW5pbWF0ZWQgOiBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
c2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNp
bXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKICAgICAgICAgCi0gICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUo
cHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVU
by5yZWRDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCks
IHNpbXBsZUFuaW1hdGVkLnJlZENvbXBvbmVudCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKLSAg
ICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVD
b21wb25lbnQoKSk7Ci0gICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxw
aGFDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwg
c2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJh
c2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZCwgc2ltcGxl
VG8ucmVkLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWQsIHNpbXBsZUFuaW1hdGVkLnJlZCk7
CisgICAgICAgIGZsb2F0IGdyZWVuID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291
bnQsIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmdyZWVuLCBzaW1wbGVUb0F0RW5kT2ZEdXJh
dGlvbi5ncmVlbiwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW4pOworICAgICAgICBmbG9hdCBibHVlID0g
QmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2lt
cGxlVG8uYmx1ZSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQu
Ymx1ZSk7CisgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVw
ZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5k
T2ZEdXJhdGlvbi5hbHBoYSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKICAgICAg
ICAgYW5pbWF0ZWQgPSBtYWtlU2ltcGxlQ29sb3Iocm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChy
ZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkpOwogICAgIH0K
QEAgLTEwMywxMiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFs
aWQoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0
byBzaW1wbGVGcm9tID0gZnJvbUNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAg
ICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Cisg
ICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CiAKLSAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSAtIHNp
bXBsZVRvLnJlZENvbXBvbmVudCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZyb20u
Z3JlZW5Db21wb25lbnQoKSAtIHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgICAgIGZs
b2F0IGJsdWUgPSBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSAtIHNpbXBsZVRvLmJsdWVDb21w
b25lbnQoKTsKKyAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWQgLSBzaW1wbGVUby5y
ZWQ7CisgICAgICAgIGZsb2F0IGdyZWVuID0gc2ltcGxlRnJvbS5ncmVlbiAtIHNpbXBsZVRvLmdy
ZWVuOworICAgICAgICBmbG9hdCBibHVlID0gc2ltcGxlRnJvbS5ibHVlIC0gc2ltcGxlVG8uYmx1
ZTsKIAogICAgICAgICByZXR1cm4gc3RkOjpoeXBvdChyZWQsIGdyZWVuLCBibHVlKTsKICAgICB9
CkBAIC0xMjYsMTQgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRGcm9tQW5kVG9W
YWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCiAgICAgewotICAgICAgICBhdXRvIHNpbXBsZUZy
b20gPSBtX2Zyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1w
bGVUbyA9IG1fdG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1w
bGVGcm9tID0gbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNp
bXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25v
cmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAg
ICAgICAgIG1fdG8gPSBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgICAgICByb3VuZEFuZENsYW1w
Q29sb3JDaGFubmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21w
b25lbnQoKSksCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRv
LmdyZWVuQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAotICAgICAg
ICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkg
KyBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSkKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQpLAorICAgICAgICAgICAg
cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3Jl
ZW4pLAorICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVl
ICsgc2ltcGxlRnJvbS5ibHVlKQogICAgICAgICApOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgorCisgICAgICAgIFBhcnQgMSBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhfdD4g
YXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzOTQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW06CisgICAgICAg
IChXZWJLaXQ6OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
OjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIEFkYXB0IHRvIHVzZSB0ZW1w
bGF0aXplZCB0b1NSR0JBTG9zc3k8ZmxvYXQvdWludDhfdD4uCisKIDIwMjAtMDctMDMgIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjYzOTE4
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCB3ZWJraXRDb2xvckZpbGxGcm9tV2Vi
Q29yZUNvbG9yKGNvbgogewogICAgIFJFTEVBU0VfQVNTRVJUKHdlYkNvcmVDb2xvci5pc1ZhbGlk
KCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpOwogICAgIGNvbG9yLT5yZWQgPSByOwogICAgIGNvbG9yLT5ncmVlbiA9IGc7CiAgICAg
Y29sb3ItPmJsdWUgPSBiOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmJlZ2luU3dpcGVHZQogICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CiAg
ICAgICAgICAgICBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdCA9IGNvbG9yOwog
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0dGVybikgewotICAgICAg
ICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFM
b3NzeSgpOworICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRT
d2lwZVNuYXBzaG90UGF0dGVybiA9IGFkb3B0UmVmKGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYmEo
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2
aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTYsNyArNjU2LDcgQEAgYm9vbCBXZWJGcmFtZTo6
Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sbwogICAgIGlmICghYmdDb2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50
b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgICpyZWQgPSByOwogICAgICpncmVlbiA9IGc7CiAgICAgKmJsdWUg
PSBiOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGUubW0JKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02OTMsNyArNjkzLDcgQEAgc3RhdGljIE5TT2JqZWN0KiBhbmltYXRp
b25WYWx1ZUZyb21LZXlmcgogICAgICAgICByZXR1cm4gQChrZXlmcmFtZVZhbHVlLm51bWJlclZh
bHVlKCkpOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
OjpLZXlmcmFtZVZhbHVlOjpDb2xvcktleVR5cGU6IHsKLSAgICAgICAgYXV0byBbciwgZywgYiwg
YV0gPSBrZXlmcmFtZVZhbHVlLmNvbG9yVmFsdWUoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
OworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgp
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICByZXR1cm4gQFsgQChyKSwgQChnKSwg
QChiKSwgQChhKSBdOwogICAgIH0KIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzOTI1KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDctMDMgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFBhcnQgMSBvZiBTaW1wbGVDb2xvciBhbmQg
U1JHQkE8dWludDhfdD4gYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2Ug
dGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEz
OTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICBBZGFwdCB0ZXN0cyB0byB1c2UgdGVtcGxhdGl6ZWQgdG9TUkdCQUxvc3N5PGZsb2F0
L3VpbnQ4X3Q+LgorCiAyMDIwLTA3LTAzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVf
SU5DT01QTEVURQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9y
VGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0g
Q29sb3I6OndoaXRlOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdC
QUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTU0LDcgKzU0
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiB7CiAgICAgQ29sb3IgY29sb3IgPSBD
b2xvcjo6YmxhY2s7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JB
TG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtNzAsNyArNzAs
NyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNv
bG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xv
ci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBA
IC04Niw3ICs4Niw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9y
IGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCk7CiAKLSAgICBhdXRvIGhzbGFDb2xv
ciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0
b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9F
USgwLjMzMzMzMzM0LCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTAyLDcgKzEwMiw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1
KTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsK
KyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkp
OwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjY2NjY2NjksIGhzbGFDb2xvci5odWUpOwogICAg
IEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMTgsNyArMTE4
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3Ig
PSBDb2xvcjo6ZGFya0dyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdC
QUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVl
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTM0
LDcgKzEzNCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3IgY29s
b3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRv
U1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUp
OwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xNTAs
NyArMTUwLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogewogICAgIENvbG9y
IGNvbG9yID0gQ29sb3I6OmxpZ2h0R3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xB
KGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7
CkBAIC0xODMsMjkgKzE4MywyOSBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKICAgICB2YWxpZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDEsIDIsIDMsIDQpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlk
Q29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4dGVuZGVk
KCkpOwotICAgIGF1dG8gc2ltcGxlVmFsaWRDb2xvciA9IHZhbGlkQ29sb3IudG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5yZWRDb21wb25l
bnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQo
KSwgMik7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAz
KTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsK
KyAgICBhdXRvIHZhbGlkQ29sb3JDb21wb25lbnRzID0gdmFsaWRDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsK
KyAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOworICAgIEVYUEVD
VF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRD
b2xvckNvbXBvbmVudHMuYWxwaGEsIDQpOwogCiAgICAgQ29sb3IgeWV0QW5vdGhlclZhbGlkQ29s
b3IoV1RGTW92ZSh2YWxpZENvbG9yKSk7CiAgICAgRVhQRUNUX1RSVUUoeWV0QW5vdGhlclZhbGlk
Q29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoeWV0QW5vdGhlclZhbGlkQ29sb3Iu
aXNFeHRlbmRlZCgpKTsKLSAgICBhdXRvIHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yID0geWV0
QW5vdGhlclZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1Rf
RVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOwotICAgIEVY
UEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsK
LSAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgp
LCAzKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYWxwaGFDb21w
b25lbnQoKSwgNCk7CisgICAgYXV0byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSB5
ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1Rf
RVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CisgICAgRVhQRUNUX0VR
KHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VR
KHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEo
eWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmFscGhhLCA0KTsKIAogICAgIG90aGVyVmFs
aWRDb2xvciA9IFdURk1vdmUoeWV0QW5vdGhlclZhbGlkQ29sb3IpOwogICAgIEVYUEVDVF9UUlVF
KG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRShvdGhlclZhbGlk
Q29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBhdXRvIHNpbXBsZU90aGVyVmFsaWRDb2xvciA9IG90
aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShz
aW1wbGVPdGhlclZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOwotICAgIEVYUEVDVF9FUShz
aW1wbGVPdGhlclZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgMik7Ci0gICAgRVhQRUNUX0VR
KHNpbXBsZU90aGVyVmFsaWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9F
UShzaW1wbGVPdGhlclZhbGlkQ29sb3IuYWxwaGFDb21wb25lbnQoKSwgNCk7CisgICAgYXV0byBv
dGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOworICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwg
MSk7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwor
ICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOworICAgIEVY
UEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmFscGhhLCA0KTsKIH0KIAogVEVTVChD
b2xvciwgTHVtaW5hbmNlKQpAQCAtMjE2LDIxICsyMTYsMjIgQEAgVEVTVChDb2xvciwgTHVtaW5h
bmNlKQogICAgIGF1dG8gYyA9IG1ha2VTaW1wbGVDb2xvcig4NSwgOTAsIDE2MCk7CiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKENvbG9yKGMpLmx1bWluYW5jZSgpLCAwLjExNzgxNjkyKTsKIAotICAgIEVY
UEVDVF9FUShjLnJlZENvbXBvbmVudCgpLCA4NSk7Ci0gICAgRVhQRUNUX0VRKGMuZ3JlZW5Db21w
b25lbnQoKSwgOTApOwotICAgIEVYUEVDVF9FUShjLmJsdWVDb21wb25lbnQoKSwgMTYwKTsKLQot
ICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0xpZ3RlbmVkKS5sdW1pbmFu
Y2UoKSwgMC4yOTE2ODgwOCk7Ci0gICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWRDb21wb25lbnQo
KSwgMTMwKTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmdyZWVuQ29tcG9uZW50KCksIDEzNyk7
Ci0gICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlQ29tcG9uZW50KCksIDI0NCk7Ci0KLSAgICBh
dXRvIGNEYXJrZW5lZCA9IENvbG9yKGMpLmRhcmtlbmVkKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0RhcmtlbmVkKS5sdW1pbmFuY2UoKSwg
MC4wMjcwMDY3MjcpOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkQ29tcG9uZW50KCksIDQw
KTsKLSAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdyZWVuQ29tcG9uZW50KCksIDQzKTsKLSAgICBF
WFBFQ1RfRVEoY0RhcmtlbmVkLmJsdWVDb21wb25lbnQoKSwgNzYpOworICAgIGF1dG8gY0NvbXBv
bmVudHMgPSBjLmFzU1JHQkE8dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMu
cmVkLCA4NSk7CisgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLmdyZWVuLCA5MCk7CisgICAgRVhQ
RUNUX0VRKGNDb21wb25lbnRzLmJsdWUsIDE2MCk7CisKKyAgICBhdXRvIGNMaWd0ZW5lZCA9IENv
bG9yKGMpLmxpZ2h0ZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9G
TE9BVF9FUShDb2xvcihtYWtlU2ltcGxlQ29sb3IoY0xpZ3RlbmVkKSkubHVtaW5hbmNlKCksIDAu
MjkxNjg4MDgpOworICAgIEVYUEVDVF9FUShjTGlndGVuZWQucmVkLCAxMzApOworICAgIEVYUEVD
VF9FUShjTGlndGVuZWQuZ3JlZW4sIDEzNyk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVl
LCAyNDQpOworCisgICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjKS5kYXJrZW5lZCgpLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihtYWtlU2ltcGxl
Q29sb3IoY0RhcmtlbmVkKSkubHVtaW5hbmNlKCksIDAuMDI3MDA2NzI3KTsKKyAgICBFWFBFQ1Rf
RVEoY0RhcmtlbmVkLnJlZCwgNDApOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQuZ3JlZW4sIDQz
KTsKKyAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmJsdWUsIDc2KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9y
LCBQM0NvbnZlcnNpb25Ub1NSR0IpCiAgICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAg
RVhQRUNUX1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCi0gICAgYXV0byBzUkdCQUNvbG9y
ID0gcDNDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9y
LnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC40NjI1Mzc4ODVmKSk7CiAgICAg
RVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC4x
NDkxNDc4MzhmKSk7CkBAIC0yNTIsNyArMjUyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBMaW5l
YXJTUkdCQ29udmVyc2lvbgogewogICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVk
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKICAg
ICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc1JHQkFD
b2xvciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9
IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6
OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1Rf
VFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5
MjdmKSk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29s
b3IuYmx1ZSwgMC41MzcwOTg3MDZmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403503</attachid>
            <date>2020-07-03 20:22:41 -0700</date>
            <delta_ts>2020-07-03 20:26:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213948-20200703202240.patch</filename>
            <type>text/plain</type>
            <size>70959</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsaWdodG5lc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omx1bWluYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VP
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJD
b3JlOjphc0FSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNTUkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRGbG9vcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2VpbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjp1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29t
cG9uZW50Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBpeGVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNv
bG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xv
cjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVkQ29t
cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpncmVlbkNvbXBv
bmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Ymx1ZUNvbXBvbmVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHA6CisgICAgICAgIChQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFVzZUNvbnZleEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmRDb2xvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29sb3JG
dW5jdGlvbjo6YW5pbWF0ZSk6CisKIDIwMjAtMDctMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYkNvcmUvU291cmNlcy50eHQ6IFJlbW92ZSAjaWYgRU5BQkxF
X1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcwLDcgKzE5NzAsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTk4NCw3ICs5OTg0LDYgQEAKIAkJN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2
IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQWJvcnRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBE
OTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MzMEQ5ODIxRjgxNUFDMjAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBTaW1w
bGVDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVD
b2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzFDODhDMjQ3QUQ1OTUw
MDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMzFERjlFOTVCMDBEMzM5NUMgLyog
UG9zaXRpb25PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3NpdGlvbk9wdGlvbnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjU2OTcsNyArMjU2OTYsNiBAQAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBT
aW1wbGVDb2xvci5jcHAgKi8sCiAJCQkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBs
ZUNvbG9yLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgzLDEwICsxOTgzLDEwIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFzQ29sb3IoKS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0g
Y29sb3IuZ3JlZW5Db21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOwor
ICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1
ZUFzQ29sb3IoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOwor
ICAgIGcgPSBjb2xvci5ncmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE0ICs5MiwxNCBAQCBzdGF0aWMg
QXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0NvbG9yID0g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIGJ1ZmZl
ci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICBy
ZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAK
ICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7
CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDEwICs3MDEsMTAgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRv
IGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSku
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7
Ci0gICAgZyA9IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWVDb21w
b25lbnQoKTsKKyAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgciA9IGNvbG9y
LnJlZDsKKyAgICBnID0gY29sb3IuZ3JlZW47CisgICAgYiA9IGNvbG9yLmJsdWU7CiB9CiAKIEFY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJl
Y2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKG1fY29sb3IpOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZT4gY3JlYXRlV3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVy
VHlwZSBudW1iZXIpCkBAIC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBE
ZXByZWNhdGVkQ1NTT01SR0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSkKLSAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLnJl
ZENvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2FscGhhKGNyZWF0
ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkpKQorICAgICAg
ICA6IG1fY29sb3IoY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpCisgICAgICAgICwgbV9y
ZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5yZWQpKQorICAgICAgICAsIG1fZ3JlZW4o
Y3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbikpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZSkpCisgICAgICAgICwgbV9hbHBoYShjcmVh
dGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkp
CiAgICAgewogICAgIH0KIAotICAgIFNpbXBsZUNvbG9yIG1fY29sb3I7CisgICAgU1JHQkE8dWlu
dDhfdD4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1f
cmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAg
ICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjIxLDcgKzYyMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246
OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3R5bGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xh
ID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhl
IHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5
IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVh
ciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2Fu
IGJlIHNwZWNpZmllZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitp
bmxpbmUgdWludDhfdCBibGVuZCh1aW50OF90IGZyb20sIHVpbnQ4X3QgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kKHN0YXRpY19j
YXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9n
cmVzcykpOworfQorCiBpbmxpbmUgaW50IGJsZW5kKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNf
Y2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogcHJv
Z3Jlc3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHRlbmVkKCkgY29uc3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAg
ICBpZiAodiA9PSAwLjBmKQpAQCAtMTAzLDcgKzEwMyw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5l
ZCgpIGNvbnN0CiAgICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSB3aGl0ZSkKICAg
ICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTQs
MTQgKzExNCwxNCBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogZmxvYXQgQ29sb3I6
OmxpZ2h0bmVzcygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGF2
b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3BhY2UgYWxnb3JpdGht
cyBmb3IgSFNMLgotICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5KCkp
OworICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5PGZsb2F0PigpKTsK
IH0KIAogZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgY2FuIHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNv
bG9yc3BhY2UgYWxnb3JpdGhtcwogICAgIC8vIGZvciBsdW1pbmFuY2UgKGUuZy4gY29udmVydFRv
WFlaKGMpLnlDb21wb25lbnQoKSkuCi0gICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NS
R0JBTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkpOwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0CkBAIC0xNDksNyArMTQ5LDcgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBj
b25zdAogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAg
IHJldHVybiB7IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07CisgICAgcmV0
dXJuIHsgbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkFMb3NzeTx1aW50OF90PigpKSwgU2VtYW50aWMg
fTsKIH0KIAogc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IENv
bG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CkBAIC0xNTksMjAgKzE1OSw2IEBA
IHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmwKICAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhhc1NpbXBsZSgpLmFzU1JHQkE8Zmxv
YXQ+KCkpIH07CiB9CiAKLVNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCkpOwotICAgIHJldHVybiBhc1Np
bXBsZSgpOwotfQotCi1TUkdCQTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NS
R0JBTG9zc3koKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpOwotfQot
CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgcmV0dXJuIHRzIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEwICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29u
dmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9F
WFBPUlQgU2ltcGxlQ29sb3IgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdDsKLQotICAg
IC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JH
Qi4KLSAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwpAQCAtMjY4LDYgKzI2NSwxMyBAQCBp
bmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6OmludEhh
c2gobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAoreworICAgIGlmIChp
c0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5PFQ+
KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxUPigpOworfQorCiBpbmxpbmUgQ29s
b3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBj
b25zdAogewogICAgIHJldHVybiBhbHBoYSA/IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEu
dmFsdWUoKSkgOiAqdGhpczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJh
Y2tkCiAgICAgaWYgKCFzb3VyY2UuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuIGJhY2tkcm9wOwog
Ci0gICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9
IGJhY2tkcm9wLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byBbc291cmNlUiwg
c291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKKyAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJv
cEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbc291cmNl
Uiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3Rp
bmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCiAg
ICAgU2ltcGxlQ29sb3IgcmVzdWx0OwogICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsg
YWxwaGEgPD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CkBAIC05NywxOCAr
OTcsMTcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGlm
IChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICAvLyBTaW5jZSBwcmVtdWx0aXBseUNlaWxpbmcoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBz
cGVjaWFsLWNhc2UgdGhhdC4KLSAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gZnJvbS5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkg
OiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSB0by5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDog
Q29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgYXV0byBwcmVtdWx0QmxlbmRlZCA9IG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkQ29t
cG9uZW50KCksIHByZW11bHRpcGxpZWRUby5yZWRDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBw
cmVtdWx0aXBsaWVkVG8uZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJD
b3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ibHVlQ29tcG9uZW50KCksIHByZW11bHRpcGxp
ZWRUby5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQo
cHJlbXVsdGlwbGllZEZyb20uYWxwaGFDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmFscGhh
Q29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJv
bSA9IHByZW11bHRpcGxpZWRDZWlsaW5nKGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOwor
ICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCkpOwogCi0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkocHJlbXVsdEJs
ZW5kZWQpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBTUkdCQSB7CisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJl
ZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5n
cmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVlLCBwcm9n
cmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBw
cmVtdWx0aXBsaWVkVG8uYWxwaGEsIHByb2dyZXNzKQorICAgIH07CisKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBsaWVkQmxlbmRlZCkpOwogfQog
CiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xMTgsMTUgKzExNywxNSBAQCBDb2xvciBi
bGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNS
R0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byB0b1NSR0IgPSBm
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbkNv
bXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29tcG9u
ZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGFD
b21wb25lbnQoKSwgdG9TUkdCLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7CisgICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpi
bGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNz
KQorICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNyw0ICsyMzcsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKworLy8gUGl4ZWwgRm9y
bWF0cworCitzdHJ1Y3QgQVJHQiB7CisgICAgdW5zaWduZWQgdmFsdWU7Cit9OworCitjb25zdGV4
cHIgQVJHQiBhc0FSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwg
Y29sb3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH07Cit9CisKK2NvbnN0ZXhwciBTUkdCQTx1
aW50OF90PiBhc1NSR0JBKEFSR0IgY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oY29sb3IudmFsdWUgPj4gMTYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52
YWx1ZSA+PiA4KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUpLCBzdGF0aWNfY2Fz
dDx1aW50OF90Pihjb2xvci52YWx1ZSA+PiAyNCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw0
ICs2Niw0MyBAQCBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmCiAgICAg
cmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCitTUkdCQTxmbG9hdD4gdW5w
cmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvcjsKKyAgICByZXR1cm4geyByIC8gYSwgZyAvIGEsIGIgLyBhLCBhIH07
Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSkK
KyAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OworICAgIGlmIChhID09IDI1NSkKKyAgICAg
ICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3RE
aXZpZGVCeTI1NShyICogYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSksIGEg
fTsKK30KKworU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4gY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBpZiAoIWEp
CisgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICBpZiAoYSA9PSAyNTUpCisgICAg
ICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0
RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlk
ZUJ5MjU1KGcgKiBhICsgMjU0KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1
NShiICogYSArIDI1NCkpLCBhIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVt
dWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90IGMsIHVpbnQ4X3QgYSkKK3sKKyAgICByZXR1
cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworU1JHQkE8dWludDhf
dD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAgICAgICByZXR1
cm4gY29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4odW5wcmVtdWx0aXBs
aWVkQ29tcG9uZW50Qnl0ZShyLCBhKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVucHJlbXVsdGlw
bGllZENvbXBvbmVudEJ5dGUoZywgYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih1bnByZW11bHRp
cGxpZWRDb21wb25lbnRCeXRlKGIsIGEpKSwgYSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEx
IEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNSR0JB
PGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+
IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHBy
ZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHVucHJl
bXVsdGlwbGllZChTUkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVz
Y2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDE4IEBAIGNvbnN0
ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4gYnl0ZSAvIDI1
NS4wZjsKIH0KIAordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25z
dCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4g
dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+JiBjb2xvcikKK3sKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRz
WzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1szXSkgfTsKK30KKwogY29u
c3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAg
IHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5k
ZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0g
YzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwog
fQogCi1TUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK1NS
R0JBPGZsb2F0PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBj
b25zdAogewogICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4
IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAg
LTQ5LDExICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0
aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKLSAgICBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5
KCkgY29uc3Q7Ci0KICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29sIGlzQmxhY2so
KSBjb25zdDsKIAorICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2Ug
Y29sb3JzIGludG8gc1JHQi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JH
QkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQorICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkFGbG9h
dENvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgICAgIDogbV9jb21wb25lbnRzKGMxLCBj
MiwgYzMsIGFscGhhKQpAQCAtNjEsNiArNzAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xv
c3N5KCkgY29uc3Q7CisKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsK
ICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9u
IDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwyOSArMTUyLDI5IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNpbXBsZUNvbG9y
IHBpeGVsIHsgKmRlc3QgfTsKKyAgICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoQVJHQiB7ICpk
ZXN0IH0pOwogCi0gICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuaXNWaXNpYmxlKCkpIHsK
KyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5hbHBoYSkgewogICAgICAgICAgICAgc2V0
UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0g
cHJlbXVsdGlwbHlGbG9vcmluZyhwaXhlbCk7CisgICAgICAgICAgICBwaXhlbCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhwaXhlbCk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9IDI1NSAtIGE7CiAK
LSAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICogYSArIHBpeGVsLnJlZENvbXBvbmVudCgp
ICogZCk7Ci0gICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyBwaXhlbC5ncmVlbkNv
bXBvbmVudCgpICogZCk7Ci0gICAgICAgIGIgPSBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhl
bC5ibHVlQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgYSArPSBmYXN0RGl2aWRlQnkyNTUoZCAq
IHBpeGVsLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIg
KiBhICsgcGl4ZWwucmVkICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEg
KyBwaXhlbC5ncmVlbiAqIGQpOworICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsg
cGl4ZWwuYmx1ZSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwu
YWxwaGEpOwogCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIs
IGEpOworICAgICAgICBhdXRvIHJlc3VsdCA9IFNSR0JBIHsgc3RhdGljX2Nhc3Q8PHVpbnQ4X3Q+
KHIpLCBzdGF0aWNfY2FzdDw8dWludDhfdD4oZyksIHN0YXRpY19jYXN0PDx1aW50OF90PihiKSwg
c3RhdGljX2Nhc3Q8PHVpbnQ4X3Q+KGEpIH07CiAKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEpCi0gICAgICAgICAgICByZXN1bHQgPSB1bnByZW11bHRpcGx5KHJlc3VsdCk7CisgICAg
ICAgICAgICByZXN1bHQgPSB1bnByZW11bHRpcGxpZWQocmVzdWx0KTsKIAotICAgICAgICAqZGVz
dCA9IHJlc3VsdC52YWx1ZUFzQVJHQigpOworICAgICAgICAqZGVzdCA9IGFzQVJHQihyZXN1bHQp
LnZhbHVlOwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKQEAgLTIyNiwxMiArMjI2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChtX3By
ZW11bHRpcGx5QWxwaGEgJiYgIWEpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBh
dXRvIHJlc3VsdCA9IG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBTUkdCQTx1aW50OF90PiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHIpLCBzdGF0aWNf
Y2FzdDx1aW50OF90PihnKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYiksIHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGEpIH07CiAKICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1
KQotICAgICAgICAgICAgcmVzdWx0ID0gcHJlbXVsdGlwbHlGbG9vcmluZyhyZXN1bHQpOworICAg
ICAgICAgICAgcmVzdWx0ID0gcHJlbXVsdGlwbGllZEZsb29yaW5nKHJlc3VsdCk7CiAKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC52YWx1ZUFzQVJHQigpOworICAgICAgICByZXR1cm4gYXNBUkdCKHJl
c3VsdCkudmFsdWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21l
bnQ+IG1fcGl4ZWxzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVDb2xvci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVNpbXBsZUNvbG9yIHByZW11bHRpcGx5Rmxvb3JpbmcoU2ltcGxl
Q29sb3IgY29sb3IpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKLSAgICBpZiAo
IWEgfHwgYSA9PSAyNTUpCi0gICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKGZhc3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVCeTI1NShnICogYSks
IGZhc3REaXZpZGVCeTI1NShiICogYSksIGEpOwotfQotCi1TaW1wbGVDb2xvciBwcmVtdWx0aXBs
eUNlaWxpbmcoU2ltcGxlQ29sb3IgY29sb3IpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBj
b2xvcjsKLSAgICBpZiAoIWEgfHwgYSA9PSAyNTUpCi0gICAgICAgIHJldHVybiBjb2xvcjsKLSAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGZhc3REaXZpZGVCeTI1NShyICogYSArIDI1NCksIGZh
c3REaXZpZGVCeTI1NShnICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShiICogYSArIDI1NCks
IGEpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQxNl90IHVucHJlbXVsdGlwbHlDaGFubmVsKHVp
bnQ4X3QgYywgdWludDhfdCBhKQotewotICAgIHJldHVybiAoZmFzdE11bHRpcGx5QnkyNTUoYykg
KyBhIC0gMSkgLyBhOwotfQotCi1TaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9y
IGNvbG9yKQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8
IGEgPT0gMjU1KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcih1bnByZW11bHRpcGx5Q2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBseUNoYW5uZWwoZywg
YSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGIsIGEpLCBhKTsKLX0KLQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDExICs0Miw3IEBA
IHB1YmxpYzoKICAgICBjb25zdGV4cHIgdWludDMyX3QgdmFsdWVBc0FSR0IoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQogCi0gICAgY29uc3RleHByIHVpbnQ4X3QgcmVkQ29tcG9uZW50KCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAxNjsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGdy
ZWVuQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiA4OyB9Ci0gICAgY29uc3Rl
eHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAg
ICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWUgPj4gMjQ7IH0KLQogICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQo
KSBjb25zdCB7IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgp
KTsgfQogCiAgICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBhbHBo
YUNvbXBvbmVudCgpID09IDB4RkY7IH0KQEAgLTYyLDcgKzU4LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIHJlZENvbXBvbmVudCgpKSwg
c3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGdyZWVuQ29tcG9uZW50KCkpLCBzdGF0aWNfY2Fz
dDx1aW50OF90PigweEZGIC0gYmx1ZUNvbXBvbmVudCgpKSwgYWxwaGEgfTsKICAgICB9CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQSgpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBhc1NSR0JBKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxv
YXQ+KQorICAgICAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQocmVkQ29t
cG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBvbmVudCgpKSwgY29u
dmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChz
dGQ6OmlzX3NhbWVfdjxULCB1aW50OF90PikKKyAgICAgICAgICAgIHJldHVybiB7IHJlZENvbXBv
bmVudCgpLCBncmVlbkNvbXBvbmVudCgpLCBibHVlQ29tcG9uZW50KCksIGFscGhhQ29tcG9uZW50
KCkgfTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgogICAgIGNvbnN0ZXhw
ciB1aW50OF90IGdldCgpIGNvbnN0CkBAIC03OSw2ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgorICAgIGNvbnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgPj4gMTY7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBv
bmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gODsgfQorICAgIGNvbnN0ZXhwciB1aW50
OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKICAgICB1aW50
MzJfdCBtX3ZhbHVlIHsgMCB9OwogfTsKIApAQCAtOTAsMTMgKzk2LDkgQEAgY29uc3RleHByIFNp
bXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvcihjb25zdCBTUkdCQTx1aW50OF90PiYpOwogU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCi1TaW1wbGVDb2xvciBwcmVtdWx0aXBseUZs
b29yaW5nKFNpbXBsZUNvbG9yKTsKLVNpbXBsZUNvbG9yIHByZW11bHRpcGx5Q2VpbGluZyhTaW1w
bGVDb2xvcik7Ci1TaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yKTsKLQogaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewotICAg
IHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOworICAgIHJldHVybiBhLnZhbHVlQXNBUkdC
KCkgPT0gYi52YWx1ZUFzQVJHQigpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBs
ZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIpCkBAIC0xMTYsMjUgKzExOCwxNCBAQCBjb25zdGV4cHIg
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiAKIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWludDhfdD4mIHNSR0JBKQogewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gc1JHQkE7Ci0gICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OworICAgIHJl
dHVybiB7IHNSR0JBLnJlZCwgc1JHQkEuZ3JlZW4sIHNSR0JBLmJsdWUsIHNSR0JBLmFscGhhIH07
CiB9CiAKIGlubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAgIHJldHVy
biB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUociksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZyks
IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYiksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkgfTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JB
KSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBTaW1wbGVD
b2xvcjo6YXNTUkdCQSgpIGNvbnN0Ci17Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Zsb2F0
aW5nX3BvaW50X3Y8VD4pCi0gICAgICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQo
KSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9OwotICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIHsgcmVkQ29tcG9uZW50KCksIGdyZWVuQ29tcG9uZW50KCksIGJsdWVDb21wb25lbnQoKSwg
YWxwaGFDb21wb25lbnQoKSB9OwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFt
ZXNwYWNlIHN0ZCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
Lm1tCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM5Niw3ICszOTYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZh
CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAg
YXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICBb
c3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9t
VmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAgLTQzOSw3ICs0MzksNyBA
QCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1CiB7CiAgICAgaWYgKCFp
c0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICBbc3RhdGljX2Nhc3Q8Q0FC
YXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQChyKSwgQChn
KSwgQChiKSwgQChhKV1dOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcwogICAgICAgICByZXR1cm47CiAKICAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6
Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NSR0JBTG9zc3k8dWludDhfdD4oKTsK
ICAgICAgICAgcmV0dXJuIEBbQChyKSwgQChnKSwgQChiKSwgQChhKV07CiAgICAgfSkuZ2V0KCld
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24g
MjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsOCArMzY3LDggQEAg
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2ltcGxlQ29s
b3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIENHRmxvYXQgYVs0XSA9
IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50
KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25l
bnQoKSB9OworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3Jl
ZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxD
QUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBD
QUNGQW5pbWF0aW9uU2V0RnJvbVZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0K
QEAgLTQxOSw4ICs0MTksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFs
dWUoCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
Ci0gICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxl
Q29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRz
LnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhh
IH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JD
cmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRUb1ZhbHVlKG1fYW5pbWF0aW9uLmdl
dCgpLCB2LmdldCgpKTsKIH0KQEAgLTQ4OSw4ICs0ODksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25XaW46OnNldFZhbHVlcyhjCiAgICAgICAgIAogICAgIFJldGFpblB0cjxDRk11dGFibGVB
cnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNp
emUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVl
W2ldLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIENHRmxvYXQgYVs0XSA9IHsg
c2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCks
IHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQo
KSB9OworICAgICAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZVtpXS50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9u
ZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgICAg
IFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQs
IGEpKTsKICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBjb3B5Q29udGV4dFByb3BlcnRpZXMo
Y2Fpcm9fdCogc3JjQwogCiB2b2lkIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY2Fpcm9fdCogY29u
dGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcs
IGIsIGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1E
ZXN0cm95KCkKIAogc3RhdGljIHZvaWQgYWRkQ29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3Qg
KmdyYWRpZW50LCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQog
ewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwog
ICAgIGNhaXJvX3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZz
ZXQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdHlw
ZWRlZiBzdHJ1Y3QgcG9pbnRfdCB7CiAKIHN0YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShj
YWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50OjpDb2xvclN0b3Agc3Rv
cCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNv
bG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgY2Fpcm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJf
Y29sb3JfcmdiYShncmFkaWVudCwgaWQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAK
QEAgLTEzNSw4ICsxMzUsOCBAQCBzdGF0aWMgdm9pZCBhZGRDb25pY1NlY3RvcihjYWlyb19wYXR0
ZXJuCiAKIHN0YXRpYyBHcmFkaWVudDo6Q29sb3JTdG9wIGludGVycG9sYXRlQ29sb3JTdG9wKEdy
YWRpZW50OjpDb2xvclN0b3AgZnJvbSwgR3JhZGllbnQ6OkNvbG9yU3RvcCB0bykKIHsKLSAgICBh
dXRvIFtyMSwgZzEsIGIxLCBhMV0gPSBmcm9tLmNvbG9yLnRvU1JHQkFMb3NzeSgpOwotICAgIGF1
dG8gW3IyLCBnMiwgYjIsIGEyXSA9IHRvLmNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8g
W3IxLCBnMSwgYjEsIGExXSA9IGZyb20uY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAg
IGF1dG8gW3IyLCBnMiwgYjIsIGEyXSA9IHRvLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsK
IAogICAgIGZsb2F0IG9mZnNldCA9IGZyb20ub2Zmc2V0ICsgKHRvLm9mZnNldCAtIGZyb20ub2Zm
c2V0KSAqIDAuNWY7CiAgICAgZmxvYXQgciA9IHIxICsgKHIyIC0gcjEpICogMC41ZjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAsOSArODAsOSBAQCB2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kCiAgICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNp
Z25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiB5KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBtX2xvZ2ljYWxTaXplLndpZHRoKCk7IHgrKykgewogICAgICAgICAgICAgdW5zaWduZWQqIHBp
eGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIGF1dG8gcGl4ZWxDb2xvciA9IHVucHJlbXVsdGlw
bHkoU2ltcGxlQ29sb3IgeyAqcGl4ZWwgfSk7Ci0gICAgICAgICAgICBwaXhlbENvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkQ29tcG9uZW50KCldLCBsb29r
VXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCldLCBsb29rVXBUYWJsZVtwaXhlbENv
bG9yLmJsdWVDb21wb25lbnQoKV0sIHBpeGVsQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7Ci0gICAg
ICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBseUNlaWxpbmcocGl4ZWxDb2xvcikudmFsdWVBc0FS
R0IoKTsKKyAgICAgICAgICAgIGF1dG8gcGl4ZWxDb21wb25lbnRzID0gdW5wcmVtdWx0aXBsaWVk
KGFzU1JHQkEoQVJHQiB7ICpwaXhlbCB9KSk7CisgICAgICAgICAgICBwaXhlbENvbXBvbmVudHMg
PSB7IGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5yZWRdLCBsb29rVXBUYWJsZVtwaXhlbENv
bXBvbmVudHMuZ3JlZW5dLCBsb29rVXBUYWJsZVtwaXhlbENvbXBvbmVudHMuYmx1ZV0sIHBpeGVs
Q29tcG9uZW50cy5hbHBoYSB9OworICAgICAgICAgICAgKnBpeGVsID0gYXNBUkdCKHByZW11bHRp
cGxpZWRDZWlsaW5nKHBpeGVsQ29tcG9uZW50cykpLnZhbHVlOwogICAgICAgICB9CiAgICAgfQog
ICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAw
LCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIENvbG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKGMKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKICAgICB1bnNpZ25lZCogcGl4ZWwg
PSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gdW5wcmVtdWx0aXBseShTaW1wbGVDb2xv
ciB7ICpwaXhlbCB9KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGll
ZChhc1NSR0JBKEFSR0IgeyAqcGl4ZWwgfSkpKTsKIH0KIAogdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUxpZ2h0aW5nTkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVM
aWdodGluZ05FT04uaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDExICsxMTEsMTEgQEAgaW5saW5l
IHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lbwogICAgIC8vIFNldCBsaWdodCBzb3Vy
Y2UgYXJndW1lbnRzLgogICAgIGZsb2F0QXJndW1lbnRzLmNvbnN0T25lID0gMTsKIAotICAgIGF1
dG8gc2ltcGxlQ29sb3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKyAgICBhdXRvIGNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOwogCi0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBzaW1wbGVDb2xvci5yZWRDb21w
b25lbnQoKTsKLSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gc2ltcGxlQ29sb3IuZ3Jl
ZW5Db21wb25lbnQoKTsKLSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBzaW1wbGVDb2xv
ci5ibHVlQ29tcG9uZW50KCk7CisgICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBjb2xvci5y
ZWQ7CisgICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IGNvbG9yLmdyZWVuOworICAgIGZs
b2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IGNvbG9yLmJsdWU7CiAgICAgZmxvYXRBcmd1bWVudHMu
cGFkZGluZzQgPSAwOwogCiAgICAgaWYgKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSA9PSBMU19QT0lO
VCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDUsMTAgKzQwNSwxMCBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhV
aW50OENsYW1wCiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAg
ICAgCiAgICAgaWYgKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0xpbmVhclNSR0JBKG1fbGlnaHRp
bmdDb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9M
aW5lYXJTUkdCQShtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICAg
ICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBv
aW50M0QociwgZywgYik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICAgICAgcGFp
bnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0Qo
ciwgZywgYik7CiAgICAgfQogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRo
aXMsIHBhaW50aW5nRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBi
b29sIEZpbHRlck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgaWYgKGNvbG9yLmlz
U2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9y
ID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJh
dGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKHNSR0JBQ29s
b3IpKQpAQCAtMTI5LDcgKzEyOSw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRy
YW5zZm9ybUMKICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBh
dXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAKICAgICBmb3Ig
KGF1dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAgICBpZiAoIW9wZXJhdGlv
bi0+aW52ZXJzZVRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAy
NjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIENvbG9yOjpDb2xvcihjb25zdCBH
ZGtSR0JBJiBjb2xvcikKIAogQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAogewotICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgcmV0dXJuIHsgciwgZywgYiwgYSB9Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
ZHJhd0JvcmRlcihjb25zdCBDCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlNvbGlkQ29sb3IpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7
CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxv
c3N5KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCkpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRp
b24oKSwgciwgZywgYiwgYSk7CiAgICAgZ2xMaW5lV2lkdGgod2lkdGgpOwogCkBAIC0yNzUsNyAr
Mjc1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIoaW50IG51bQogICAgIGNh
aXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwogCiAgICAgLy8gU2luY2Ugd2Ugd29u
J3Qgc3dhcCBSK0Igd2hlbiB1cGxvYWRpbmcgYSB0ZXh0dXJlLCBwYWludCB3aXRoIHRoZSBzd2Fw
cGVkIFIrQiBjb2xvci4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3Nz
eSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0Pigp
OwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgYiwgZywgciwgYSk7CiAKICAgICBjYWly
b19yZWN0YW5nbGUoY3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwpAQCAtNDE0LDcgKzQxNCw3IEBA
IHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmUKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVl
ZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGlu
Zy4KLSAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChzaGFkb3cu
Y29sb3IoKS50b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAg
ICAgICAgICAgIGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBh
KTsKICAgICAgICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0aW9uKCks
IDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKICAgICAg
ICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgMCwgMCk7
CkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9y
KGNvbgogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEo
KS5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5w
cm9ncmFtSUQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29s
b3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGll
ZChjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0t
PmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRp
bmdBbGxvd2VkKQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKQEAgLTY4Niw3ICs2ODYs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAKIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGdsQ2xlYXJDb2xvcihyLCBn
LCBiLCBhKTsKICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVj
dDJELmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAs
MTMgQEAgQ29sb3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBjb2xvcikKIAogQ29sb3I6Om9wZXJhdG9y
IEQyRDFfQ09MT1JfRigpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JB
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsK
ICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6b3BlcmF0
b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9T
UkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+
KCk7CiAgICAgcmV0dXJuIEQyRDE6OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRp
ZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDcgKzcyLDcgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbgog
ICAgIFZlY3RvcjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7CiAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBFeHRlbmRlZENvbG9yLgogICAgIGZvciAoYXV0byBzdG9wIDog
bV9zdG9wcykgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFM
b3NzeSgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKICAgICAgICAgZ3JhZGllbnRTdG9wcy5hcHBlbmQoRDJEMTo6R3JhZGllbnRT
dG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRD
R1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAyLDcgKzIwMiw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RG90c0ZvckRvY3VtZW4KICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdyYW1t
YXJQYXR0ZXJuQ29sb3IgeyBtYWtlU2ltcGxlQ29sb3IoMCwgMTI4LCAwKSB9OwogCiAgICAgY29u
c3QgU2ltcGxlQ29sb3ImIHBhdHRlcm5Db2xvciA9IHN0eWxlLm1vZGUgPT0gRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9yIDogc3BlbGxp
bmdQYXR0ZXJuQ29sb3I7Ci0gICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwg
cGF0dGVybkNvbG9yLnJlZENvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuZ3JlZW5Db21wb25lbnQo
KSwgcGF0dGVybkNvbG9yLmJsdWVDb21wb25lbnQoKSwgcGF0dGVybkNvbG9yLmFscGhhQ29tcG9u
ZW50KCkpOworICAgIGF1dG8gcGF0dGVybkNvbG9yQ29tcG9uZW50cyA9IHBhdHRlcm5Db2xvci5h
c1NSR0JBPHVpbnQ4X3Q+KCk7CisgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4
dCwgcGF0dGVybkNvbG9yQ29tcG9uZW50cy5yZWQsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMuZ3Jl
ZW4sIHBhdHRlcm5Db2xvckNvbXBvbmVudHMuYmx1ZSwgcGF0dGVybkNvbG9yQ29tcG9uZW50cy5h
bHBoYSk7CiAKICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlID0gZ2V0VXNlclRvQmFz
ZUNUTShjb250ZXh0KTsKICAgICBDR1BvaW50IHBoYXNlID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJh
bnNmb3JtKHBvaW50LCB1c2VyVG9CYXNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVj
dDJELmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzc5LDcgKzM3OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3QK
IAogRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29u
c3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
dG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9z
c3k8ZmxvYXQ+KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRh
LT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMiw3ICsxNDAy
LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmRpc2FibGVkVGV4dENvbG9yKGNvbgogICAgIC8vIElm
IHRoZXJlJ3Mgbm90IHZlcnkgbXVjaCBjb250cmFzdCBiZXR3ZWVuIHRoZSBkaXNhYmxlZCBjb2xv
ciBhbmQgdGhlIGJhY2tncm91bmQgY29sb3IsCiAgICAgLy8ganVzdCBsZWF2ZSB0aGUgdGV4dCBj
b2xvciBhbG9uZS4gV2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgYSBnb29kIGNvbnRyYXN0IGNvbG9y
IHNjaGVtZSBzbyB0aGF0IGl0IGhhcyByZWFsbHkgYmFkIGNvbnRyYXN0LgogICAgIC8vIElmIHRo
ZSBjb250cmFzdCB3YXMgYWxyZWFkeSBwb29yLCB0aGVuIGl0IGRvZXNuJ3QgZG8gYW55IGdvb2Qg
dG8gY2hhbmdlIGl0IHRvIGEgZGlmZmVyZW50IHBvb3IgY29udHJhc3QgY29sb3Igc2NoZW1lLgot
ICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUxvc3N5KCksIGJhY2tn
cm91bmRDb2xvci50b1NSR0JBTG9zc3koKSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUpCisgICAg
aWYgKGNvbnRyYXN0UmF0aW8oZGlzYWJsZWRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCksIGJh
Y2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpIDwgbWluQ29sb3JDb250cmFzdFZh
bHVlKQogICAgICAgICByZXR1cm4gdGV4dENvbG9yOwogCiAgICAgcmV0dXJuIGRpc2FibGVkQ29s
b3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShy
ZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNTUsNyArMTA1NSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVJT1M6OnBhaW50QnV0dG9uRGVjb3JhdGkKIHN0YXRpYyBib29sIHNob3VsZFVzZUNvbnZleEdy
YWRpZW50KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGJhY2tncm91bmRDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGJhY2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgZmxvYXQg
bGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1
cm4gYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgdGV4dENvbG9ySXNMZWdpYmxlQWdhaW5z
dEJhY2tncm91bmQKIHsKICAgICAvLyBVc2VzIHRoZSBXQ0FHIDIuMCBkZWZpbml0aW9uIG9mIGxl
Z2liaWxpdHk6IGEgY29udHJhc3QgcmF0aW8gb2YgNC41OjEgb3IgZ3JlYXRlci4KICAgICAvLyBo
dHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJh
c3QKLSAgICByZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IudG9TUkdCQUxvc3N5KCksIGJh
Y2tncm91bmRDb2xvci50b1NSR0JBTG9zc3koKSkgPiA0LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0
UmF0aW8odGV4dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSwgYmFja2dyb3VuZENvbG9yLnRv
U1JHQkFMb3NzeTxmbG9hdD4oKSkgPiA0LjU7CiB9CiAKIHN0YXRpYyBDb2xvciBhZGp1c3RDb2xv
ckZvclZpc2liaWxpdHlPbkJhY2tncm91bmQoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3Qg
Q29sb3ImIGJhY2tncm91bmRDb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0
aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVl
RnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODEsMTUgKzgxLDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0ZShT
VkdFbGVtZW50KiwgZmxvYXQgcHJvZ3Jlc3MsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBDb2xvciYg
YW5pbWF0ZWQpCiAgICAgewotICAgICAgICBhdXRvIHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0ZWQu
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9h
bmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zy
b20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1f
dG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUb0F0RW5k
T2ZEdXJhdGlvbiA9IHRvQXRFbmRPZkR1cmF0aW9uKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKyAgICAgICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0g
QW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5k
T2ZEdXJhdGlvbigpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICAKLSAgICAgICAg
ZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZy
b20ucmVkQ29tcG9uZW50KCksIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5k
T2ZEdXJhdGlvbi5yZWRDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQucmVkQ29tcG9uZW50KCkp
OwotICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENv
dW50LCBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50
KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUFuaW1h
dGVkLmdyZWVuQ29tcG9uZW50KCkpOwotICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0
ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVUby5ibHVlQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWVDb21wb25l
bnQoKSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZUNvbXBvbmVudCgpKTsKLSAgICAgICAgZmxvYXQgYWxw
aGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5hbHBo
YUNvbXBvbmVudCgpLCBzaW1wbGVUby5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZE
dXJhdGlvbi5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5hbHBoYUNvbXBvbmVudCgp
KTsKKyAgICAgICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291
bnQsIHNpbXBsZUZyb20ucmVkLCBzaW1wbGVUby5yZWQsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9u
LnJlZCwgc2ltcGxlQW5pbWF0ZWQucmVkKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjph
bmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8u
Z3JlZW4sIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuLCBzaW1wbGVBbmltYXRlZC5ncmVl
bik7CisgICAgICAgIGZsb2F0IGJsdWUgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRD
b3VudCwgc2ltcGxlRnJvbS5ibHVlLCBzaW1wbGVUby5ibHVlLCBzaW1wbGVUb0F0RW5kT2ZEdXJh
dGlvbi5ibHVlLCBzaW1wbGVBbmltYXRlZC5ibHVlKTsKKyAgICAgICAgZmxvYXQgYWxwaGEgPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5hbHBoYSwgc2lt
cGxlVG8uYWxwaGEsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmFscGhhLCBzaW1wbGVBbmltYXRl
ZC5hbHBoYSk7CiAgICAgICAgIAogICAgICAgICBhbmltYXRlZCA9IG1ha2VTaW1wbGVDb2xvcihy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
Z3JlZW4pLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29s
b3JDaGFubmVsKGFscGhhKSk7CiAgICAgfQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgcHVibGljOgog
ICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICAgICAgICAgIAotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3IudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJvbUNv
bG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gdG9D
b2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgICAgICBmbG9hdCByZWQgPSBzaW1w
bGVGcm9tLnJlZENvbXBvbmVudCgpIC0gc2ltcGxlVG8ucmVkQ29tcG9uZW50KCk7Ci0gICAgICAg
IGZsb2F0IGdyZWVuID0gc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgpIC0gc2ltcGxlVG8uZ3Jl
ZW5Db21wb25lbnQoKTsKLSAgICAgICAgZmxvYXQgYmx1ZSA9IHNpbXBsZUZyb20uYmx1ZUNvbXBv
bmVudCgpIC0gc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpOworICAgICAgICBmbG9hdCByZWQgPSBz
aW1wbGVGcm9tLnJlZCAtIHNpbXBsZVRvLnJlZDsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1w
bGVGcm9tLmdyZWVuIC0gc2ltcGxlVG8uZ3JlZW47CisgICAgICAgIGZsb2F0IGJsdWUgPSBzaW1w
bGVGcm9tLmJsdWUgLSBzaW1wbGVUby5ibHVlOwogCiAgICAgICAgIHJldHVybiBzdGQ6Omh5cG90
KHJlZCwgZ3JlZW4sIGJsdWUpOwogICAgIH0KQEAgLTEyNiwxNCArMTI2LDE0IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50Kikgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JM
b3NzeSgpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBU2ltcGxlQ29sb3JM
b3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50
OF90PigpOwogCiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhhIG9u
IHJlc3VsdCB0byAxMDAlIG9wYXF1ZS4KICAgICAgICAgbV90byA9IG1ha2VTaW1wbGVDb2xvcigK
LSAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkQ29tcG9u
ZW50KCkgKyBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpKSwKLSAgICAgICAgICAgIHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSArIHNpbXBsZUZyb20u
Z3JlZW5Db21wb25lbnQoKSksCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKSArIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpKQor
ICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5yZWQgKyBzaW1w
bGVGcm9tLnJlZCksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBs
ZVRvLmdyZWVuICsgc2ltcGxlRnJvbS5ncmVlbiksCisgICAgICAgICAgICByb3VuZEFuZENsYW1w
Q29sb3JDaGFubmVsKHNpbXBsZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpCiAgICAgICAgICk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wNy0wMyAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAxIG9mIFNpbXBs
ZUNvbG9yIGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQn
cyBjb252ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTM5NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5
ZnJhbWVWYWx1ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG9yKToK
KyAgICAgICAgQWRhcHQgdG8gdXNlIHRlbXBsYXRpemVkIHRvU1JHQkFMb3NzeTxmbG9hdC91aW50
OF90Pi4KKwogMjAyMC0wNy0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09N
UExFVEUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
Q29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2
b2lkIHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQod2ViQ29yZUNvbG9yLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHdlYkNvcmVDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdl
YkNvcmVDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgY29sb3ItPnJlZCA9IHI7CiAg
ICAgY29sb3ItPmdyZWVuID0gZzsKICAgICBjb2xvci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVy
R3RrLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3Rr
L1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICsz
MzgsNyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlCiAgICAgICAg
IGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9y
Q3VycmVudFNuYXBzaG90ID0gY29sb3I7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBl
U25hcHNob3RQYXR0ZXJuKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgICAgICAgICAgICAgYXV0byBb
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwog
ICAgICAgICAgICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuID0gYWRvcHRSZWYo
Y2Fpcm9fcGF0dGVybl9jcmVhdGVfcmdiYShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Niw3
ICs2NTYsNyBAQCBib29sIFdlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvCiAgICAg
aWYgKCFiZ0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0
byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgKnJlZCA9IHI7CiAg
ICAgKmdyZWVuID0gZzsKICAgICAqYmx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkocmV2aXNpb24gMjYzOTE4KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5Myw3ICs2OTMsNyBA
QCBzdGF0aWMgTlNPYmplY3QqIGFuaW1hdGlvblZhbHVlRnJvbUtleWZyCiAgICAgICAgIHJldHVy
biBAKGtleWZyYW1lVmFsdWUubnVtYmVyVmFsdWUoKSk7CiAgICAgICAgICAgICAKICAgICBjYXNl
IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6OkNvbG9yS2V5VHlwZTog
ewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgp
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
a2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAg
ICAgIHJldHVybiBAWyBAKHIpLCBAKGcpLCBAKGIpLCBAKGEpIF07CiAgICAgfQogCkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NjM5MjUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBA
QAorMjAyMC0wNy0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
UGFydCAxIG9mIFNpbXBsZUNvbG9yIGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkg
dGhlIHNhbWUgLSBsZXQncyBjb252ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM5NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIEFkYXB0IHRlc3RzIHRvIHVzZSB0ZW1w
bGF0aXplZCB0b1NSR0JBTG9zc3k8ZmxvYXQvdWludDhfdD4uCisKIDIwMjAtMDctMDMgIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hp
dGUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRvIGhzbGFD
b2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3Ig
PSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9y
LnNhdHVyYXRpb24pOwpAQCAtNTQsNyArNTQsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFj
aykKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKIAotICAgIGF1dG8gaHNsYUNv
bG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9
IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FU
X0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iu
c2F0dXJhdGlvbik7CkBAIC03MCw3ICs3MCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkK
IHsKICAgICBDb2xvciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogCi0gICAg
YXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8g
aHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBF
WFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEs
IGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTg2LDcgKzg2LDcgQEAgVEVTVChDb2xvciwgUkdC
VG9IU0xfR3JlZW4pCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1
LCAwKTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgp
KTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+
KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhzbGFDb2xvci5odWUpOwog
ICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMDIsNyAr
MTAyLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKICAgICBDb2xvciBjb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAyNTUpOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hT
TEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC42NjY2
NjY2OSwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5z
YXR1cmF0aW9uKTsKQEAgLTExOCw3ICsxMTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJr
R3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAgIGF1dG8g
aHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFD
b2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNU
X0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xh
Q29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMzQsNyArMTM0LDcgQEAgVEVTVChDb2xvciwgUkdCVG9I
U0xfR3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmF5OwogCi0gICAgYXV0byBo
c2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNv
bG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5zYXR1cmF0aW9uKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9MaWdodEdyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0g
ICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1
dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTE4MywyOSArMTgzLDI5IEBAIFRFU1QoQ29s
b3IsIFZhbGlkaXR5KQogICAgIHZhbGlkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMSwgMiwgMywg
NCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9G
QUxTRSh2YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzaW1wbGVWYWxpZENvbG9y
ID0gdmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShz
aW1wbGVWYWxpZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxl
VmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFs
aWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENv
bG9yLmFscGhhQ29tcG9uZW50KCksIDQpOworICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMg
PSB2YWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9FUSh2YWxp
ZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9u
ZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUs
IDMpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5hbHBoYSwgNCk7CiAKICAg
ICBDb2xvciB5ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3IpKTsKICAgICBF
WFBFQ1RfVFJVRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9G
QUxTRSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc2ltcGxl
WWV0QW5vdGhlclZhbGlkQ29sb3IgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5y
ZWRDb21wb25lbnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENv
bG9yLmdyZWVuQ29tcG9uZW50KCksIDIpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVy
VmFsaWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRB
bm90aGVyVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKKyAgICBhdXRvIHlldEFub3Ro
ZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVu
dHMucmVkLCAxKTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRz
LmdyZWVuLCAyKTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRz
LmJsdWUsIDMpOworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMu
YWxwaGEsIDQpOwogCiAgICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90aGVyVmFs
aWRDb2xvcik7CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8g
c2ltcGxlT3RoZXJWYWxpZENvbG9yID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5yZWRDb21wb25l
bnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBv
bmVudCgpLCAyKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmJsdWVDb21w
b25lbnQoKSwgMyk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5hbHBoYUNv
bXBvbmVudCgpLCA0KTsKKyAgICBhdXRvIG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSBvdGhl
clZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0VRKG90aGVy
VmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKKyAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENv
bG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNv
bXBvbmVudHMuYmx1ZSwgMyk7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVu
dHMuYWxwaGEsIDQpOwogfQogCiBURVNUKENvbG9yLCBMdW1pbmFuY2UpCkBAIC0yMTYsMjEgKzIx
NiwyMiBAQCBURVNUKENvbG9yLCBMdW1pbmFuY2UpCiAgICAgYXV0byBjID0gbWFrZVNpbXBsZUNv
bG9yKDg1LCA5MCwgMTYwKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoYykubHVtaW5hbmNl
KCksIDAuMTE3ODE2OTIpOwogCi0gICAgRVhQRUNUX0VRKGMucmVkQ29tcG9uZW50KCksIDg1KTsK
LSAgICBFWFBFQ1RfRVEoYy5ncmVlbkNvbXBvbmVudCgpLCA5MCk7Ci0gICAgRVhQRUNUX0VRKGMu
Ymx1ZUNvbXBvbmVudCgpLCAxNjApOwotCi0gICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjKS5s
aWdodGVuZWQoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9GTE9BVF9F
UShDb2xvcihjTGlndGVuZWQpLmx1bWluYW5jZSgpLCAwLjI5MTY4ODA4KTsKLSAgICBFWFBFQ1Rf
RVEoY0xpZ3RlbmVkLnJlZENvbXBvbmVudCgpLCAxMzApOwotICAgIEVYUEVDVF9FUShjTGlndGVu
ZWQuZ3JlZW5Db21wb25lbnQoKSwgMTM3KTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmJsdWVD
b21wb25lbnQoKSwgMjQ0KTsKLQotICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoYykuZGFya2Vu
ZWQoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9GTE9BVF9FUShDb2xv
cihjRGFya2VuZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjcyNyk7Ci0gICAgRVhQRUNUX0VRKGNE
YXJrZW5lZC5yZWRDb21wb25lbnQoKSwgNDApOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQuZ3Jl
ZW5Db21wb25lbnQoKSwgNDMpOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQuYmx1ZUNvbXBvbmVu
dCgpLCA3Nik7CisgICAgYXV0byBjQ29tcG9uZW50cyA9IGMuYXNTUkdCQTx1aW50OF90PigpOwor
ICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5yZWQsIDg1KTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBv
bmVudHMuZ3JlZW4sIDkwKTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsK
KworICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKG1ha2VTaW1wbGVDb2xvcihj
TGlndGVuZWQpKS5sdW1pbmFuY2UoKSwgMC4yOTE2ODgwOCk7CisgICAgRVhQRUNUX0VRKGNMaWd0
ZW5lZC5yZWQsIDEzMCk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ncmVlbiwgMTM3KTsKKyAg
ICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmJsdWUsIDI0NCk7CisKKyAgICBhdXRvIGNEYXJrZW5lZCA9
IENvbG9yKGMpLmRhcmtlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKENvbG9yKG1ha2VTaW1wbGVDb2xvcihjRGFya2VuZWQpKS5sdW1pbmFuY2UoKSwg
MC4wMjcwMDY3MjcpOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkLCA0MCk7CisgICAgRVhQ
RUNUX0VRKGNEYXJrZW5lZC5ncmVlbiwgNDMpOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQuYmx1
ZSwgNzYpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRl
c3RzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsy
NDEsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKICAgICBDb2xv
ciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9y
U3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQo
KSk7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAg
IGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIEVY
UEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwgMS4wZikp
OwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmdy
ZWVuLCAwLjQ2MjUzNzg4NWYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5
RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjE0OTE0NzgzOGYpKTsKQEAgLTI1Miw3ICsyNTIsNyBA
QCBURVNUKEV4dGVuZGVkQ29sb3IsIExpbmVhclNSR0JDb252ZXJzaW9uCiB7CiAgICAgQ29sb3Ig
bGluZWFyQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29s
b3JTcGFjZTo6TGluZWFyUkdCKSB9OwogICAgIEVYUEVDVF9UUlVFKGxpbmVhckNvbG9yLmlzRXh0
ZW5kZWQoKSk7Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0
PigpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9y
LnJlZCwgMS4wZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChz
UkdCQUNvbG9yLmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403504</attachid>
            <date>2020-07-03 20:26:09 -0700</date>
            <delta_ts>2020-07-04 01:20:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213948-20200703202608.patch</filename>
            <type>text/plain</type>
            <size>70955</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsaWdodG5lc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omx1bWluYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VP
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJD
b3JlOjphc0FSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNTUkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRGbG9vcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2VpbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjp1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29t
cG9uZW50Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBpeGVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNv
bG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xv
cjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVkQ29t
cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpncmVlbkNvbXBv
bmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Ymx1ZUNvbXBvbmVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHA6CisgICAgICAgIChQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFVzZUNvbnZleEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmRDb2xvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29sb3JG
dW5jdGlvbjo6YW5pbWF0ZSk6CisKIDIwMjAtMDctMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYkNvcmUvU291cmNlcy50eHQ6IFJlbW92ZSAjaWYgRU5BQkxF
X1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcwLDcgKzE5NzAsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTk4NCw3ICs5OTg0LDYgQEAKIAkJN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2
IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQWJvcnRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBE
OTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MzMEQ5ODIxRjgxNUFDMjAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBTaW1w
bGVDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVD
b2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzFDODhDMjQ3QUQ1OTUw
MDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMzFERjlFOTVCMDBEMzM5NUMgLyog
UG9zaXRpb25PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3NpdGlvbk9wdGlvbnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjU2OTcsNyArMjU2OTYsNiBAQAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBT
aW1wbGVDb2xvci5jcHAgKi8sCiAJCQkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBs
ZUNvbG9yLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgzLDEwICsxOTgzLDEwIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFzQ29sb3IoKS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0g
Y29sb3IuZ3JlZW5Db21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOwor
ICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1
ZUFzQ29sb3IoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOwor
ICAgIGcgPSBjb2xvci5ncmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE0ICs5MiwxNCBAQCBzdGF0aWMg
QXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0NvbG9yID0g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIGJ1ZmZl
ci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICBy
ZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAK
ICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7
CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDEwICs3MDEsMTAgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRv
IGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSku
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7
Ci0gICAgZyA9IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWVDb21w
b25lbnQoKTsKKyAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgciA9IGNvbG9y
LnJlZDsKKyAgICBnID0gY29sb3IuZ3JlZW47CisgICAgYiA9IGNvbG9yLmJsdWU7CiB9CiAKIEFY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJl
Y2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKG1fY29sb3IpOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZT4gY3JlYXRlV3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVy
VHlwZSBudW1iZXIpCkBAIC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBE
ZXByZWNhdGVkQ1NTT01SR0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSkKLSAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLnJl
ZENvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2FscGhhKGNyZWF0
ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkpKQorICAgICAg
ICA6IG1fY29sb3IoY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpCisgICAgICAgICwgbV9y
ZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5yZWQpKQorICAgICAgICAsIG1fZ3JlZW4o
Y3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbikpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZSkpCisgICAgICAgICwgbV9hbHBoYShjcmVh
dGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkp
CiAgICAgewogICAgIH0KIAotICAgIFNpbXBsZUNvbG9yIG1fY29sb3I7CisgICAgU1JHQkE8dWlu
dDhfdD4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1f
cmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAg
ICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjIxLDcgKzYyMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246
OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3R5bGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xh
ID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhl
IHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5
IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVh
ciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2Fu
IGJlIHNwZWNpZmllZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitp
bmxpbmUgdWludDhfdCBibGVuZCh1aW50OF90IGZyb20sIHVpbnQ4X3QgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kKHN0YXRpY19j
YXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkgKiBwcm9n
cmVzcykpOworfQorCiBpbmxpbmUgaW50IGJsZW5kKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChzdGF0aWNf
Y2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20pICogcHJv
Z3Jlc3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBDb2xvciBDb2xvcjo6
bGlnaHRlbmVkKCkgY29uc3QKICAgICBpZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IGJs
YWNrKQogICAgICAgICByZXR1cm4gbGlnaHRlbmVkQmxhY2s7CiAKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAKICAg
ICBpZiAodiA9PSAwLjBmKQpAQCAtMTAzLDcgKzEwMyw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5l
ZCgpIGNvbnN0CiAgICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSB3aGl0ZSkKICAg
ICAgICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CiAgICAgCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKIAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CkBAIC0xMTQs
MTQgKzExNCwxNCBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogZmxvYXQgQ29sb3I6
OmxpZ2h0bmVzcygpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGF2
b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9yc3BhY2UgYWxnb3JpdGht
cyBmb3IgSFNMLgotICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5KCkp
OworICAgIHJldHVybiBXZWJDb3JlOjpsaWdodG5lc3ModG9TUkdCQUxvc3N5PGZsb2F0PigpKTsK
IH0KIAogZmxvYXQgQ29sb3I6Omx1bWluYW5jZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgY2FuIHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNv
bG9yc3BhY2UgYWxnb3JpdGhtcwogICAgIC8vIGZvciBsdW1pbmFuY2UgKGUuZy4gY29udmVydFRv
WFlaKGMpLnlDb21wb25lbnQoKSkuCi0gICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NS
R0JBTG9zc3koKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkpOwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0CkBAIC0xNDksNyArMTQ5LDcgQEAgQ29sb3IgQ29sb3I6OnNlbWFudGljQ29sb3IoKSBj
b25zdAogICAgIGlmIChpc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAg
IHJldHVybiB7IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCksIFNlbWFudGljIH07CisgICAgcmV0
dXJuIHsgbWFrZVNpbXBsZUNvbG9yKHRvU1JHQkFMb3NzeTx1aW50OF90PigpKSwgU2VtYW50aWMg
fTsKIH0KIAogc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+IENv
bG9yOjpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0CkBAIC0xNTksMjAgKzE1OSw2IEBA
IHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmwKICAgICByZXR1cm4geyBD
b2xvclNwYWNlOjpTUkdCLCBhc0NvbG9yQ29tcG9uZW50cyhhc1NpbXBsZSgpLmFzU1JHQkE8Zmxv
YXQ+KCkpIH07CiB9CiAKLVNpbXBsZUNvbG9yIENvbG9yOjp0b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvcihhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCkpOwotICAgIHJldHVybiBhc1Np
bXBsZSgpOwotfQotCi1TUkdCQTxmbG9hdD4gQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NS
R0JBTG9zc3koKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpOwotfQot
CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29s
b3IpCiB7CiAgICAgcmV0dXJuIHRzIDw8IHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0
KGNvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEwICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIENvbG9yQ29tcG9uZW50czxmbG9hdD4+
IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHdpbGwgY29u
dmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9F
WFBPUlQgU2ltcGxlQ29sb3IgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdDsKLQotICAg
IC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JH
Qi4KLSAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3Q7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBsaWdodGVuZWQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvciBkYXJrZW5lZCgpIGNvbnN0OwpAQCAtMjY4LDYgKzI2NSwxMyBAQCBp
bmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAogICAgIHJldHVybiBXVEY6OmludEhh
c2gobV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFNSR0JBPFQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAoreworICAgIGlmIChp
c0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5PFQ+
KCk7CisgICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxUPigpOworfQorCiBpbmxpbmUgQ29s
b3IgQ29sb3I6OmludmVydGVkQ29sb3JXaXRoQWxwaGEoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBj
b25zdAogewogICAgIHJldHVybiBhbHBoYSA/IGludmVydGVkQ29sb3JXaXRoQWxwaGEoYWxwaGEu
dmFsdWUoKSkgOiAqdGhpczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yQmxlbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksOCArMzksOCBAQCBDb2xvciBibGVuZFNvdXJjZU92ZXIoY29uc3QgQ29sb3ImIGJh
Y2tkCiAgICAgaWYgKCFzb3VyY2UuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuIGJhY2tkcm9wOwog
Ci0gICAgYXV0byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9
IGJhY2tkcm9wLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byBbc291cmNlUiwg
c291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKKyAgICBhdXRvIFtiYWNrZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJv
cEFdID0gYmFja2Ryb3AudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byBbc291cmNl
Uiwgc291cmNlRywgc291cmNlQiwgc291cmNlQV0gPSBzb3VyY2UudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAKICAgICBpbnQgZCA9IDB4RkYgKiAoYmFja2Ryb3BBICsgc291cmNlQSkgLSBiYWNr
ZHJvcEEgKiBzb3VyY2VBOwogICAgIGludCBhID0gZCAvIDB4RkY7CkBAIC02OCw3ICs2OCw3IEBA
IENvbG9yIGJsZW5kV2l0aFdoaXRlKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAoIWNvbG9y
LmlzT3BhcXVlKCkpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGF1dG8gW2V4aXN0aW5n
UiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gY29sb3IudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3Rp
bmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCiAg
ICAgU2ltcGxlQ29sb3IgcmVzdWx0OwogICAgIGZvciAoaW50IGFscGhhID0gc3RhcnRBbHBoYTsg
YWxwaGEgPD0gZW5kQWxwaGE7IGFscGhhICs9IGFscGhhSW5jcmVtZW50KSB7CkBAIC05NywxOCAr
OTcsMTcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogICAgIGlm
IChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICAvLyBTaW5jZSBwcmVtdWx0aXBseUNlaWxpbmcoKSBiYWlscyBvbiB6ZXJvIGFscGhhLCBz
cGVjaWFsLWNhc2UgdGhhdC4KLSAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gZnJvbS5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkg
OiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgYXV0byBwcmVtdWx0aXBsaWVkVG8gPSB0by5hbHBo
YSgpID8gcHJlbXVsdGlwbHlDZWlsaW5nKHRvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDog
Q29sb3I6OnRyYW5zcGFyZW50OwotCi0gICAgYXV0byBwcmVtdWx0QmxlbmRlZCA9IG1ha2VTaW1w
bGVDb2xvcigKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkQ29t
cG9uZW50KCksIHByZW11bHRpcGxpZWRUby5yZWRDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBw
cmVtdWx0aXBsaWVkVG8uZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJD
b3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ibHVlQ29tcG9uZW50KCksIHByZW11bHRpcGxp
ZWRUby5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQo
cHJlbXVsdGlwbGllZEZyb20uYWxwaGFDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmFscGhh
Q29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJv
bSA9IHByZW11bHRpcGxpZWRDZWlsaW5nKGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOwor
ICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCkpOwogCi0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkocHJlbXVsdEJs
ZW5kZWQpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZEJsZW5kZWQgPSBTUkdCQSB7CisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZCwgcHJlbXVsdGlwbGllZFRvLnJl
ZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5n
cmVlbiwgcHJlbXVsdGlwbGllZFRvLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWUsIHByZW11bHRpcGxpZWRUby5ibHVlLCBwcm9n
cmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmFscGhhLCBw
cmVtdWx0aXBsaWVkVG8uYWxwaGEsIHByb2dyZXNzKQorICAgIH07CisKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBsaWVkQmxlbmRlZCkpOwogfQog
CiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xMTgsMTUgKzExNywxNSBAQCBDb2xvciBi
bGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNS
R0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byB0b1NSR0IgPSBm
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbkNv
bXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29tcG9u
ZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGFD
b21wb25lbnQoKSwgdG9TUkdCLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQotICAgICk7Cisg
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7CisgICAgICAgIFdlYkNvcmU6OmJsZW5k
KGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpi
bGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBwcm9ncmVzcyksCisgICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmFscGhhLCB0b1NSR0IuYWxwaGEsIHByb2dyZXNz
KQorICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzNyw0ICsyMzcsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKworLy8gUGl4ZWwgRm9y
bWF0cworCitzdHJ1Y3QgQVJHQiB7CisgICAgdW5zaWduZWQgdmFsdWU7Cit9OworCitjb25zdGV4
cHIgQVJHQiBhc0FSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwg
Y29sb3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH07Cit9CisKK2NvbnN0ZXhwciBTUkdCQTx1
aW50OF90PiBhc1NSR0JBKEFSR0IgY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8
dWludDhfdD4oY29sb3IudmFsdWUgPj4gMTYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52
YWx1ZSA+PiA4KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUpLCBzdGF0aWNfY2Fz
dDx1aW50OF90Pihjb2xvci52YWx1ZSA+PiAyNCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw0
ICs2Niw0MyBAQCBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmCiAgICAg
cmV0dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCitTUkdCQTxmbG9hdD4gdW5w
cmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBjb2xvcjsKKyAgICByZXR1cm4geyByIC8gYSwgZyAvIGEsIGIgLyBhLCBhIH07
Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90
PiBjb2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSkK
KyAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OworICAgIGlmIChhID09IDI1NSkKKyAgICAg
ICAgcmV0dXJuIGNvbG9yOworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3RE
aXZpZGVCeTI1NShyICogYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5MjU1KGIgKiBhKSksIGEg
fTsKK30KKworU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGllZENlaWxpbmcoU1JHQkE8dWludDhf
dD4gY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBpZiAoIWEp
CisgICAgICAgIHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICBpZiAoYSA9PSAyNTUpCisgICAg
ICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0
RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlk
ZUJ5MjU1KGcgKiBhICsgMjU0KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1
NShiICogYSArIDI1NCkpLCBhIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVt
dWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90IGMsIHVpbnQ4X3QgYSkKK3sKKyAgICByZXR1
cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworU1JHQkE8dWludDhf
dD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAgICAgICByZXR1
cm4gY29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4odW5wcmVtdWx0aXBs
aWVkQ29tcG9uZW50Qnl0ZShyLCBhKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVucHJlbXVsdGlw
bGllZENvbXBvbmVudEJ5dGUoZywgYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih1bnByZW11bHRp
cGxpZWRDb21wb25lbnRCeXRlKGIsIGEpKSwgYSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEx
IEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0IGNvbnRyYXN0
UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNSR0JB
PGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+
IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8dWludDhfdD4g
cHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHBy
ZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHVucHJl
bXVsdGlwbGllZChTUkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVz
Y2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDE4IEBAIGNvbnN0
ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4gYnl0ZSAvIDI1
NS4wZjsKIH0KIAordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlw
ZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25z
dCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0Nv
bG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50
Qnl0ZShjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4g
dHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+JiBjb2xvcikKK3sKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRz
WzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1szXSkgfTsKK30KKwogY29u
c3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewogICAg
IHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBSZWY8RXh0ZW5kZWRDb2xvcj4gRXh0ZW5k
ZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0ZSgxLjBmIC0g
YzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNwYWNlKCkpOwog
fQogCi1TUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK1NS
R0JBPGZsb2F0PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKSBj
b25zdAogewogICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7CiAgICAgY2FzZSBDb2xvclNwYWNl
OjpTUkdCOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4
dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4
IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAg
LTQ5LDExICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGNvbG9yV2l0
aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52ZXJ0ZWRDb2xv
cldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKLSAgICBTUkdCQTxmbG9hdD4gdG9TUkdCQUxvc3N5
KCkgY29uc3Q7Ci0KICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29sIGlzQmxhY2so
KSBjb25zdDsKIAorICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2Ug
Y29sb3JzIGludG8gc1JHQi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JH
QkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQorICAgICAgICAgICAgcmV0dXJuIHRvU1JHQkFGbG9h
dENvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19z
YW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvQ29tcG9uZW50
Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFs
cGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgICAgIDogbV9jb21wb25lbnRzKGMxLCBj
MiwgYzMsIGFscGhhKQpAQCAtNjEsNiArNzAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xv
c3N5KCkgY29uc3Q7CisKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29tcG9uZW50czsK
ICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHJldmlzaW9u
IDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MiwyOSArMTUyLDI5IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFNpbXBsZUNvbG9y
IHBpeGVsIHsgKmRlc3QgfTsKKyAgICAgICAgYXV0byBwaXhlbCA9IGFzU1JHQkEoQVJHQiB7ICpk
ZXN0IH0pOwogCi0gICAgICAgIGlmIChhID49IDI1NSB8fCAhcGl4ZWwuaXNWaXNpYmxlKCkpIHsK
KyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5hbHBoYSkgewogICAgICAgICAgICAgc2V0
UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHBpeGVsID0g
cHJlbXVsdGlwbHlGbG9vcmluZyhwaXhlbCk7CisgICAgICAgICAgICBwaXhlbCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhwaXhlbCk7CiAKICAgICAgICAgdW5zaWduZWQgZCA9IDI1NSAtIGE7CiAK
LSAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICogYSArIHBpeGVsLnJlZENvbXBvbmVudCgp
ICogZCk7Ci0gICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyBwaXhlbC5ncmVlbkNv
bXBvbmVudCgpICogZCk7Ci0gICAgICAgIGIgPSBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhl
bC5ibHVlQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgYSArPSBmYXN0RGl2aWRlQnkyNTUoZCAq
IHBpeGVsLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIg
KiBhICsgcGl4ZWwucmVkICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAqIGEg
KyBwaXhlbC5ncmVlbiAqIGQpOworICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsg
cGl4ZWwuYmx1ZSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwu
YWxwaGEpOwogCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIs
IGEpOworICAgICAgICBhdXRvIHJlc3VsdCA9IFNSR0JBIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4o
ciksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGcpLCBzdGF0aWNfY2FzdDx1aW50OF90PihiKSwgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oYSkgfTsKIAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBo
YSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHVucHJlbXVsdGlwbHkocmVzdWx0KTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHVucHJlbXVsdGlwbGllZChyZXN1bHQpOwogCi0gICAgICAgICpkZXN0ID0g
cmVzdWx0LnZhbHVlQXNBUkdCKCk7CisgICAgICAgICpkZXN0ID0gYXNBUkdCKHJlc3VsdCkudmFs
dWU7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKQpAQCAtMjI2LDEyICsyMjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fcHJlbXVs
dGlwbHlBbHBoYSAmJiAhYSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGF1dG8g
cmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpOworICAgICAgICBhdXRvIHJlc3Vs
dCA9IFNSR0JBPHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8dWludDhfdD4ociksIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KGcpLCBzdGF0aWNfY2FzdDx1aW50OF90PihiKSwgc3RhdGljX2Nhc3Q8dWludDhf
dD4oYSkgfTsKIAogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpCi0g
ICAgICAgICAgICByZXN1bHQgPSBwcmVtdWx0aXBseUZsb29yaW5nKHJlc3VsdCk7CisgICAgICAg
ICAgICByZXN1bHQgPSBwcmVtdWx0aXBsaWVkRmxvb3JpbmcocmVzdWx0KTsKIAotICAgICAgICBy
ZXR1cm4gcmVzdWx0LnZhbHVlQXNBUkdCKCk7CisgICAgICAgIHJldHVybiBhc0FSR0IocmVzdWx0
KS52YWx1ZTsKICAgICB9CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudD4g
bV9waXhlbHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVD
b2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlGbG9vcmluZyhTaW1wbGVDb2xv
ciBjb2xvcikKLXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwotICAgIGlmICghYSB8
fCBhID09IDI1NSkKLSAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3IoZmFzdERpdmlkZUJ5MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFz
dERpdmlkZUJ5MjU1KGIgKiBhKSwgYSk7Ci19Ci0KLVNpbXBsZUNvbG9yIHByZW11bHRpcGx5Q2Vp
bGluZyhTaW1wbGVDb2xvciBjb2xvcikKLXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9y
OwotICAgIGlmICghYSB8fCBhID09IDI1NSkKLSAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgMjU0KSwgZmFzdERp
dmlkZUJ5MjU1KGcgKiBhICsgMjU0KSwgZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsgMjU0KSwgYSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDE2X3QgdW5wcmVtdWx0aXBseUNoYW5uZWwodWludDhf
dCBjLCB1aW50OF90IGEpCi17Ci0gICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEg
LSAxKSAvIGE7Ci19Ci0KLVNpbXBsZUNvbG9yIHVucHJlbXVsdGlwbHkoU2ltcGxlQ29sb3IgY29s
b3IpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKLSAgICBpZiAoIWEgfHwgYSA9
PSAyNTUpCi0gICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KHVucHJlbXVsdGlwbHlDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5lbChnLCBhKSwg
dW5wcmVtdWx0aXBseUNoYW5uZWwoYiwgYSksIGEpOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Q29sb3IuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDcgQEAgcHVi
bGljOgogICAgIGNvbnN0ZXhwciB1aW50MzJfdCB2YWx1ZUFzQVJHQigpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWU7IH0KICAgICBjb25zdGV4cHIgdWludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CiAKLSAgICBjb25zdGV4cHIgdWludDhfdCByZWRDb21wb25lbnQoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9Ci0gICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5D
b21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDg7IH0KLSAgICBjb25zdGV4cHIg
dWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNv
bnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+
PiAyNDsgfQotCiAgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNv
bnN0IHsgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpOyB9
CiAKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhhQ29t
cG9uZW50KCkgPT0gMHhGRjsgfQpAQCAtNjIsNyArNTgsMTMgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGIC0gcmVkQ29tcG9uZW50KCkpLCBzdGF0
aWNfY2FzdDx1aW50OF90PigweEZGIC0gZ3JlZW5Db21wb25lbnQoKSksIHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KDB4RkYgLSBibHVlQ29tcG9uZW50KCkpLCBhbHBoYSB9OwogICAgIH0KIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBhc1NSR0JBKCkgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWVfdjxULCBmbG9hdD4p
CisgICAgICAgICAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChyZWRDb21wb25l
bnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9uZW50KCkpLCBjb252ZXJ0
VG9Db21wb25lbnRGbG9hdChibHVlQ29tcG9uZW50KCkpLCAgY29udmVydFRvQ29tcG9uZW50Rmxv
YXQoYWxwaGFDb21wb25lbnQoKSkgfTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQorICAgICAgICAgICAgcmV0dXJuIHsgcmVkQ29tcG9uZW50
KCksIGdyZWVuQ29tcG9uZW50KCksIGJsdWVDb21wb25lbnQoKSwgYWxwaGFDb21wb25lbnQoKSB9
OworICAgIH0KIAogICAgIHRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CiAgICAgY29uc3RleHByIHVp
bnQ4X3QgZ2V0KCkgY29uc3QKQEAgLTc5LDYgKzgxLDEwIEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6CisgICAgY29uc3RleHByIHVpbnQ4X3QgcmVkQ29tcG9uZW50KCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZSA+PiAxNjsgfQorICAgIGNvbnN0ZXhwciB1aW50OF90IGdyZWVuQ29tcG9uZW50
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiA4OyB9CisgICAgY29uc3RleHByIHVpbnQ4X3Qg
Ymx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKwogICAgIHVpbnQzMl90
IG1fdmFsdWUgeyAwIH07CiB9OwogCkBAIC05MCwxMyArOTYsOSBAQCBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+Jik7CiBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3IoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKLVNpbXBsZUNvbG9yIHByZW11bHRpcGx5Rmxvb3Jp
bmcoU2ltcGxlQ29sb3IpOwotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlDZWlsaW5nKFNpbXBsZUNv
bG9yKTsKLVNpbXBsZUNvbG9yIHVucHJlbXVsdGlwbHkoU2ltcGxlQ29sb3IpOwotCiBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEsIFNpbXBsZUNvbG9yIGIpCiB7Ci0gICAgcmV0
dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7CisgICAgcmV0dXJuIGEudmFsdWVBc0FSR0IoKSA9
PSBiLnZhbHVlQXNBUkdCKCk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29s
b3IgYSwgU2ltcGxlQ29sb3IgYikKQEAgLTExNiwyNSArMTE4LDE0IEBAIGNvbnN0ZXhwciBTaW1w
bGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW4KIAogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvcihjb25zdCBTUkdCQTx1aW50OF90PiYgc1JHQkEpCiB7Ci0gICAgYXV0byBbciwg
ZywgYiwgYV0gPSBzUkdCQTsKLSAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CisgICAgcmV0dXJu
IHsgc1JHQkEucmVkLCBzUkdCQS5ncmVlbiwgc1JHQkEuYmx1ZSwgc1JHQkEuYWxwaGEgfTsKIH0K
IAogaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4m
IHNSR0JBKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc1JHQkE7Ci0gICAgcmV0dXJuIHsg
Y29udmVydFRvQ29tcG9uZW50Qnl0ZShyKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShnKSwgY29u
dmVydFRvQ29tcG9uZW50Qnl0ZShiKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShhKSB9OworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoc1JHQkEpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IFNpbXBsZUNvbG9y
Ojphc1NSR0JBKCkgY29uc3QKLXsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfZmxvYXRpbmdf
cG9pbnRfdjxUPikKLSAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQocmVk
Q29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBvbmVudCgpKSwg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4g
eyByZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwgYmx1ZUNvbXBvbmVudCgpLCBhbHBo
YUNvbXBvbmVudCgpIH07Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3Bh
Y2Ugc3RkIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29h
L1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0J
KHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzk2
LDcgKzM5Niw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmEKIHsK
ICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgIFtzdGF0
aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1
ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAtNDM5LDcgKzQzOSw3IEBAIHZv
aWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHUKIHsKICAgICBpZiAoIWlzQmFz
aWNBbmltYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2lj
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QFtAKHIpLCBAKGcpLCBA
KGIpLCBAKGEpXV07CiB9CiAKQEAgLTQ5Niw3ICs0OTYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYTo6c2V0VmFsdWVzCiAgICAgICAgIHJldHVybjsKIAogICAgIFtzdGF0aWNfY2Fz
dDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVh
dGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29sb3IpIHsKLSAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBjb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGNvbG9yLnRlbXBsYXRlIHRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAg
ICAgICByZXR1cm4gQFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXTsKICAgICB9KS5nZXQoKV07CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUFuaW1hdGlvbldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUFuaW1hdGlvbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw4ICszNjcsOCBAQCB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEZyb21WYWx1CiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzaW1wbGVDb2xvciA9
IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgQ0dGbG9hdCBhWzRdID0geyBz
aW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwg
c2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgp
IH07CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CisgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwg
Y29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgUmV0YWluUHRyPENBQ0ZW
ZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZB
bmltYXRpb25TZXRGcm9tVmFsdWUobV9hbmltYXRpb24uZ2V0KCksIHYuZ2V0KCkpOwogfQpAQCAt
NDE5LDggKzQxOSw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VG9WYWx1ZSgK
ICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIHNpbXBsZUNvbG9yID0gdmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAg
ICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xv
ci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNv
bG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZS50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVk
LCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsK
ICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0
ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldFRvVmFsdWUobV9hbmltYXRpb24uZ2V0KCks
IHYuZ2V0KCkpOwogfQpAQCAtNDg5LDggKzQ4OSw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bldpbjo6c2V0VmFsdWVzKGMKICAgICAgICAgCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5
UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgp
LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvIHNpbXBsZUNvbG9yID0gdmFsdWVbaV0u
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1w
bGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2lt
cGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07
CisgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlW2ldLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRz
LmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICAgICAgUmV0
YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkp
OwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXkuZ2V0KCksIHYuZ2V0KCkpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lkIGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWly
b190KiBzcmNDCiAKIHZvaWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBjb250ZXh0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50
b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dCwgciwgZywgYiwg
YSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ry
b3koKQogCiBzdGF0aWMgdm9pZCBhZGRDb2xvclN0b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3Jh
ZGllbnQsIEdyYWRpZW50OjpDb2xvclN0b3Agc3RvcCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAg
Y2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwg
ciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIApAQCAtNTUsNyArNTUsNyBAQCB0eXBlZGVm
IHN0cnVjdCBwb2ludF90IHsKIAogc3RhdGljIHZvaWQgc2V0Q29ybmVyQ29sb3JSR0JBKGNhaXJv
X3BhdHRlcm5fdCogZ3JhZGllbnQsIGludCBpZCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBm
bG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3Iu
dG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19tZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xv
cl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0KIApAQCAt
MTM1LDggKzEzNSw4IEBAIHN0YXRpYyB2b2lkIGFkZENvbmljU2VjdG9yKGNhaXJvX3BhdHRlcm4K
IAogc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3AoR3JhZGll
bnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9wIHRvKQogewotICAgIGF1dG8g
W3IxLCBnMSwgYjEsIGExXSA9IGZyb20uY29sb3IudG9TUkdCQUxvc3N5KCk7Ci0gICAgYXV0byBb
cjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbcjEs
IGcxLCBiMSwgYTFdID0gZnJvbS5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0
byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogCiAg
ICAgZmxvYXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZzZXQp
ICogMC41ZjsKICAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVmOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw5ICs4MCw5IEBAIHZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQKICAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVk
Kj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1f
bG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwg
PSByb3cgKyB4OwotICAgICAgICAgICAgYXV0byBwaXhlbENvbG9yID0gdW5wcmVtdWx0aXBseShT
aW1wbGVDb2xvciB7ICpwaXhlbCB9KTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKV0sIGxvb2tVcFRh
YmxlW3BpeGVsQ29sb3IuZ3JlZW5Db21wb25lbnQoKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3Iu
Ymx1ZUNvbXBvbmVudCgpXSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsKLSAgICAgICAg
ICAgICpwaXhlbCA9IHByZW11bHRpcGx5Q2VpbGluZyhwaXhlbENvbG9yKS52YWx1ZUFzQVJHQigp
OworICAgICAgICAgICAgYXV0byBwaXhlbENvbXBvbmVudHMgPSB1bnByZW11bHRpcGxpZWQoYXNT
UkdCQShBUkdCIHsgKnBpeGVsIH0pKTsKKyAgICAgICAgICAgIHBpeGVsQ29tcG9uZW50cyA9IHsg
bG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLnJlZF0sIGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9u
ZW50cy5ncmVlbl0sIGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5ibHVlXSwgcGl4ZWxDb21w
b25lbnRzLmFscGhhIH07CisgICAgICAgICAgICAqcGl4ZWwgPSBhc0FSR0IocHJlbXVsdGlwbGll
ZENlaWxpbmcocGl4ZWxDb21wb25lbnRzKSkudmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Y2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAs
IG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9O
YXRpdmVJbWFnZUNhaXJvLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU0LDcgKzU0LDcgQEAgQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29s
b3IoYwogICAgICAgICByZXR1cm4gQ29sb3IoKTsKIAogICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsg
KnBpeGVsIH0pOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBsaWVkKGFz
U1JHQkEoQVJHQiB7ICpwaXhlbCB9KSkpOwogfQogCiB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25z
dCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGln
aHRpbmdORU9OLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0
aW5nTkVPTi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTEgKzExMSwxMSBAQCBpbmxpbmUgdm9p
ZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVvCiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBh
cmd1bWVudHMuCiAgICAgZmxvYXRBcmd1bWVudHMuY29uc3RPbmUgPSAxOwogCi0gICAgYXV0byBz
aW1wbGVDb2xvciA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
ICAgIGF1dG8gY29sb3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CiAKLSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVu
dCgpOwotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBzaW1wbGVDb2xvci5ncmVlbkNv
bXBvbmVudCgpOwotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yQmx1ZSA9IHNpbXBsZUNvbG9yLmJs
dWVDb21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJlZCA9IGNvbG9yLnJlZDsK
KyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gY29sb3IuZ3JlZW47CisgICAgZmxvYXRB
cmd1bWVudHMuY29sb3JCbHVlID0gY29sb3IuYmx1ZTsKICAgICBmbG9hdEFyZ3VtZW50cy5wYWRk
aW5nNCA9IDA7CiAKICAgICBpZiAobV9saWdodFNvdXJjZS0+dHlwZSgpID09IExTX1BPSU5UKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwNSwxMCArNDA1LDEwIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4
Q2xhbXAKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKICAgICAK
ICAgICBpZiAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikg
ewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0Nv
bG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0xpbmVh
clNSR0JBKG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogICAgICAgICBw
YWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQz
RChyLCBnLCBiKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1f
bGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgICAgICBwYWludGlu
Z0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBn
LCBiKTsKICAgICB9CiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywg
cGFpbnRpbmdEYXRhKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wg
RmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3JtQ29sb3IoQ28KICAgICBpZiAoY29sb3IuaXNTZW1h
bnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBj
b2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCk7CiAKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9u
cykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+dHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikp
CkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNm
b3JtQwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8g
c1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKIAogICAgIGZvciAoYXV0
byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT5p
bnZlcnNlVHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHJldmlzaW9uIDI2Mzkx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JH
QkEmIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSgpIGNvbnN0CiB7Ci0gICAgYXV0
byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
Qm9yZGVyKGNvbnN0IEMKICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dy
YW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
U29saWRDb2xvcik7CiAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9zc3ko
KSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFM
b3NzeTxmbG9hdD4oKSk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigp
LCByLCBnLCBiLCBhKTsKICAgICBnbExpbmVXaWR0aCh3aWR0aCk7CiAKQEAgLTI3NSw3ICsyNzUs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd051bWJlcihpbnQgbnVtCiAgICAgY2Fpcm9f
dCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CiAKICAgICAvLyBTaW5jZSB3ZSB3b24ndCBz
d2FwIFIrQiB3aGVuIHVwbG9hZGluZyBhIHRleHR1cmUsIHBhaW50IHdpdGggdGhlIHN3YXBwZWQg
UitCIGNvbG9yLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7
CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAg
ICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBiLCBnLCByLCBhKTsKIAogICAgIGNhaXJvX3Jl
Y3RhbmdsZShjciwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CkBAIC00MTQsNyArNDE0LDcgQEAgc3Rh
dGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRo
ZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgot
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xv
cigpLnRvU1JHQkFMb3NzeSgpKTsKKyAgICAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJl
bXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogICAgICAg
ICAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwog
ICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwg
c2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICAg
ICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAg
LTY3Niw3ICs2NzYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29u
CiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdl
dFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAgZ2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dy
YW1JRCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50
b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29s
b3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBpZiAoYSA8IDEgJiYgaXNCbGVuZGluZ0Fs
bG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5kOwpAQCAtNjg2LDcgKzY4Niw3IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KIAogdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmNsZWFyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0g
PSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIs
IGEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCwxMyBA
QCBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgRDJE
MV9DT0xPUl9GKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3Nz
eSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAg
IHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSk7CiB9CiAKIENvbG9yOjpvcGVyYXRvciBE
MkQxX1ZFQ1RPUl80RigpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JB
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsK
ICAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYociwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnRE
aXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIs
NyArNzIsNyBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuCiAgICAg
VmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9wczsKICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCiAgICAgZm9yIChhdXRvIHN0b3AgOiBtX3N0
b3BzKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdIHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpOwogICAgICAgICBncmFkaWVudFN0b3BzLmFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Ao
c3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKSkpOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdE
b3RzRm9yRG9jdW1lbgogICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZ3JhbW1hclBh
dHRlcm5Db2xvciB7IG1ha2VTaW1wbGVDb2xvcigwLCAxMjgsIDApIH07CiAKICAgICBjb25zdCBT
aW1wbGVDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1tYXJQYXR0ZXJuQ29sb3IgOiBzcGVsbGluZ1Bh
dHRlcm5Db2xvcjsKLSAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCBwYXR0
ZXJuQ29sb3IucmVkQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ncmVlbkNvbXBvbmVudCgpLCBw
YXR0ZXJuQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuYWxwaGFDb21wb25lbnQo
KSk7CisgICAgYXV0byBwYXR0ZXJuQ29sb3JDb21wb25lbnRzID0gcGF0dGVybkNvbG9yLmFzU1JH
QkE8dWludDhfdD4oKTsKKyAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCBw
YXR0ZXJuQ29sb3JDb21wb25lbnRzLnJlZCwgcGF0dGVybkNvbG9yQ29tcG9uZW50cy5ncmVlbiwg
cGF0dGVybkNvbG9yQ29tcG9uZW50cy5ibHVlLCBwYXR0ZXJuQ29sb3JDb21wb25lbnRzLmFscGhh
KTsKIAogICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RN
KGNvbnRleHQpOwogICAgIENHUG9pbnQgcGhhc2UgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zv
cm0ocG9pbnQsIHVzZXJUb0Jhc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
Y3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzks
NyArMzc5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJvdAogCiBE
MkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBD
b2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NS
R0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1
cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAyLDcgKzE0MDIsNyBA
QCBDb2xvciBSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IoY29uCiAgICAgLy8gSWYgdGhl
cmUncyBub3QgdmVyeSBtdWNoIGNvbnRyYXN0IGJldHdlZW4gdGhlIGRpc2FibGVkIGNvbG9yIGFu
ZCB0aGUgYmFja2dyb3VuZCBjb2xvciwKICAgICAvLyBqdXN0IGxlYXZlIHRoZSB0ZXh0IGNvbG9y
IGFsb25lLiBXZSBkb24ndCB3YW50IHRvIGNoYW5nZSBhIGdvb2QgY29udHJhc3QgY29sb3Igc2No
ZW1lIHNvIHRoYXQgaXQgaGFzIHJlYWxseSBiYWQgY29udHJhc3QuCiAgICAgLy8gSWYgdGhlIGNv
bnRyYXN0IHdhcyBhbHJlYWR5IHBvb3IsIHRoZW4gaXQgZG9lc24ndCBkbyBhbnkgZ29vZCB0byBj
aGFuZ2UgaXQgdG8gYSBkaWZmZXJlbnQgcG9vciBjb250cmFzdCBjb2xvciBzY2hlbWUuCi0gICAg
aWYgKGNvbnRyYXN0UmF0aW8oZGlzYWJsZWRDb2xvci50b1NSR0JBTG9zc3koKSwgYmFja2dyb3Vu
ZENvbG9yLnRvU1JHQkFMb3NzeSgpKSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKKyAgICBpZiAo
Y29udHJhc3RSYXRpbyhkaXNhYmxlZENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSwgYmFja2dy
b3VuZENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUp
CiAgICAgICAgIHJldHVybiB0ZXh0Q29sb3I7CiAKICAgICByZXR1cm4gZGlzYWJsZWRDb2xvcjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw3ICsxMDU1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRCdXR0b25EZWNvcmF0aQogc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29udmV4R3JhZGll
bnQoY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVtaW5hbmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBmbG9hdCBsYXJn
ZXN0Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIHJldHVybiBh
ID4gMC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPCAwLjU7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDcgKzYzLDcgQEAgYm9vbCB0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFj
a2dyb3VuZAogewogICAgIC8vIFVzZXMgdGhlIFdDQUcgMi4wIGRlZmluaXRpb24gb2YgbGVnaWJp
bGl0eTogYSBjb250cmFzdCByYXRpbyBvZiA0LjU6MSBvciBncmVhdGVyLgogICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdAot
ICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSwgYmFja2dy
b3VuZENvbG9yLnRvU1JHQkFMb3NzeSgpKSA+IDQuNTsKKyAgICByZXR1cm4gY29udHJhc3RSYXRp
byh0ZXh0Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdC
QUxvc3N5PGZsb2F0PigpKSA+IDQuNTsKIH0KIAogc3RhdGljIENvbG9yIGFkanVzdENvbG9yRm9y
VmlzaWJpbGl0eU9uQmFja2dyb3VuZChjb25zdCBDb2xvciYgdGV4dENvbG9yLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5j
dGlvbkltcGwuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MSwxNSArODEsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBhbmltYXRlKFNWR0Vs
ZW1lbnQqLCBmbG9hdCBwcm9ncmVzcywgdW5zaWduZWQgcmVwZWF0Q291bnQsIENvbG9yJiBhbmlt
YXRlZCkKICAgICB7Ci0gICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1h
dGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1
cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
ICAgICAgICBhdXRvIHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0ZWQudG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmlt
YXRpb25Nb2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50
OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhf
dD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbiA9IHRvQXRFbmRPZkR1
cmF0aW9uKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIAotICAgICAgICBmbG9h
dCByZWQgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5y
ZWRDb21wb25lbnQoKSwgc2ltcGxlVG8ucmVkQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1
cmF0aW9uLnJlZENvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5yZWRDb21wb25lbnQoKSk7Ci0g
ICAgICAgIGZsb2F0IGdyZWVuID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQs
IHNpbXBsZUZyb20uZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSwg
c2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQu
Z3JlZW5Db21wb25lbnQoKSk7Ci0gICAgICAgIGZsb2F0IGJsdWUgPSBCYXNlOjphbmltYXRlKHBy
b2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50KCksIHNpbXBsZVRv
LmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1ZUNvbXBvbmVudCgp
LCBzaW1wbGVBbmltYXRlZC5ibHVlQ29tcG9uZW50KCkpOwotICAgICAgICBmbG9hdCBhbHBoYSA9
IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmFscGhhQ29t
cG9uZW50KCksIHNpbXBsZVRvLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0
aW9uLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmFscGhhQ29tcG9uZW50KCkpOwor
ICAgICAgICBmbG9hdCByZWQgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwg
c2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLnJlZCwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVk
LCBzaW1wbGVBbmltYXRlZC5yZWQpOworICAgICAgICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1h
dGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmdyZWVuLCBzaW1wbGVUby5ncmVl
biwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uZ3JlZW4sIHNpbXBsZUFuaW1hdGVkLmdyZWVuKTsK
KyAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50
LCBzaW1wbGVGcm9tLmJsdWUsIHNpbXBsZVRvLmJsdWUsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9u
LmJsdWUsIHNpbXBsZUFuaW1hdGVkLmJsdWUpOworICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6
OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmFscGhhLCBzaW1wbGVU
by5hbHBoYSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGEsIHNpbXBsZUFuaW1hdGVkLmFs
cGhhKTsKICAgICAgICAgCiAgICAgICAgIGFuaW1hdGVkID0gbWFrZVNpbXBsZUNvbG9yKHJvdW5k
QW5kQ2xhbXBDb2xvckNoYW5uZWwocmVkKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChncmVl
biksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYmx1ZSksIHJvdW5kQW5kQ2xhbXBDb2xvckNo
YW5uZWwoYWxwaGEpKTsKICAgICB9CkBAIC0xMDMsMTIgKzEwMywxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAg
ICAgICAgICAgCi0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgICAgICBhdXRvIHNpbXBsZVRvID0gdG9Db2xvci50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3Iu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9y
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCi0gICAgICAgIGZsb2F0IHJlZCA9IHNpbXBsZUZy
b20ucmVkQ29tcG9uZW50KCkgLSBzaW1wbGVUby5yZWRDb21wb25lbnQoKTsKLSAgICAgICAgZmxv
YXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkgLSBzaW1wbGVUby5ncmVlbkNv
bXBvbmVudCgpOwotICAgICAgICBmbG9hdCBibHVlID0gc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50
KCkgLSBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCk7CisgICAgICAgIGZsb2F0IHJlZCA9IHNpbXBs
ZUZyb20ucmVkIC0gc2ltcGxlVG8ucmVkOworICAgICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZy
b20uZ3JlZW4gLSBzaW1wbGVUby5ncmVlbjsKKyAgICAgICAgZmxvYXQgYmx1ZSA9IHNpbXBsZUZy
b20uYmx1ZSAtIHNpbXBsZVRvLmJsdWU7CiAKICAgICAgICAgcmV0dXJuIHN0ZDo6aHlwb3QocmVk
LCBncmVlbiwgYmx1ZSk7CiAgICAgfQpAQCAtMTI2LDE0ICsxMjYsMTQgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNWR0VsZW1lbnQqKSBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhf
dD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CiAKICAgICAgICAgLy8gSWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVz
dWx0IHRvIDEwMCUgb3BhcXVlLgogICAgICAgICBtX3RvID0gbWFrZVNpbXBsZUNvbG9yKAotICAg
ICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5yZWRDb21wb25lbnQo
KSArIHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5ncmVl
bkNvbXBvbmVudCgpKSwKLSAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2lt
cGxlVG8uYmx1ZUNvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50KCkpCisgICAg
ICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLnJlZCArIHNpbXBsZUZy
b20ucmVkKSwKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8u
Z3JlZW4gKyBzaW1wbGVGcm9tLmdyZWVuKSwKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoc2ltcGxlVG8uYmx1ZSArIHNpbXBsZUZyb20uYmx1ZSkKICAgICAgICAgKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIwLTA3LTAzICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29s
b3IgYW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNv
bnZlcmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlLm1tOgorICAgICAgICAoV2ViS2l0OjphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFt
ZVZhbHVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOgorICAg
ICAgICBBZGFwdCB0byB1c2UgdGVtcGxhdGl6ZWQgdG9TUkdCQUxvc3N5PGZsb2F0L3VpbnQ4X3Q+
LgorCiAyMDIwLTA3LTAzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgc3VwcG9ydCBmb3IgRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVU
RQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xv
ci5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQg
d2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcihjb24KIHsKICAgICBSRUxFQVNFX0FTU0VS
VCh3ZWJDb3JlQ29sb3IuaXNWYWxpZCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2Vi
Q29yZUNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29y
ZUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjb2xvci0+cmVkID0gcjsKICAgICBj
b2xvci0+Z3JlZW4gPSBnOwogICAgIGNvbG9yLT5ibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsu
Y3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmll
d0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDcgKzMzOCw3
IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2UKICAgICAgICAgaWYg
KGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJy
ZW50U25hcHNob3QgPSBjb2xvcjsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50U3dpcGVTbmFw
c2hvdFBhdHRlcm4pIHsKLSAgICAgICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgICAgICAgICBhdXRvIFtyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4gPSBhZG9wdFJlZihjYWly
b19wYXR0ZXJuX2NyZWF0ZV9yZ2JhKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU2LDcgKzY1
Niw3IEBAIGJvb2wgV2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG8KICAgICBpZiAo
IWJnQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICAqcmVkID0gcjsKICAgICAq
Z3JlZW4gPSBnOwogICAgICpibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCShyZXZpc2lvbiAyNjM5MTgpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIHN0
YXRpYyBOU09iamVjdCogYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnIKICAgICAgICAgcmV0dXJuIEAo
a2V5ZnJhbWVWYWx1ZS5udW1iZXJWYWx1ZSgpKTsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6Q29sb3JLZXlUeXBlOiB7Ci0g
ICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCkudG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBrZXlm
cmFtZVZhbHVlLmNvbG9yVmFsdWUoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICAgICAg
cmV0dXJuIEBbIEAociksIEAoZyksIEAoYiksIEAoYSkgXTsKICAgICB9CiAKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mzky
NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDIwLTA3LTAzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0
IDEgb2YgU2ltcGxlQ29sb3IgYW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUg
c2FtZSAtIGxldCdzIGNvbnZlcmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVz
dHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgQWRhcHQgdGVzdHMgdG8gdXNlIHRlbXBsYXRp
emVkIHRvU1JHQkFMb3NzeTxmbG9hdC91aW50OF90Pi4KKwogMjAyMC0wNy0wMyAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIEVOQUJM
RV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9XaGl0ZSkK
IHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjp3aGl0ZTsKIAotICAgIGF1dG8gaHNsYUNvbG9y
ID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRv
SFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0
dXJhdGlvbik7CkBAIC01NCw3ICs1NCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQog
ewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmJsYWNrOwogCi0gICAgYXV0byBoc2xhQ29sb3Ig
PSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9I
U0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1
cmF0aW9uKTsKQEAgLTcwLDcgKzcwLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogewog
ICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCk7CiAKLSAgICBhdXRv
IGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xh
Q29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVD
VF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtODYsNyArODYsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9HcmVlbikKIHsKICAgICBDb2xvciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDAp
OwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOwor
ICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC4zMzMzMzMzNCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAg
RVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTEwMiw3ICsxMDIs
NyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogewogICAgIENvbG9yIGNvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShj
b2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLjY2NjY2NjY5
LCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNhdHVy
YXRpb24pOwpAQCAtMTE4LDcgKzExOCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0RhcmtHcmF5
KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmRhcmtHcmF5OwogCi0gICAgYXV0byBoc2xh
Q29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9y
ID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xv
ci5zYXR1cmF0aW9uKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9H
cmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmdyYXk7CiAKLSAgICBhdXRvIGhzbGFD
b2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3Ig
PSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9B
VF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9y
LnNhdHVyYXRpb24pOwpAQCAtMTUwLDcgKzE1MCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0xp
Z2h0R3JheSkKIHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpsaWdodEdyYXk7CiAKLSAgICBh
dXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBo
c2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVY
UEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwg
aHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTgzLDI5ICsxODMsMjkgQEAgVEVTVChDb2xvciwg
VmFsaWRpdHkpCiAgICAgdmFsaWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxLCAyLCAzLCA0KTsK
ICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBhdXRvIHNpbXBsZVZhbGlkQ29sb3IgPSB2
YWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgRVhQRUNUX0VRKHNpbXBs
ZVZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxp
ZENvbG9yLmdyZWVuQ29tcG9uZW50KCksIDIpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENv
bG9yLmJsdWVDb21wb25lbnQoKSwgMyk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3Iu
YWxwaGFDb21wb25lbnQoKSwgNCk7CisgICAgYXV0byB2YWxpZENvbG9yQ29tcG9uZW50cyA9IHZh
bGlkQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0VRKHZhbGlkQ29s
b3JDb21wb25lbnRzLnJlZCwgMSk7CisgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRz
LmdyZWVuLCAyKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMuYmx1ZSwgMyk7
CisgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLmFscGhhLCA0KTsKIAogICAgIENv
bG9yIHlldEFub3RoZXJWYWxpZENvbG9yKFdURk1vdmUodmFsaWRDb2xvcikpOwogICAgIEVYUEVD
VF9UUlVFKHlldEFub3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KHlldEFub3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzaW1wbGVZZXRB
bm90aGVyVmFsaWRDb2xvciA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLnJlZENv
bXBvbmVudCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3Iu
Z3JlZW5Db21wb25lbnQoKSwgMik7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxp
ZENvbG9yLmJsdWVDb21wb25lbnQoKSwgMyk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3Ro
ZXJWYWxpZENvbG9yLmFscGhhQ29tcG9uZW50KCksIDQpOworICAgIGF1dG8geWV0QW5vdGhlclZh
bGlkQ29sb3JDb21wb25lbnRzID0geWV0QW5vdGhlclZhbGlkQ29sb3IudG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CisgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5y
ZWQsIDEpOworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3Jl
ZW4sIDIpOworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuYmx1
ZSwgMyk7CisgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5hbHBo
YSwgNCk7CiAKICAgICBvdGhlclZhbGlkQ29sb3IgPSBXVEZNb3ZlKHlldEFub3RoZXJWYWxpZENv
bG9yKTsKICAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBF
WFBFQ1RfRkFMU0Uob3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzaW1w
bGVPdGhlclZhbGlkQ29sb3IgPSBvdGhlclZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLnJlZENvbXBvbmVudCgp
LCAxKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmdyZWVuQ29tcG9uZW50
KCksIDIpOwotICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVu
dCgpLCAzKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmFscGhhQ29tcG9u
ZW50KCksIDQpOworICAgIGF1dG8gb3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cyA9IG90aGVyVmFs
aWRDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEob3RoZXJWYWxp
ZENvbG9yQ29tcG9uZW50cy5yZWQsIDEpOworICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JD
b21wb25lbnRzLmdyZWVuLCAyKTsKKyAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9u
ZW50cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5h
bHBoYSwgNCk7CiB9CiAKIFRFU1QoQ29sb3IsIEx1bWluYW5jZSkKQEAgLTIxNiwyMSArMjE2LDIy
IEBAIFRFU1QoQ29sb3IsIEx1bWluYW5jZSkKICAgICBhdXRvIGMgPSBtYWtlU2ltcGxlQ29sb3Io
ODUsIDkwLCAxNjApOwogICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjKS5sdW1pbmFuY2UoKSwg
MC4xMTc4MTY5Mik7CiAKLSAgICBFWFBFQ1RfRVEoYy5yZWRDb21wb25lbnQoKSwgODUpOwotICAg
IEVYUEVDVF9FUShjLmdyZWVuQ29tcG9uZW50KCksIDkwKTsKLSAgICBFWFBFQ1RfRVEoYy5ibHVl
Q29tcG9uZW50KCksIDE2MCk7Ci0KLSAgICBhdXRvIGNMaWd0ZW5lZCA9IENvbG9yKGMpLmxpZ2h0
ZW5lZCgpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKENv
bG9yKGNMaWd0ZW5lZCkubHVtaW5hbmNlKCksIDAuMjkxNjg4MDgpOwotICAgIEVYUEVDVF9FUShj
TGlndGVuZWQucmVkQ29tcG9uZW50KCksIDEzMCk7Ci0gICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5n
cmVlbkNvbXBvbmVudCgpLCAxMzcpOwotICAgIEVYUEVDVF9FUShjTGlndGVuZWQuYmx1ZUNvbXBv
bmVudCgpLCAyNDQpOwotCi0gICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjKS5kYXJrZW5lZCgp
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKGNE
YXJrZW5lZCkubHVtaW5hbmNlKCksIDAuMDI3MDA2NzI3KTsKLSAgICBFWFBFQ1RfRVEoY0Rhcmtl
bmVkLnJlZENvbXBvbmVudCgpLCA0MCk7Ci0gICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ncmVlbkNv
bXBvbmVudCgpLCA0Myk7Ci0gICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ibHVlQ29tcG9uZW50KCks
IDc2KTsKKyAgICBhdXRvIGNDb21wb25lbnRzID0gYy5hc1NSR0JBPHVpbnQ4X3Q+KCk7CisgICAg
RVhQRUNUX0VRKGNDb21wb25lbnRzLnJlZCwgODUpOworICAgIEVYUEVDVF9FUShjQ29tcG9uZW50
cy5ncmVlbiwgOTApOworICAgIEVYUEVDVF9FUShjQ29tcG9uZW50cy5ibHVlLCAxNjApOworCisg
ICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjKS5saWdodGVuZWQoKS50b1NSR0JBTG9zc3k8dWlu
dDhfdD4oKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IobWFrZVNpbXBsZUNvbG9yKGNMaWd0
ZW5lZCkpLmx1bWluYW5jZSgpLCAwLjI5MTY4ODA4KTsKKyAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVk
LnJlZCwgMTMwKTsKKyAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmdyZWVuLCAxMzcpOworICAgIEVY
UEVDVF9FUShjTGlndGVuZWQuYmx1ZSwgMjQ0KTsKKworICAgIGF1dG8gY0RhcmtlbmVkID0gQ29s
b3IoYykuZGFya2VuZWQoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoQ29sb3IobWFrZVNpbXBsZUNvbG9yKGNEYXJrZW5lZCkpLmx1bWluYW5jZSgpLCAwLjAy
NzAwNjcyNyk7CisgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5yZWQsIDQwKTsKKyAgICBFWFBFQ1Rf
RVEoY0RhcmtlbmVkLmdyZWVuLCA0Myk7CisgICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5ibHVlLCA3
Nik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMu
Y3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3
IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogICAgIENvbG9yIHAz
Q29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgpKTsK
IAotICAgIGF1dG8gc1JHQkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0
byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgRVhQRUNU
X1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IucmVkLCAxLjBmKSk7CiAg
ICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuZ3JlZW4s
IDAuNDYyNTM3ODg1ZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVh
bChzUkdCQUNvbG9yLmJsdWUsIDAuMTQ5MTQ3ODM4ZikpOwpAQCAtMjUyLDcgKzI1Miw3IEBAIFRF
U1QoRXh0ZW5kZWRDb2xvciwgTGluZWFyU1JHQkNvbnZlcnNpb24KIHsKICAgICBDb2xvciBsaW5l
YXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNw
YWNlOjpMaW5lYXJSR0IpIH07CiAgICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRl
ZCgpKTsKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3koKTsK
KyAgICBhdXRvIHNSR0JBQ29sb3IgPSBsaW5lYXJDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IucmVk
LCAxLjBmKSk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JB
Q29sb3IuZ3JlZW4sIDAuNzM1MzU2OTI3ZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNz
ZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmJsdWUsIDAuNTM3MDk4NzA2ZikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403514</attachid>
            <date>2020-07-04 01:20:29 -0700</date>
            <delta_ts>2020-07-04 06:23:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213948-20200704012027.patch</filename>
            <type>text/plain</type>
            <size>72660</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodGVuZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmRhcmtlbmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsaWdodG5lc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omx1bWluYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VtYW50aWNDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3kgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRTb3VyY2VP
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmg6CisgICAgICAgIChXZWJD
b3JlOjphc0FSR0IpOgorICAgICAgICAoV2ViQ29yZTo6YXNTUkdCQSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRGbG9vcmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2VpbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjp1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29t
cG9uZW50Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29tcG9uZW50RmxvYXRz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBpeGVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNv
bG9yOjphbHBoYUNvbXBvbmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xv
cjo6YXNTUkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVkQ29t
cG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpncmVlbkNvbXBv
bmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Ymx1ZUNvbXBvbmVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHA6CisgICAgICAgIChQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0VG9WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseU5lb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQ29sb3IgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6ZGlzYWJsZWRUZXh0Q29sb3IgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNob3Vs
ZFVzZUNvbnZleEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmRDb2xvcik6CisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uQ29sb3JG
dW5jdGlvbjo6YW5pbWF0ZSk6CisKIDIwMjAtMDctMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYkNvcmUvU291cmNlcy50eHQ6IFJlbW92ZSAjaWYgRU5BQkxF
X1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcwLDcgKzE5NzAsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtOTk4NCw3ICs5OTg0LDYgQEAKIAkJN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2
IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQWJvcnRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBE
OTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MzMEQ5ODIxRjgxNUFDMjAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBTaW1w
bGVDb2xvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVD
b2xvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzFDODhDMjQ3QUQ1OTUw
MDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVDb2xvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMTFE
RjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwMzFERjlFOTVCMDBEMzM5NUMgLyog
UG9zaXRpb25PcHRpb25zLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3NpdGlvbk9wdGlvbnMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjU2OTcsNyArMjU2OTYsNiBAQAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKIAkJCQkwRjNERDQ0RTEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5oICovLAotCQkJCTdDMzFDODhBMjQ3QUQ1OTQwMDVCRjMxOSAvKiBT
aW1wbGVDb2xvci5jcHAgKi8sCiAJCQkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBs
ZUNvbG9yLmggKi8sCiAJCQkJQ0Q2NDFFQjIxODE4RjVFRDAwRUU0QzQxIC8qIFNvdXJjZUJ1ZmZl
clByaXZhdGUuaCAqLywKIAkJCQlDREM4QjVBQzE4MDRBRTVEMDAxNkU2ODUgLyogU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgzLDEwICsxOTgzLDEwIEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KG5vZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gY29sb3IgPSBkb3du
Y2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1ZUFzQ29sb3IoKS50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0g
Y29sb3IuZ3JlZW5Db21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOwor
ICAgIGF1dG8gY29sb3IgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSgpKS52YWx1
ZUFzQ29sb3IoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOwor
ICAgIGcgPSBjb2xvci5ncmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKICNlbmRpZgogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE0ICs5MiwxNCBAQCBzdGF0aWMg
QXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXRGCiAKICAgICBDb2xvciBiZ0NvbG9yID0g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7
CiAgICAgaWYgKGJnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gYmdDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIGJ1ZmZl
ci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICBy
ZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0JHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CiAK
ICAgICBDb2xvciBmZ0NvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKICAgICBpZiAoZmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBmZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAg
ICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7
CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfRkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xh
dGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDEwICs3MDEsMTAgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0OjpzZXRQcmV2ZW50S2V5Ym9hcgogCiB2b2lkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmNvbG9yVmFsdWUoaW50JiByLCBpbnQmIGcsIGludCYgYikgY29uc3QKIHsKLSAgICBhdXRv
IGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSku
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7
Ci0gICAgZyA9IGNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWVDb21w
b25lbnQoKTsKKyAgICBhdXRvIGNvbG9yID0gY29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZTo6Q29sb3JWYWx1ZSkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgciA9IGNvbG9y
LnJlZDsKKyAgICBnID0gY29sb3IuZ3JlZW47CisgICAgYiA9IGNvbG9yLmJsdWU7CiB9CiAKIEFY
Q29yZU9iamVjdCogQVhJc29sYXRlZE9iamVjdDo6YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0
ZWRDU1NPTVJHQkNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RlcHJl
Y2F0ZWRDU1NPTVJHQkNvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYmx1ZSgp
IHsgcmV0dXJuIG1fYmx1ZTsgfQogICAgIERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBh
bHBoYSgpIHsgcmV0dXJuIG1fYWxwaGE7IH0KIAotICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAgIFNpbXBsZUNvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKG1fY29sb3IpOyB9CiAKIHByaXZhdGU6CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTnVtYmVyVHlwZT4gc3RhdGljIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRp
dmVWYWx1ZT4gY3JlYXRlV3JhcHBlcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgTnVtYmVy
VHlwZSBudW1iZXIpCkBAIC00NiwxNSArNDYsMTUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBE
ZXByZWNhdGVkQ1NTT01SR0JDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uJiBvd25lciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotICAgICAgICA6IG1fY29sb3IoY29sb3IudG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKSkKLSAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLnJl
ZENvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1f
Y29sb3IuZ3JlZW5Db21wb25lbnQoKSkpCi0gICAgICAgICwgbV9ibHVlKGNyZWF0ZVdyYXBwZXIo
b3duZXIsIG1fY29sb3IuYmx1ZUNvbXBvbmVudCgpKSkKLSAgICAgICAgLCBtX2FscGhhKGNyZWF0
ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkpKQorICAgICAg
ICA6IG1fY29sb3IoY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpCisgICAgICAgICwgbV9y
ZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5yZWQpKQorICAgICAgICAsIG1fZ3JlZW4o
Y3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbikpCisgICAgICAgICwgbV9ibHVlKGNy
ZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IuYmx1ZSkpCisgICAgICAgICwgbV9hbHBoYShjcmVh
dGVXcmFwcGVyKG93bmVyLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChtX2NvbG9yLmFscGhhKSkp
CiAgICAgewogICAgIH0KIAotICAgIFNpbXBsZUNvbG9yIG1fY29sb3I7CisgICAgU1JHQkE8dWlu
dDhfdD4gbV9jb2xvcjsKICAgICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1f
cmVkOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9ncmVlbjsKICAg
ICBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fYmx1ZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjIxLDcgKzYyMSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246
OmRldGVjdENvbnRlbnRJblIKICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3R5bGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0Q29sb3IgPSByZW5kZXJTdHlsZS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xh
ID0gdG9IU0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBsaWdodG5lc3Mgb2YgdGhl
IHVuZGVybGluZSBjb2xvciB0byB0aGUgbWlkZGxlLCBhbmQgbXVsdGlwbHkgdGhlIGFscGhhIGJ5
IDM4JSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoZSBjb2xvciB3aWxsIGFwcGVh
ciBvbiBsaWdodCBhbmQgZGFyayBiYWNrZ3JvdW5kcywgc2luY2Ugb25seSBvbmUgY29sb3IgY2Fu
IGJlIHNwZWNpZmllZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25VdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDE5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
aW5saW5lIHVpbnQ4X3QgYmxlbmQodWludDhfdCBmcm9tLCB1aW50OF90IHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6bHJvdW5kKHN0
YXRpY19jYXN0PGRvdWJsZT4oZnJvbSkgKyBzdGF0aWNfY2FzdDxkb3VibGU+KHRvIC0gZnJvbSkg
KiBwcm9ncmVzcykpOworfQorCiBpbmxpbmUgaW50IGJsZW5kKGludCBmcm9tLCBpbnQgdG8sIGRv
dWJsZSBwcm9ncmVzcykKIHsgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZChz
dGF0aWNfY2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20p
ICogcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxyb3VuZChz
dGF0aWNfY2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAtIGZyb20p
ICogcHJvZ3Jlc3MpKTsKIH0KIAogaW5saW5lIHVuc2lnbmVkIGJsZW5kKHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihscm91bmQodG8gPiBmcm9tID8gc3RhdGljX2Nhc3Q8ZG91YmxlPihmcm9tKSAr
IHN0YXRpY19jYXN0PGRvdWJsZT4odG8gLSBmcm9tKSAqIHByb2dyZXNzIDogc3RhdGljX2Nhc3Q8
ZG91YmxlPihmcm9tKSAtIHN0YXRpY19jYXN0PGRvdWJsZT4oZnJvbSAtIHRvKSAqIHByb2dyZXNz
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Omxyb3VuZCh0byA+IGZy
b20gPyBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91YmxlPih0byAt
IGZyb20pICogcHJvZ3Jlc3MgOiBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20pIC0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihmcm9tIC0gdG8pICogcHJvZ3Jlc3MpKTsKIH0KIAogaW5saW5lIGRvdWJsZSBi
bGVuZChkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDcgKzg2LDcgQEAgQ29sb3IgQ29sb3I6OmxpZ2h0ZW5lZCgpIGNvbnN0CiAg
ICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSBibGFjaykKICAgICAgICAgcmV0dXJu
IGxpZ2h0ZW5lZEJsYWNrOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3ko
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBm
bG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogCiAgICAgaWYgKHYgPT0gMC4wZikKQEAg
LTEwMyw3ICsxMDMsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogICAgIGlmIChp
c1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBkYXJrZW5l
ZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7Cisg
ICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAKICAgICBmbG9h
dCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6
Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwpAQCAtMTE0LDE0ICsxMTQsMTQgQEAgQ29sb3Ig
Q29sb3I6OmRhcmtlbmVkKCkgY29uc3QKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAog
ewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNS
R0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KLSAgICByZXR1
cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFMb3NzeSgpKTsKKyAgICByZXR1cm4gV2ViQ29y
ZTo6bGlnaHRuZXNzKHRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiB9CiAKIGZsb2F0IENvbG9yOjps
dW1pbmFuY2UoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9p
ZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMK
ICAgICAvLyBmb3IgbHVtaW5hbmNlIChlLmcuIGNvbnZlcnRUb1hZWihjKS55Q29tcG9uZW50KCkp
LgotICAgIHJldHVybiBXZWJDb3JlOjpsdW1pbmFuY2UodG9TUkdCQUxvc3N5KCkpOworICAgIHJl
dHVybiBXZWJDb3JlOjpsdW1pbmFuY2UodG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIH0KIAogQ29s
b3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdApAQCAtMTQ5LDcgKzE0
OSw3IEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICBpZiAoaXNTZW1h
bnRpYygpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICByZXR1cm4geyB0b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpLCBTZW1hbnRpYyB9OworICAgIHJldHVybiB7IG1ha2VTaW1wbGVDb2xv
cih0b1NSR0JBTG9zc3k8dWludDhfdD4oKSksIFNlbWFudGljIH07CiB9CiAKIHN0ZDo6cGFpcjxD
b2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBDb2xvcjo6Y29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKSBjb25zdApAQCAtMTU5LDIwICsxNTksNiBAQCBzdGQ6OnBhaXI8Q29sb3JTcGFj
ZSwgQ29sb3JDb21wb25lbnRzPGZsCiAgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgYXND
b2xvckNvbXBvbmVudHMoYXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpKSB9OwogfQogCi1TaW1w
bGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAotewotICAgIGlm
IChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNFeHRlbmRl
ZCgpLnRvU1JHQkFMb3NzeSgpKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKTsKLX0KLQotU1JHQkE8
ZmxvYXQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAotewotICAgIGlmIChpc0V4dGVuZGVk
KCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCk7Ci0gICAgcmV0
dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKTsKLX0KLQogVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIHJldHVybiB0
cyA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvcik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyMSwxMCArMTIxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFp
cjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBjb2xvclNwYWNlQW5kQ29tcG9u
ZW50cygpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3Jz
cGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIHRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIHdpbGwgY29udmVy
dCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09SRV9FWFBP
UlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFNSR0JBPFQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgQ29sb3IgbGlnaHRlbmVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgZGFy
a2VuZWQoKSBjb25zdDsKQEAgLTI2OCw2ICsyNjUsMTMgQEAgaW5saW5lIHVuc2lnbmVkIENvbG9y
OjpoYXNoKCkgY29uc3QKICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnNpbXBs
ZUNvbG9yQW5kRmxhZ3MpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiBDb2xv
cjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAg
ICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeTxUPigpOworICAgIHJldHVybiBhc1Np
bXBsZSgpLmFzU1JHQkE8VD4oKTsKK30KKwogaW5saW5lIENvbG9yIENvbG9yOjppbnZlcnRlZENv
bG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKIHsKICAgICByZXR1cm4g
YWxwaGEgPyBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5k
aW5nLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAg
Q29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENvbG9yJiBiYWNrZAogICAgIGlmICghc291cmNl
LmFscGhhKCkpCiAgICAgICAgIHJldHVybiBiYWNrZHJvcDsKIAotICAgIGF1dG8gW2JhY2tkcm9w
UiwgYmFja2Ryb3BHLCBiYWNrZHJvcEIsIGJhY2tkcm9wQV0gPSBiYWNrZHJvcC50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIGF1dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNvdXJjZUIsIHNv
dXJjZUFdID0gc291cmNlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbYmFj
a2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9wLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNvdXJjZUIs
IHNvdXJjZUFdID0gc291cmNlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCiAgICAgaW50IGQg
PSAweEZGICogKGJhY2tkcm9wQSArIHNvdXJjZUEpIC0gYmFja2Ryb3BBICogc291cmNlQTsKICAg
ICBpbnQgYSA9IGQgLyAweEZGOwpAQCAtNjgsNyArNjgsNyBAQCBDb2xvciBibGVuZFdpdGhXaGl0
ZShjb25zdCBDb2xvciYgY29sb3IpCiAgICAgaWYgKCFjb2xvci5pc09wYXF1ZSgpKQogICAgICAg
ICByZXR1cm4gY29sb3I7CiAKLSAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3Rp
bmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Cisg
ICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0g
PSBjb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgIFNpbXBsZUNvbG9yIHJlc3Vs
dDsKICAgICBmb3IgKGludCBhbHBoYSA9IHN0YXJ0QWxwaGE7IGFscGhhIDw9IGVuZEFscGhhOyBh
bHBoYSArPSBhbHBoYUluY3JlbWVudCkgewpAQCAtOTgsMTcgKzk4LDE3IEBAIENvbG9yIGJsZW5k
KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IC8vIFNpbmNlIHByZW11bHRpcGx5Q2VpbGluZygpIGJhaWxzIG9uIHplcm8gYWxwaGEsIHNwZWNp
YWwtY2FzZSB0aGF0LgotICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20gPSBmcm9tLmFscGhhKCkg
PyBwcmVtdWx0aXBseUNlaWxpbmcoZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENv
bG9yOjp0cmFuc3BhcmVudDsKLSAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHRvLmFscGhhKCkg
PyBwcmVtdWx0aXBseUNlaWxpbmcodG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkgOiBDb2xv
cjo6dHJhbnNwYXJlbnQ7CisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJvbSA9IGZyb20uYWxwaGEo
KSA/IHByZW11bHRpcGxpZWRDZWlsaW5nKGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpIDog
U1JHQkE8dWludDhfdD4geyAwLCAwLCAwLCAwIH07CisgICAgYXV0byBwcmVtdWx0aXBsaWVkVG8g
PSB0by5hbHBoYSgpID8gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCkpIDogU1JHQkE8dWludDhfdD4geyAwLCAwLCAwLCAwIH07CiAKLSAgICBhdXRvIHByZW11
bHRCbGVuZGVkID0gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVt
dWx0aXBsaWVkRnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLnJlZENvbXBvbmVu
dCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9t
LmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRpcGxpZWRUby5ncmVlbkNvbXBvbmVudCgpLCBwcm9n
cmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmJsdWVDb21w
b25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5hbHBoYUNvbXBvbmVudCgpLCBw
cmVtdWx0aXBsaWVkVG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCi0gICAgKTsKKyAgICBh
dXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gU1JHQkEgeworICAgICAgICBXZWJDb3JlOjpibGVu
ZChwcmVtdWx0aXBsaWVkRnJvbS5yZWQsIHByZW11bHRpcGxpZWRUby5yZWQsIHByb2dyZXNzKSwK
KyAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uZ3JlZW4sIHByZW11bHRp
cGxpZWRUby5ncmVlbiwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0
aXBsaWVkRnJvbS5ibHVlLCBwcmVtdWx0aXBsaWVkVG8uYmx1ZSwgcHJvZ3Jlc3MpLAorICAgICAg
ICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5hbHBoYSwgcHJlbXVsdGlwbGllZFRv
LmFscGhhLCBwcm9ncmVzcykKKyAgICB9OwogCi0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkocHJl
bXVsdEJsZW5kZWQpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBsaWVk
KHByZW11bHRpcGxpZWRCbGVuZGVkKSk7CiB9CiAKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRp
cGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
QEAgLTExOCwxNSArMTE4LDE1IEBAIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0
IENvbG8KICAgICBpZiAocHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKTsKLSAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKyAgICBhdXRvIGZyb21TUkdCID0gZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAg
ICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKLSAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRD
b21wb25lbnQoKSwgdG9TUkdCLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVD
b21wb25lbnQoKSwgdG9TUkdCLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21w
b25lbnQoKSwgcHJvZ3Jlc3MpCi0gICAgKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKFNS
R0JBIHsKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBw
cm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuLCB0b1NSR0Iu
Z3JlZW4sIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwg
dG9TUkdCLmJsdWUsIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0Iu
YWxwaGEsIHRvU1JHQi5hbHBoYSwgcHJvZ3Jlc3MpCisgICAgfSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclR5cGVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDQgKzIzNywyMSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyCiAgICAgcmV0dXJuICEo
YSA9PSBiKTsKIH0KIAorCisvLyBQaXhlbCBGb3JtYXRzCisKK3N0cnVjdCBBUkdCIHsKKyAgICB1
bnNpZ25lZCB2YWx1ZTsKK307CisKK2NvbnN0ZXhwciBBUkdCIGFzQVJHQihTUkdCQTx1aW50OF90
PiBjb2xvcikKK3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29sb3IuYWxw
aGEgPDwgMjQgfCBjb2xvci5yZWQgPDwgMTYgfCBjb2xvci5ncmVlbiA8PCA4IHwgY29sb3IuYmx1
ZSkgfTsKK30KKworY29uc3RleHByIFNSR0JBPHVpbnQ4X3Q+IGFzU1JHQkEoQVJHQiBjb2xvcikK
K3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52YWx1ZSA+PiAxNiks
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbG9yLnZhbHVlID4+IDgpLCBzdGF0aWNfY2FzdDx1aW50
OF90Pihjb2xvci52YWx1ZSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbG9yLnZhbHVlID4+IDI0
KSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAy
NjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDQgKzY2LDM5IEBAIFNSR0JBPGZsb2F0PiBwcmVt
dWx0aXBsaWVkKGNvbnN0IFNSR0JBPGYKICAgICByZXR1cm4geyByICogYSwgZyAqIGEsIGIgKiBh
LCBhIH07CiB9CiAKK1NSR0JBPGZsb2F0PiB1bnByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8Zmxv
YXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIHJldHVy
biB7IHIgLyBhLCBnIC8gYSwgYiAvIGEsIGEgfTsKK30KKworU1JHQkE8dWludDhfdD4gcHJlbXVs
dGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAgICAgICByZXR1cm4g
Y29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5MjU1
KHIgKiBhKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1NShnICogYSkpLCBz
dGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnkyNTUoYiAqIGEpKSwgYSB9OworfQorCitT
UkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkQ2VpbGluZyhTUkdCQTx1aW50OF90PiBjb2xvcikK
K3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSB8fCAgYSA9PSAy
NTUpCisgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50
OF90PihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4o
ZmFzdERpdmlkZUJ5MjU1KGcgKiBhICsgMjU0KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3RE
aXZpZGVCeTI1NShiICogYSArIDI1NCkpLCBhIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2
X3QgdW5wcmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZSh1aW50OF90IGMsIHVpbnQ4X3QgYSkKK3sK
KyAgICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworU1JH
QkE8dWludDhfdD4gdW5wcmVtdWx0aXBsaWVkKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhIHx8IGEgPT0gMjU1KQorICAg
ICAgICByZXR1cm4gY29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4odW5w
cmVtdWx0aXBsaWVkQ29tcG9uZW50Qnl0ZShyLCBhKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVu
cHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih1
bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKGIsIGEpKSwgYSB9OworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDYgKzM4LDExIEBAIGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0
IGNvbnRyYXN0UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7
CiAKIFNSR0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JH
QkE8ZmxvYXQ+IHVucHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8
dWludDhfdD4gcHJlbXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVp
bnQ4X3Q+IHByZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4
X3Q+IHVucHJlbXVsdGlwbGllZChTUkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNv
bnZlcnRQcmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDE4
IEBAIGNvbnN0ZXhwciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4g
Ynl0ZSAvIDI1NS4wZjsKIH0KIAordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1l
IENvbG9yVHlwZT4gaW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRC
eXRlcyhjb25zdCBDb2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29t
cG9uZW50Qnl0ZShjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25l
bnRzWzFdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRv
Q29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0
eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBj
b252ZXJ0VG9Db21wb25lbnRGbG9hdHMoY29uc3QgQ29sb3JUeXBlPHVpbnQ4X3Q+JiBjb2xvcikK
K3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50cyhjb2xvcik7CisgICAg
cmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1swXSksIGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMV0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChj
b21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1szXSkgfTsK
K30KKwogY29uc3RleHByIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVl
KQogewogICAgIHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lv
biAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENv
bG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBSZWY8RXh0ZW5kZWRDb2xv
cj4gRXh0ZW5kZWRDb2xvcjo6aW52ZXJ0CiAgICAgcmV0dXJuIEV4dGVuZGVkQ29sb3I6OmNyZWF0
ZSgxLjBmIC0gYzEsIDEuMGYgLSBjMiwgMS4wZiAtIGMzLCBvdmVycmlkZUFscGhhLCBjb2xvclNw
YWNlKCkpOwogfQogCi1TUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5KCkg
Y29uc3QKK1NSR0JBPGZsb2F0PiBFeHRlbmRlZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRz
TG9zc3koKSBjb25zdAogewogICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7CiAgICAgY2FzZSBD
b2xvclNwYWNlOjpTUkdCOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5kZWRDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw4IEBACiAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRlICJD
b2xvclNwYWNlLmgiCisjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgorI2luY2x1ZGUgIkNvbG9yVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKQEAgLTQ5LDExICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+
IGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKICAgICBSZWY8RXh0ZW5kZWRDb2xvcj4gaW52
ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAKLSAgICBTUkdCQTxmbG9hdD4gdG9T
UkdCQUxvc3N5KCkgY29uc3Q7Ci0KICAgICBib29sIGlzV2hpdGUoKSBjb25zdDsKICAgICBib29s
IGlzQmxhY2soKSBjb25zdDsKIAorICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNv
bG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgU1JHQkE8VD4gdG9TUkdCQUxvc3N5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQorICAgICAgICAgICAgcmV0dXJuIHRv
U1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICByZXR1cm4gY29udmVydFRv
Q29tcG9uZW50Qnl0ZXModG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkpOworICAgIH0KKwog
cHJpdmF0ZToKICAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMs
IGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgICAgIDogbV9jb21wb25l
bnRzKGMxLCBjMiwgYzMsIGFscGhhKQpAQCAtNjEsNiArNzAsOCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4gdG9TUkdCQUZsb2F0Q29t
cG9uZW50c0xvc3N5KCkgY29uc3Q7CisKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29t
cG9uZW50czsKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJ
KHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEludFJlY3Qg
JnJlY3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0LCB1aW50OF90IHIsIHVpbnQ4X3Qg
ZywgdWludDhfdCBiLCB1aW50OF90IGEpCiAgICAgewogICAgICAgICBpZiAocmVjdC5pc0VtcHR5
KCkgfHwgIWluQm91bmRzKHJlY3QpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTM2LDQ1ICsx
MzYsNDUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9waXhlbHNQdHIgKyB5ICogbV9zaXpl
LndpZHRoKCkgKyB4OwogICAgIH0KIAotICAgIHZvaWQgc2V0UGl4ZWwodWludDMyX3QqIGRlc3Qs
IHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgdm9p
ZCBzZXRQaXhlbCh1aW50MzJfdCogZGVzdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3Qg
YiwgdWludDhfdCBhKQogICAgIHsKICAgICAgICAgQVNTRVJUKGRlc3QpOwogICAgICAgICAqZGVz
dCA9IHBpeGVsVmFsdWUociwgZywgYiwgYSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQaXhlbChp
bnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVk
IGEpCisgICAgdm9pZCBzZXRQaXhlbChpbnQgeCwgaW50IHksIHVpbnQ4X3QgciwgdWludDhfdCBn
LCB1aW50OF90IGIsIHVpbnQ4X3QgYSkKICAgICB7CiAgICAgICAgIHNldFBpeGVsKHBpeGVsQXQo
eCwgeSksIHIsIGcsIGIsIGEpOwogICAgIH0KIAotICAgIHZvaWQgYmxlbmRQaXhlbCh1aW50MzJf
dCogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
KyAgICB2b2lkIGJsZW5kUGl4ZWwodWludDMyX3QqIGRlc3QsIHVpbnQ4X3QgciwgdWludDhfdCBn
LCB1aW50OF90IGIsIHVpbnQ4X3QgYSkKICAgICB7CiAgICAgICAgIGlmICghYSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBTaW1wbGVDb2xvciBwaXhlbCB7ICpkZXN0IH07CisgICAg
ICAgIGF1dG8gcGl4ZWwgPSBhc1NSR0JBKEFSR0IgeyAqZGVzdCB9KTsKIAotICAgICAgICBpZiAo
YSA+PSAyNTUgfHwgIXBpeGVsLmlzVmlzaWJsZSgpKSB7CisgICAgICAgIGlmIChhID49IDI1NSB8
fCAhcGl4ZWwuYWxwaGEpIHsKICAgICAgICAgICAgIHNldFBpeGVsKGRlc3QsIHIsIGcsIGIsIGEp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtX3ByZW11
bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBwaXhlbCA9IHByZW11bHRpcGx5Rmxvb3JpbmcocGl4
ZWwpOworICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBsaWVkRmxvb3JpbmcocGl4ZWwpOwog
Ci0gICAgICAgIHVuc2lnbmVkIGQgPSAyNTUgLSBhOworICAgICAgICB1aW50OF90IGQgPSAyNTUg
LSBhOwogCi0gICAgICAgIHIgPSBmYXN0RGl2aWRlQnkyNTUociAqIGEgKyBwaXhlbC5yZWRDb21w
b25lbnQoKSAqIGQpOwotICAgICAgICBnID0gZmFzdERpdmlkZUJ5MjU1KGcgKiBhICsgcGl4ZWwu
Z3JlZW5Db21wb25lbnQoKSAqIGQpOwotICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBh
ICsgcGl4ZWwuYmx1ZUNvbXBvbmVudCgpICogZCk7Ci0gICAgICAgIGEgKz0gZmFzdERpdmlkZUJ5
MjU1KGQgKiBwaXhlbC5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICAgICAgciA9IGZhc3REaXZpZGVC
eTI1NShyICogYSArIHBpeGVsLnJlZCAqIGQpOworICAgICAgICBnID0gZmFzdERpdmlkZUJ5MjU1
KGcgKiBhICsgcGl4ZWwuZ3JlZW4gKiBkKTsKKyAgICAgICAgYiA9IGZhc3REaXZpZGVCeTI1NShi
ICogYSArIHBpeGVsLmJsdWUgKiBkKTsKKyAgICAgICAgYSArPSBmYXN0RGl2aWRlQnkyNTUoZCAq
IHBpeGVsLmFscGhhKTsKIAotICAgICAgICBhdXRvIHJlc3VsdCA9IG1ha2VTaW1wbGVDb2xvcihy
LCBnLCBiLCBhKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBTUkdCQSB7IHIsIGcsIGIsIGEgfTsK
IAogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIHJlc3VsdCA9
IHVucHJlbXVsdGlwbHkocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHVucHJlbXVsdGlw
bGllZChyZXN1bHQpOwogCi0gICAgICAgICpkZXN0ID0gcmVzdWx0LnZhbHVlQXNBUkdCKCk7Cisg
ICAgICAgICpkZXN0ID0gYXNBUkdCKHJlc3VsdCkudmFsdWU7CiAgICAgfQogCiAgICAgc3RhdGlj
IGJvb2wgaXNPdmVyU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMjIxLDE3ICsyMjEsMTcg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5j
b250YWlucyhyZWN0KTsKICAgICB9CiAKLSAgICB1aW50MzJfdCBwaXhlbFZhbHVlKHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpIGNvbnN0CisgICAgdWludDMy
X3QgcGl4ZWxWYWx1ZSh1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmICFhKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgYXV0byByZXN1bHQgPSBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgYSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gU1JHQkEgeyByLCBnLCBiLCBh
IH07CiAKICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KQotICAgICAg
ICAgICAgcmVzdWx0ID0gcHJlbXVsdGlwbHlGbG9vcmluZyhyZXN1bHQpOworICAgICAgICAgICAg
cmVzdWx0ID0gcHJlbXVsdGlwbGllZEZsb29yaW5nKHJlc3VsdCk7CiAKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC52YWx1ZUFzQVJHQigpOworICAgICAgICByZXR1cm4gYXNBUkdCKHJlc3VsdCkudmFs
dWU7CiAgICAgfQogCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ+IG1fcGl4
ZWxzOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTaW1wbGVDb2xvci5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVNpbXBsZUNvbG9yIHByZW11bHRpcGx5Rmxvb3JpbmcoU2ltcGxlQ29sb3IgY29s
b3IpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKLSAgICBpZiAoIWEgfHwgYSA9
PSAyNTUpCi0gICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KGZhc3REaXZpZGVCeTI1NShyICogYSksIGZhc3REaXZpZGVCeTI1NShnICogYSksIGZhc3REaXZp
ZGVCeTI1NShiICogYSksIGEpOwotfQotCi1TaW1wbGVDb2xvciBwcmVtdWx0aXBseUNlaWxpbmco
U2ltcGxlQ29sb3IgY29sb3IpCi17Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKLSAg
ICBpZiAoIWEgfHwgYSA9PSAyNTUpCi0gICAgICAgIHJldHVybiBjb2xvcjsKLSAgICByZXR1cm4g
bWFrZVNpbXBsZUNvbG9yKGZhc3REaXZpZGVCeTI1NShyICogYSArIDI1NCksIGZhc3REaXZpZGVC
eTI1NShnICogYSArIDI1NCksIGZhc3REaXZpZGVCeTI1NShiICogYSArIDI1NCksIGEpOwotfQot
Ci1zdGF0aWMgaW5saW5lIHVpbnQxNl90IHVucHJlbXVsdGlwbHlDaGFubmVsKHVpbnQ4X3QgYywg
dWludDhfdCBhKQotewotICAgIHJldHVybiAoZmFzdE11bHRpcGx5QnkyNTUoYykgKyBhIC0gMSkg
LyBhOwotfQotCi1TaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIGNvbG9yKQot
ewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0gMjU1
KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih1bnBy
ZW11bHRpcGx5Q2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBseUNoYW5uZWwoZywgYSksIHVucHJl
bXVsdGlwbHlDaGFubmVsKGIsIGEpLCBhKTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9y
LmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDExICs0Miw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdGV4cHIgdWludDMyX3QgdmFsdWVBc0FSR0IoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQogCi0gICAgY29uc3RleHByIHVpbnQ4X3QgcmVkQ29tcG9uZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZSA+PiAxNjsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGdyZWVuQ29tcG9u
ZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiA4OyB9Ci0gICAgY29uc3RleHByIHVpbnQ4
X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBjb25zdGV4
cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gMjQ7
IH0KLQogICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQoKSBjb25zdCB7
IHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKTsgfQogCiAg
ICAgY29uc3RleHByIGJvb2wgaXNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBhbHBoYUNvbXBvbmVu
dCgpID09IDB4RkY7IH0KQEAgLTYyLDcgKzU4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIHJlZENvbXBvbmVudCgpKSwgc3RhdGljX2Nh
c3Q8dWludDhfdD4oMHhGRiAtIGdyZWVuQ29tcG9uZW50KCkpLCBzdGF0aWNfY2FzdDx1aW50OF90
PigweEZGIC0gYmx1ZUNvbXBvbmVudCgpKSwgYWxwaGEgfTsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQSgpIGNvbnN0OworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBhc1NSR0JBKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgZmxvYXQ+KQorICAg
ICAgICAgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50RmxvYXQocmVkQ29tcG9uZW50KCkp
LCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChncmVlbkNvbXBvbmVudCgpKSwgY29udmVydFRvQ29t
cG9uZW50RmxvYXQoYmx1ZUNvbXBvbmVudCgpKSwgIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFs
cGhhQ29tcG9uZW50KCkpIH07CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3Nh
bWVfdjxULCB1aW50OF90PikKKyAgICAgICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpLCBn
cmVlbkNvbXBvbmVudCgpLCBibHVlQ29tcG9uZW50KCksIGFscGhhQ29tcG9uZW50KCkgfTsKKyAg
ICB9CiAKICAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgogICAgIGNvbnN0ZXhwciB1aW50OF90
IGdldCgpIGNvbnN0CkBAIC03OSw2ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgorICAgIGNvbnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWUgPj4gMTY7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBvbmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gODsgfQorICAgIGNvbnN0ZXhwciB1aW50OF90IGJsdWVD
b21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKICAgICB1aW50MzJfdCBtX3Zh
bHVlIHsgMCB9OwogfTsKIApAQCAtOTAsMTMgKzk2LDkgQEAgY29uc3RleHByIFNpbXBsZUNvbG9y
IG1ha2VTaW1wbGVDb2xvcihpbgogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xv
cihjb25zdCBTUkdCQTx1aW50OF90PiYpOwogU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNv
bnN0IFNSR0JBPGZsb2F0PiYpOwogCi1TaW1wbGVDb2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNp
bXBsZUNvbG9yKTsKLVNpbXBsZUNvbG9yIHByZW11bHRpcGx5Q2VpbGluZyhTaW1wbGVDb2xvcik7
Ci1TaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yKTsKLQogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQogewotICAgIHJldHVybiBh
LnZhbHVlKCkgPT0gYi52YWx1ZSgpOworICAgIHJldHVybiBhLnZhbHVlQXNBUkdCKCkgPT0gYi52
YWx1ZUFzQVJHQigpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFNpbXBsZUNvbG9yIGEs
IFNpbXBsZUNvbG9yIGIpCkBAIC0xMTYsMjUgKzExOCwxNCBAQCBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgbWFrZVNpbXBsZUNvbG9yKGluCiAKIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxl
Q29sb3IoY29uc3QgU1JHQkE8dWludDhfdD4mIHNSR0JBKQogewotICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gc1JHQkE7Ci0gICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OworICAgIHJldHVybiB7IHNS
R0JBLnJlZCwgc1JHQkEuZ3JlZW4sIHNSR0JBLmJsdWUsIHNSR0JBLmFscGhhIH07CiB9CiAKIGlu
bGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8ZmxvYXQ+JiBzUkdC
QSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAgIHJldHVybiB7IGNvbnZl
cnRUb0NvbXBvbmVudEJ5dGUociksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoZyksIGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGUoYiksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkgfTsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHNSR0JBKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBTUkdCQTxUPiBTaW1wbGVDb2xvcjo6YXNT
UkdCQSgpIGNvbnN0Ci17Ci0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50
X3Y8VD4pCi0gICAgICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBv
bmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRG
bG9hdChhbHBoYUNvbXBvbmVudCgpKSB9OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHsgcmVk
Q29tcG9uZW50KCksIGdyZWVuQ29tcG9uZW50KCksIGJsdWVDb21wb25lbnQoKSwgYWxwaGFDb21w
b25lbnQoKSB9OwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIHN0
ZCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCShyZXZp
c2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2Nv
YS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICsz
OTYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhCiB7CiAgICAg
aWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICBbc3RhdGljX2Nh
c3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFtA
KHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1CiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5p
bWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVl
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1
ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1h
dGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwg
QChhKV1dOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFZhbHVlcwogICAgICAgICByZXR1cm47CiAKICAgICBbc3RhdGljX2Nhc3Q8Q0FL
ZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNB
cnJheSh2YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBjb2xvci50ZW1wbGF0ZSB0b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICAgICAg
cmV0dXJuIEBbQChyKSwgQChnKSwgQChiKSwgQChhKV07CiAgICAgfSkuZ2V0KCldOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmlt
YXRpb25XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkocmV2aXNpb24gMjYzOTE4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmlt
YXRpb25XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsOCArMzY3LDggQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRGcm9tVmFsdQogICAgIGlmIChhbmltYXRpb25UeXBlKCkg
IT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1
ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIENHRmxvYXQgYVs0XSA9IHsgc2ltcGxl
Q29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBs
ZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9Owor
ICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
IENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBv
bmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9y
UmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0
aW9uU2V0RnJvbVZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2LmdldCgpKTsKIH0KQEAgLTQxOSw4
ICs0MTksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFRvVmFsdWUoCiAgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgQ0dG
bG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuZ3Jl
ZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5h
bHBoYUNvbXBvbmVudCgpIH07CisgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWUudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29t
cG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAg
UmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwg
YSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRUb1ZhbHVlKG1fYW5pbWF0aW9uLmdldCgpLCB2Lmdl
dCgpKTsKIH0KQEAgLTQ4OSw4ICs0ODksOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46
OnNldFZhbHVlcyhjCiAgICAgICAgIAogICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4g
YXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIHZhbHVlLnNpemUoKSwgJmtD
RlR5cGVBcnJheUNhbGxCYWNrcykpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWUu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlW2ldLnRvU1JH
QkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIENHRmxvYXQgYVs0XSA9IHsgc2ltcGxlQ29s
b3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUNv
bG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9OworICAg
ICAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZVtpXS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsK
KyAgICAgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25lbnRzLnJlZCwgY29tcG9uZW50cy5ncmVl
biwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFscGhhIH07CiAgICAgICAgIFJldGFpblB0
cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAg
ICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCB2LmdldCgpKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDcgKzgzLDcgQEAgdm9pZCBjb3B5Q29udGV4dFByb3BlcnRpZXMoY2Fpcm9fdCog
c3JjQwogCiB2b2lkIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY2Fpcm9fdCogY29udGV4dCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdC
QUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8Zmxv
YXQ+KCk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIHIsIGcsIGIsIGEpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkK
IAogc3RhdGljIHZvaWQgYWRkQ29sb3JTdG9wUkdCQShjYWlyb19wYXR0ZXJuX3QgKmdyYWRpZW50
LCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNhaXJv
X3BhdHRlcm5fYWRkX2NvbG9yX3N0b3BfcmdiYShncmFkaWVudCwgc3RvcC5vZmZzZXQsIHIsIGcs
IGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTU1LDcgKzU1LDcgQEAgdHlwZWRlZiBzdHJ1
Y3QgcG9pbnRfdCB7CiAKIHN0YXRpYyB2b2lkIHNldENvcm5lckNvbG9yUkdCQShjYWlyb19wYXR0
ZXJuX3QqIGdyYWRpZW50LCBpbnQgaWQsIEdyYWRpZW50OjpDb2xvclN0b3Agc3RvcCwgZmxvYXQg
Z2xvYmFsQWxwaGEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JH
QkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9z
c3k8ZmxvYXQ+KCk7CiAgICAgY2Fpcm9fbWVzaF9wYXR0ZXJuX3NldF9jb3JuZXJfY29sb3Jfcmdi
YShncmFkaWVudCwgaWQsIHIsIGcsIGIsIGEgKiBnbG9iYWxBbHBoYSk7CiB9CiAKQEAgLTEzNSw4
ICsxMzUsOCBAQCBzdGF0aWMgdm9pZCBhZGRDb25pY1NlY3RvcihjYWlyb19wYXR0ZXJuCiAKIHN0
YXRpYyBHcmFkaWVudDo6Q29sb3JTdG9wIGludGVycG9sYXRlQ29sb3JTdG9wKEdyYWRpZW50OjpD
b2xvclN0b3AgZnJvbSwgR3JhZGllbnQ6OkNvbG9yU3RvcCB0bykKIHsKLSAgICBhdXRvIFtyMSwg
ZzEsIGIxLCBhMV0gPSBmcm9tLmNvbG9yLnRvU1JHQkFMb3NzeSgpOwotICAgIGF1dG8gW3IyLCBn
MiwgYjIsIGEyXSA9IHRvLmNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IxLCBnMSwg
YjEsIGExXSA9IGZyb20uY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOworICAgIGF1dG8gW3Iy
LCBnMiwgYjIsIGEyXSA9IHRvLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKIAogICAgIGZs
b2F0IG9mZnNldCA9IGZyb20ub2Zmc2V0ICsgKHRvLm9mZnNldCAtIGZyb20ub2Zmc2V0KSAqIDAu
NWY7CiAgICAgZmxvYXQgciA9IHIxICsgKHIyIC0gcjEpICogMC41ZjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODAsOSArODAsOSBAQCB2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kCiAg
ICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRh
dGFTcmMgKyBzdHJpZGUgKiB5KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xvZ2lj
YWxTaXplLndpZHRoKCk7IHgrKykgewogICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93
ICsgeDsKLSAgICAgICAgICAgIGF1dG8gcGl4ZWxDb2xvciA9IHVucHJlbXVsdGlwbHkoU2ltcGxl
Q29sb3IgeyAqcGl4ZWwgfSk7Ci0gICAgICAgICAgICBwaXhlbENvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkQ29tcG9uZW50KCldLCBsb29rVXBUYWJsZVtw
aXhlbENvbG9yLmdyZWVuQ29tcG9uZW50KCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWVD
b21wb25lbnQoKV0sIHBpeGVsQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7Ci0gICAgICAgICAgICAq
cGl4ZWwgPSBwcmVtdWx0aXBseUNlaWxpbmcocGl4ZWxDb2xvcikudmFsdWVBc0FSR0IoKTsKKyAg
ICAgICAgICAgIGF1dG8gcGl4ZWxDb21wb25lbnRzID0gdW5wcmVtdWx0aXBsaWVkKGFzU1JHQkEo
QVJHQiB7ICpwaXhlbCB9KSk7CisgICAgICAgICAgICBwaXhlbENvbXBvbmVudHMgPSB7IGxvb2tV
cFRhYmxlW3BpeGVsQ29tcG9uZW50cy5yZWRdLCBsb29rVXBUYWJsZVtwaXhlbENvbXBvbmVudHMu
Z3JlZW5dLCBsb29rVXBUYWJsZVtwaXhlbENvbXBvbmVudHMuYmx1ZV0sIHBpeGVsQ29tcG9uZW50
cy5hbHBoYSB9OworICAgICAgICAgICAgKnBpeGVsID0gYXNBUkdCKHByZW11bHRpcGxpZWRDZWls
aW5nKHBpeGVsQ29tcG9uZW50cykpLnZhbHVlOwogICAgICAgICB9CiAgICAgfQogICAgIGNhaXJv
X3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xv
Z2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZl
SW1hZ2VDYWlyby5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw3IEBAIENvbG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGMK
ICAgICAgICAgcmV0dXJuIENvbG9yKCk7CiAKICAgICB1bnNpZ25lZCogcGl4ZWwgPSByZWludGVy
cHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1h
Z2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciB7ICpwaXhl
bCB9KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChhc1NSR0JB
KEFSR0IgeyAqcGl4ZWwgfSkpKTsKIH0KIAogdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0
aXZlSW1hZ2VQdHImIGltYWdlLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5n
TkVPTi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05F
T04uaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDExICsxMTEsMTEgQEAgaW5saW5lIHZvaWQgRkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseU5lbwogICAgIC8vIFNldCBsaWdodCBzb3VyY2UgYXJndW1l
bnRzLgogICAgIGZsb2F0QXJndW1lbnRzLmNvbnN0T25lID0gMTsKIAotICAgIGF1dG8gc2ltcGxl
Q29sb3IgPSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBh
dXRvIGNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCi0g
ICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKTsK
LSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVuID0gc2ltcGxlQ29sb3IuZ3JlZW5Db21wb25l
bnQoKTsKLSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBzaW1wbGVDb2xvci5ibHVlQ29t
cG9uZW50KCk7CisgICAgZmxvYXRBcmd1bWVudHMuY29sb3JSZWQgPSBjb2xvci5yZWQ7CisgICAg
ZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IGNvbG9yLmdyZWVuOworICAgIGZsb2F0QXJndW1l
bnRzLmNvbG9yQmx1ZSA9IGNvbG9yLmJsdWU7CiAgICAgZmxvYXRBcmd1bWVudHMucGFkZGluZzQg
PSAwOwogCiAgICAgaWYgKG1fbGlnaHRTb3VyY2UtPnR5cGUoKSA9PSBMU19QT0lOVCkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MDUsMTAgKzQwNSwxMCBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1w
CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAgICAgCiAgICAg
aWYgKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAg
ICAgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b0xpbmVhclNSR0JBKG1fbGlnaHRpbmdDb2xvci50
b1NSR0JBTG9zc3koKSk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9MaW5lYXJTUkdC
QShtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICAgICAgcGFpbnRp
bmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0Qociwg
ZywgYik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0
aW5nQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9s
aWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICAgICAgcGFpbnRpbmdEYXRh
LmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QociwgZywgYik7
CiAgICAgfQogICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50
aW5nRGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2Mzkx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIEZpbHRl
ck9wZXJhdGlvbnM6OnRyYW5zZm9ybUNvbG9yKENvCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3Iu
dG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsK
ICAgICAgICAgaWYgKCFvcGVyYXRpb24tPnRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQpAQCAt
MTI5LDcgKzEyOSw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRyYW5zZm9ybUMK
ICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIHNSR0JB
Q29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAKICAgICBmb3IgKGF1dG8mIG9w
ZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+aW52ZXJz
ZVRyYW5zZm9ybUNvbG9yKHNSR0JBQ29sb3IpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIENvbG9yOjpDb2xvcihjb25zdCBHZGtSR0JBJiBj
b2xvcikKIAogQ29sb3I6Om9wZXJhdG9yIEdka1JHQkEoKSBjb25zdAogewotICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgcmV0dXJuIHsgciwgZywgYiwgYSB9OwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRl
cihjb25zdCBDCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0g
ZGF0YSgpLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlk
Q29sb3IpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKLSAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5KCkpOwor
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9jYXRpb24oKSwgciwg
ZywgYiwgYSk7CiAgICAgZ2xMaW5lV2lkdGgod2lkdGgpOwogCkBAIC0yNzUsNyArMjc1LDcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIoaW50IG51bQogICAgIGNhaXJvX3QqIGNy
ID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwogCiAgICAgLy8gU2luY2Ugd2Ugd29uJ3Qgc3dhcCBS
K0Igd2hlbiB1cGxvYWRpbmcgYSB0ZXh0dXJlLCBwYWludCB3aXRoIHRoZSBzd2FwcGVkIFIrQiBj
b2xvci4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNh
aXJvX3NldF9zb3VyY2VfcmdiYShjciwgYiwgZywgciwgYSk7CiAKICAgICBjYWlyb19yZWN0YW5n
bGUoY3IsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwpAQCAtNDE0LDcgKzQxNCw3IEBAIHN0YXRpYyB2
b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmUKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hh
ZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAg
ICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50
b1NSR0JBTG9zc3koKSk7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRp
cGxpZWQoc2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICAgICAgICAg
IGdsVW5pZm9ybTRmKHByb2dyYW0uY29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICAg
ICAgICAgIGdsVW5pZm9ybTJmKHByb2dyYW0uYmx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRv
dy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGds
VW5pZm9ybTJmKHByb2dyYW0uc2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgMCwgMCk7CkBAIC02NzYs
NyArNjc2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogICAg
IFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFk
ZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIGdsVXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQo
KSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdC
QUxvc3N5KCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogICAgIGdsVW5pZm9ybTRmKHByb2dyYW0tPmNvbG9yTG9j
YXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgaWYgKGEgPCAxICYmIGlzQmxlbmRpbmdBbGxvd2Vk
KQogICAgICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKQEAgLTY4Niw3ICs2ODYsNyBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpjbGVhckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsK
ICAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0NvbG9yRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTMgQEAgQ29s
b3I6OkNvbG9yKEQyRDFfQ09MT1JfRiBjb2xvcikKIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfQ09M
T1JfRigpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3koKTsK
KyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICByZXR1
cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpOwogfQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9W
RUNUT1JfNEYoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAg
cmV0dXJuIEQyRDE6OlZlY3RvcjRGKHIsIGcsIGIsIGEpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0
MkQuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcy
LDcgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbgogICAgIFZlY3Rv
cjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7CiAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBFeHRlbmRlZENvbG9yLgogICAgIGZvciAoYXV0byBzdG9wIDogbV9zdG9wcykg
ewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeSgpOwor
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKICAgICAgICAgZ3JhZGllbnRTdG9wcy5hcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Au
b2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAyLDcgKzIwMiw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0Zv
ckRvY3VtZW4KICAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGdyYW1tYXJQYXR0ZXJu
Q29sb3IgeyBtYWtlU2ltcGxlQ29sb3IoMCwgMTI4LCAwKSB9OwogCiAgICAgY29uc3QgU2ltcGxl
Q29sb3ImIHBhdHRlcm5Db2xvciA9IHN0eWxlLm1vZGUgPT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkdyYW1tYXIgPyBncmFtbWFyUGF0dGVybkNvbG9yIDogc3BlbGxpbmdQYXR0ZXJu
Q29sb3I7Ci0gICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0dGVybkNv
bG9yLnJlZENvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgcGF0dGVy
bkNvbG9yLmJsdWVDb21wb25lbnQoKSwgcGF0dGVybkNvbG9yLmFscGhhQ29tcG9uZW50KCkpOwor
ICAgIGF1dG8gcGF0dGVybkNvbG9yQ29tcG9uZW50cyA9IHBhdHRlcm5Db2xvci5hc1NSR0JBPHVp
bnQ4X3Q+KCk7CisgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgcGF0dGVy
bkNvbG9yQ29tcG9uZW50cy5yZWQsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMuZ3JlZW4sIHBhdHRl
cm5Db2xvckNvbXBvbmVudHMuYmx1ZSwgcGF0dGVybkNvbG9yQ29tcG9uZW50cy5hbHBoYSk7CiAK
ICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlID0gZ2V0VXNlclRvQmFzZUNUTShjb250
ZXh0KTsKICAgICBDR1BvaW50IHBoYXNlID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBv
aW50LCB1c2VyVG9CYXNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc5LDcgKzM3
OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3QKIAogRDJEMV9D
T0xPUl9GIEdyYXBoaWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3Im
IGNvbG9yKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxv
c3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+
KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50
R2xvYmFsQWxwaGEoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMiw3ICsxNDAyLDcgQEAgQ29s
b3IgUmVuZGVyVGhlbWU6OmRpc2FibGVkVGV4dENvbG9yKGNvbgogICAgIC8vIElmIHRoZXJlJ3Mg
bm90IHZlcnkgbXVjaCBjb250cmFzdCBiZXR3ZWVuIHRoZSBkaXNhYmxlZCBjb2xvciBhbmQgdGhl
IGJhY2tncm91bmQgY29sb3IsCiAgICAgLy8ganVzdCBsZWF2ZSB0aGUgdGV4dCBjb2xvciBhbG9u
ZS4gV2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgYSBnb29kIGNvbnRyYXN0IGNvbG9yIHNjaGVtZSBz
byB0aGF0IGl0IGhhcyByZWFsbHkgYmFkIGNvbnRyYXN0LgogICAgIC8vIElmIHRoZSBjb250cmFz
dCB3YXMgYWxyZWFkeSBwb29yLCB0aGVuIGl0IGRvZXNuJ3QgZG8gYW55IGdvb2QgdG8gY2hhbmdl
IGl0IHRvIGEgZGlmZmVyZW50IHBvb3IgY29udHJhc3QgY29sb3Igc2NoZW1lLgotICAgIGlmIChj
b250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUxvc3N5KCksIGJhY2tncm91bmRDb2xv
ci50b1NSR0JBTG9zc3koKSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUpCisgICAgaWYgKGNvbnRy
YXN0UmF0aW8oZGlzYWJsZWRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCksIGJhY2tncm91bmRD
b2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpIDwgbWluQ29sb3JDb250cmFzdFZhbHVlKQogICAg
ICAgICByZXR1cm4gdGV4dENvbG9yOwogCiAgICAgcmV0dXJuIGRpc2FibGVkQ29sb3I7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAy
NjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwNTUsNyArMTA1NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50QnV0dG9uRGVjb3JhdGkKIHN0YXRpYyBib29sIHNob3VsZFVzZUNvbnZleEdyYWRpZW50KGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJh
Y2tncm91bmRDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJh
Y2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgZmxvYXQgbGFyZ2VzdE5v
bkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICByZXR1cm4gYSA+IDAu
NSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsIDwgMC41OwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgdGV4dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91
bmQKIHsKICAgICAvLyBVc2VzIHRoZSBXQ0FHIDIuMCBkZWZpbml0aW9uIG9mIGxlZ2liaWxpdHk6
IGEgY29udHJhc3QgcmF0aW8gb2YgNC41OjEgb3IgZ3JlYXRlci4KICAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvV0NBRzIwLyN2aXN1YWwtYXVkaW8tY29udHJhc3QtY29udHJhc3QKLSAgICBy
ZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IudG9TUkdCQUxvc3N5KCksIGJhY2tncm91bmRD
b2xvci50b1NSR0JBTG9zc3koKSkgPiA0LjU7CisgICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4
dENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKSkgPiA0LjU7CiB9CiAKIHN0YXRpYyBDb2xvciBhZGp1c3RDb2xvckZvclZpc2li
aWxpdHlPbkJhY2tncm91bmQoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0Fu
aW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25J
bXBsLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtODEsMTUgKzgxLDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYW5pbWF0ZShTVkdFbGVtZW50
KiwgZmxvYXQgcHJvZ3Jlc3MsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBDb2xvciYgYW5pbWF0ZWQp
CiAgICAgewotICAgICAgICBhdXRvIHNpbXBsZUFuaW1hdGVkID0gYW5pbWF0ZWQudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25N
b2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
biA9IHRvQXRFbmRPZkR1cmF0aW9uKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAg
ICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OworICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9u
TW9kZTo6VG8gPyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CisgICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlv
bigpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICAKLSAgICAgICAgZmxvYXQgcmVk
ID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20ucmVkQ29t
cG9uZW50KCksIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5yZWRDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQucmVkQ29tcG9uZW50KCkpOwotICAgICAg
ICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1w
bGVGcm9tLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCksIHNpbXBs
ZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmdyZWVu
Q29tcG9uZW50KCkpOwotICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUby5ibHVl
Q29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWVDb21wb25lbnQoKSwgc2lt
cGxlQW5pbWF0ZWQuYmx1ZUNvbXBvbmVudCgpKTsKLSAgICAgICAgZmxvYXQgYWxwaGEgPSBCYXNl
OjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5hbHBoYUNvbXBvbmVu
dCgpLCBzaW1wbGVUby5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5h
bHBoYUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICAg
ICAgZmxvYXQgcmVkID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBs
ZUZyb20ucmVkLCBzaW1wbGVUby5yZWQsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLnJlZCwgc2lt
cGxlQW5pbWF0ZWQucmVkKTsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHBy
b2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbiwgc2ltcGxlVG8uZ3JlZW4sIHNp
bXBsZVRvQXRFbmRPZkR1cmF0aW9uLmdyZWVuLCBzaW1wbGVBbmltYXRlZC5ncmVlbik7CisgICAg
ICAgIGZsb2F0IGJsdWUgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2lt
cGxlRnJvbS5ibHVlLCBzaW1wbGVUby5ibHVlLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVl
LCBzaW1wbGVBbmltYXRlZC5ibHVlKTsKKyAgICAgICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmlt
YXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5hbHBoYSwgc2ltcGxlVG8uYWxw
aGEsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmFscGhhLCBzaW1wbGVBbmltYXRlZC5hbHBoYSk7
CiAgICAgICAgIAogICAgICAgICBhbmltYXRlZCA9IG1ha2VTaW1wbGVDb2xvcihyb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4pLCBy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KGFscGhhKSk7CiAgICAgfQpAQCAtMTAzLDEyICsxMDMsMTIgQEAgcHVibGljOgogICAgICAgICBp
ZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
ICAgIAotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3IudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJvbUNvbG9yLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gdG9Db2xvci50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgICAgICBmbG9hdCByZWQgPSBzaW1wbGVGcm9tLnJl
ZENvbXBvbmVudCgpIC0gc2ltcGxlVG8ucmVkQ29tcG9uZW50KCk7Ci0gICAgICAgIGZsb2F0IGdy
ZWVuID0gc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgpIC0gc2ltcGxlVG8uZ3JlZW5Db21wb25l
bnQoKTsKLSAgICAgICAgZmxvYXQgYmx1ZSA9IHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpIC0g
c2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpOworICAgICAgICBmbG9hdCByZWQgPSBzaW1wbGVGcm9t
LnJlZCAtIHNpbXBsZVRvLnJlZDsKKyAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdy
ZWVuIC0gc2ltcGxlVG8uZ3JlZW47CisgICAgICAgIGZsb2F0IGJsdWUgPSBzaW1wbGVGcm9tLmJs
dWUgLSBzaW1wbGVUby5ibHVlOwogCiAgICAgICAgIHJldHVybiBzdGQ6Omh5cG90KHJlZCwgZ3Jl
ZW4sIGJsdWUpOwogICAgIH0KQEAgLTEyNiwxNCArMTI2LDE0IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGFkZEZyb21BbmRUb1ZhbHVlcyhTVkdFbGVtZW50Kikgb3ZlcnJpZGUKICAgICB7Ci0gICAg
ICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwot
ICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
ICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwog
CiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhhIG9uIHJlc3VsdCB0
byAxMDAlIG9wYXF1ZS4KICAgICAgICAgbV90byA9IG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
ICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkQ29tcG9uZW50KCkgKyBz
aW1wbGVGcm9tLnJlZENvbXBvbmVudCgpKSwKLSAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoc2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSArIHNpbXBsZUZyb20uZ3JlZW5Db21w
b25lbnQoKSksCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRv
LmJsdWVDb21wb25lbnQoKSArIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpKQorICAgICAgICAg
ICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5yZWQgKyBzaW1wbGVGcm9tLnJl
ZCksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVu
ICsgc2ltcGxlRnJvbS5ncmVlbiksCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHNpbXBsZVRvLmJsdWUgKyBzaW1wbGVGcm9tLmJsdWUpCiAgICAgICAgICk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wNy0wMyAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAxIG9mIFNpbXBsZUNvbG9yIGFu
ZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252ZXJn
ZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTM5NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAg
QWRhcHQgdG8gdXNlIHRlbXBsYXRpemVkIHRvU1JHQkFMb3NzeTxmbG9hdC91aW50OF90Pi4KKwog
MjAyMC0wNy0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHN1cHBvcnQgZm9yIEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3Bw
CShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dl
YktpdENvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCB2b2lkIHdlYmtp
dENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQod2Vi
Q29yZUNvbG9yLmlzVmFsaWQoKSk7CiAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVD
b2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHdlYkNvcmVDb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgY29sb3ItPnJlZCA9IHI7CiAgICAgY29sb3It
PmdyZWVuID0gZzsKICAgICBjb2xvci0+Ymx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmlld0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0
dXJlQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2
b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlCiAgICAgICAgIGlmIChjb2xv
ci5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yRm9yQ3VycmVudFNu
YXBzaG90ID0gY29sb3I7CiAgICAgICAgICAgICBpZiAoIW1fY3VycmVudFN3aXBlU25hcHNob3RQ
YXR0ZXJuKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGFd
ID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgICAgICAgICAgICAgYXV0byBbcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgICAgICAg
ICAgICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RQYXR0ZXJuID0gYWRvcHRSZWYoY2Fpcm9fcGF0
dGVybl9jcmVhdGVfcmdiYShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Niw3ICs2NTYsNyBA
QCBib29sIFdlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvCiAgICAgaWYgKCFiZ0Nv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBbciwgZywg
YiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
YmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgKnJlZCA9IHI7CiAgICAgKmdyZWVu
ID0gZzsKICAgICAqYmx1ZSA9IGI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5Myw3ICs2OTMsNyBAQCBzdGF0aWMg
TlNPYmplY3QqIGFuaW1hdGlvblZhbHVlRnJvbUtleWZyCiAgICAgICAgIHJldHVybiBAKGtleWZy
YW1lVmFsdWUubnVtYmVyVmFsdWUoKSk7CiAgICAgICAgICAgICAKICAgICBjYXNlIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWU6OkNvbG9yS2V5VHlwZTogewotICAgICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgpLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0ga2V5ZnJhbWVW
YWx1ZS5jb2xvclZhbHVlKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIHJldHVy
biBAWyBAKHIpLCBAKGcpLCBAKGIpLCBAKGEpIF07CiAgICAgfQogCkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM5MjUpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0w
Ny0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAxIG9m
IFNpbXBsZUNvbG9yIGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUg
LSBsZXQncyBjb252ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTM5NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisgICAgICAgIEFkYXB0IHRlc3RzIHRvIHVzZSB0ZW1wbGF0aXplZCB0
b1NSR0JBTG9zc3k8ZmxvYXQvdWludDhfdD4uCisKIDIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBFTkFCTEVfSU5Q
VVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiB7CiAg
ICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRv
SFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEo
Y29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBo
c2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRp
b24pOwpAQCAtNTQsNyArNTQsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIHsKICAg
ICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9I
U0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShj
b2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7CkBAIC03MCw3ICs3MCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBD
b2xvciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogCi0gICAgYXV0byBoc2xh
Q29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9y
ID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xv
ci5zYXR1cmF0aW9uKTsKQEAgLTg2LDcgKzg2LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3Jl
ZW4pCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKTsKIAot
ICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBh
dXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVD
VF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMDIsNyArMTAyLDcgQEAg
VEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKICAgICBDb2xvciBjb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigwLCAwLCAyNTUpOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3Iu
dG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC42NjY2NjY2OSwgaHNs
YUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9u
KTsKQEAgLTExOCw3ICsxMTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKIHsK
ICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9y
ID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRv
SFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0
dXJhdGlvbik7CkBAIC0xMzQsNyArMTM0LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkK
IHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmF5OwogCi0gICAgYXV0byBoc2xhQ29sb3Ig
PSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9I
U0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1
cmF0aW9uKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdy
YXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBo
c2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNv
bG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5zYXR1cmF0aW9uKTsKQEAgLTE4MywyOSArMTgzLDI5IEBAIFRFU1QoQ29sb3IsIFZhbGlk
aXR5KQogICAgIHZhbGlkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMSwgMiwgMywgNCk7CiAgICAg
RVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxp
ZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzaW1wbGVWYWxpZENvbG9yID0gdmFsaWRD
b2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxp
ZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xv
ci5ncmVlbkNvbXBvbmVudCgpLCAyKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5i
bHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLmFscGhh
Q29tcG9uZW50KCksIDQpOworICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMgPSB2YWxpZENv
bG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29t
cG9uZW50cy5yZWQsIDEpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5ncmVl
biwgMik7CisgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOworICAg
IEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5hbHBoYSwgNCk7CiAKICAgICBDb2xvciB5
ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3IpKTsKICAgICBFWFBFQ1RfVFJV
RSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRSh5ZXRB
bm90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc2ltcGxlWWV0QW5vdGhl
clZhbGlkQ29sb3IgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5yZWRDb21wb25l
bnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLmdyZWVu
Q29tcG9uZW50KCksIDIpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xv
ci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFs
aWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKKyAgICBhdXRvIHlldEFub3RoZXJWYWxpZENv
bG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAx
KTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAy
KTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMp
OworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuYWxwaGEsIDQp
OwogCiAgICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90aGVyVmFsaWRDb2xvcik7
CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNU
X0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc2ltcGxlT3Ro
ZXJWYWxpZENvbG9yID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5yZWRDb21wb25lbnQoKSwgMSk7
Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAy
KTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmJsdWVDb21wb25lbnQoKSwg
Myk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgp
LCA0KTsKKyAgICBhdXRvIG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSBvdGhlclZhbGlkQ29s
b3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xv
ckNvbXBvbmVudHMucmVkLCAxKTsKKyAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9u
ZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMu
Ymx1ZSwgMyk7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuYWxwaGEs
IDQpOwogfQogCiBURVNUKENvbG9yLCBMdW1pbmFuY2UpCkBAIC0yMTYsMjEgKzIxNiwyMiBAQCBU
RVNUKENvbG9yLCBMdW1pbmFuY2UpCiAgICAgYXV0byBjID0gbWFrZVNpbXBsZUNvbG9yKDg1LCA5
MCwgMTYwKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoYykubHVtaW5hbmNlKCksIDAuMTE3
ODE2OTIpOwogCi0gICAgRVhQRUNUX0VRKGMucmVkQ29tcG9uZW50KCksIDg1KTsKLSAgICBFWFBF
Q1RfRVEoYy5ncmVlbkNvbXBvbmVudCgpLCA5MCk7Ci0gICAgRVhQRUNUX0VRKGMuYmx1ZUNvbXBv
bmVudCgpLCAxNjApOwotCi0gICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjKS5saWdodGVuZWQo
KS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihj
TGlndGVuZWQpLmx1bWluYW5jZSgpLCAwLjI5MTY4ODA4KTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3Rl
bmVkLnJlZENvbXBvbmVudCgpLCAxMzApOwotICAgIEVYUEVDVF9FUShjTGlndGVuZWQuZ3JlZW5D
b21wb25lbnQoKSwgMTM3KTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmJsdWVDb21wb25lbnQo
KSwgMjQ0KTsKLQotICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoYykuZGFya2VuZWQoKS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjRGFya2Vu
ZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjcyNyk7Ci0gICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5y
ZWRDb21wb25lbnQoKSwgNDApOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQuZ3JlZW5Db21wb25l
bnQoKSwgNDMpOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQuYmx1ZUNvbXBvbmVudCgpLCA3Nik7
CisgICAgYXV0byBjQ29tcG9uZW50cyA9IGMuYXNTUkdCQTx1aW50OF90PigpOworICAgIEVYUEVD
VF9FUShjQ29tcG9uZW50cy5yZWQsIDg1KTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuZ3Jl
ZW4sIDkwKTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsKKworICAgIGF1
dG8gY0xpZ3RlbmVkID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKG1ha2VTaW1wbGVDb2xvcihjTGlndGVuZWQp
KS5sdW1pbmFuY2UoKSwgMC4yOTE2ODgwOCk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWQs
IDEzMCk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ncmVlbiwgMTM3KTsKKyAgICBFWFBFQ1Rf
RVEoY0xpZ3RlbmVkLmJsdWUsIDI0NCk7CisKKyAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGMp
LmRhcmtlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KENvbG9yKG1ha2VTaW1wbGVDb2xvcihjRGFya2VuZWQpKS5sdW1pbmFuY2UoKSwgMC4wMjcwMDY3
MjcpOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkLCA0MCk7CisgICAgRVhQRUNUX0VRKGNE
YXJrZW5lZC5ncmVlbiwgNDMpOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQuYmx1ZSwgNzYpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAko
cmV2aXNpb24gMjYzOTE4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4
dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCBU
RVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKICAgICBDb2xvciBwM0NvbG9y
IHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRp
c3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKLSAg
ICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JH
QkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIEVYUEVDVF9UUlVF
KFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwgMS4wZikpOwogICAgIEVY
UEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2
MjUzNzg4NWYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JH
QkFDb2xvci5ibHVlLCAwLjE0OTE0NzgzOGYpKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCBURVNUKEV4
dGVuZGVkQ29sb3IsIExpbmVhclNSR0JDb252ZXJzaW9uCiB7CiAgICAgQ29sb3IgbGluZWFyQ29s
b3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6
TGluZWFyUkdCKSB9OwogICAgIEVYUEVDVF9UUlVFKGxpbmVhckNvbG9yLmlzRXh0ZW5kZWQoKSk7
Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAg
YXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAg
IEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwgMS4w
ZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9y
LmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403521</attachid>
            <date>2020-07-04 06:23:43 -0700</date>
            <delta_ts>2020-07-04 08:45:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213948-20200704062342.patch</filename>
            <type>text/plain</type>
            <size>71218</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2Vu
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojp0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpibGVuZFNvdXJjZU92ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6YmxlbmRXaXRoV2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFzQVJHQik6CisgICAgICAg
IChXZWJDb3JlOjphc1NSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnBy
ZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENv
bXBvbmVudEJ5dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9Db21wb25lbnRCeXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRD
b2xvcjo6dG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNr
aW5nU3RvcmU6OmJsZW5kUGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OnBpeGVsVmFsdWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVD
b2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphc1NSR0JBIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpyZWRDb21wb25lbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmdyZWVuQ29tcG9uZW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpibHVlQ29tcG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNl
dEZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6
OnNldFRvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBQW5pbWF0aW9uV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNl
dEZyb21WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVl
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVvbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnM6OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnM6OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpkaXNhYmxlZFRleHRDb2xvciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNlQ29udmV4R3JhZGllbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBz
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uOjphbmltYXRlKToKKwog
MjAyMC0wNy0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
Q29yZS9Tb3VyY2VzLnR4dDogUmVtb3ZlICNpZiBFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE5NzAsNyArMTk3MCw2IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2Ft
cGxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0
UnVuLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05OTg0LDcgKzk5
ODQsNiBAQAogCQk3QzMwRDk4MDFGODE1QUMxMDAyNjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBYm9ydENvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMEQ5ODExRjgxNUFDMTAwMjY4MzU2IC8q
IEpTQWJvcnRTaWduYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBYm9y
dFNpZ25hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMwRDk4MjFGODE1QUMy
MDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0Fib3J0U2lnbmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJN0MzMUM4OEEyNDdBRDU5NDAwNUJGMzE5IC8qIFNpbXBsZUNvbG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUNvbG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBsZUNvbG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUNvbG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzMwQTAxMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDMzMwQTAzMURGOUU5NUIwMEQzMzk1QyAvKiBQb3NpdGlvbk9wdGlvbnMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFBvc2l0aW9uT3B0aW9ucy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTY5Nyw3ICsyNTY5Niw2IEBACiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5k
ZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIu
Y3BwICovLAogCQkJCTBGM0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8s
Ci0JCQkJN0MzMUM4OEEyNDdBRDU5NDAwNUJGMzE5IC8qIFNpbXBsZUNvbG9yLmNwcCAqLywKIAkJ
CQk3QzMxQzg4QzI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29sb3IuaCAqLywKIAkJCQlDRDY0
MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNE
QzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5ODMsMTAgKzE5ODMsMTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
Y29sb3JWYWx1ZQogICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSgpKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBjb2xvciA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAg
ciA9IGNvbG9yLnJlZENvbXBvbmVudCgpOwotICAgIGcgPSBjb2xvci5ncmVlbkNvbXBvbmVudCgp
OwotICAgIGIgPSBjb2xvci5ibHVlQ29tcG9uZW50KCk7CisgICAgYXV0byBjb2xvciA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgIHIgPSBjb2xvci5yZWQ7CisgICAgZyA9IGNvbG9yLmdyZWVuOwor
ICAgIGIgPSBjb2xvci5ibHVlOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsMTQgKzkyLDE0IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0
dHJpYnV0ZVNldEYKIAogICAgIENvbG9yIGJnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICBpZiAoYmdDb2xvci5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKICAgICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50
ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJf
QkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAgIENvbG9yIGZnQ29sb3IgPSBz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIGlmIChm
Z0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGZnQ29sb3Iu
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBm
Z0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICBidWZmZXIucmVzZXQoZ19z
dHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIHIsIGcsIGIpKTsKICAgICAgICAgcmVzdWx0ID0gYWRk
VG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRL
X1RFWFRfQVRUUl9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MDEsMTAgKzcwMSwxMCBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFBy
ZXZlbnRLZXlib2FyCiAKIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZShpbnQmIHIs
IGludCYgZywgaW50JiBiKSBjb25zdAogewotICAgIGF1dG8gY29sb3IgPSBjb2xvckF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlKS50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0gY29sb3IuZ3JlZW5D
b21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOworICAgIGF1dG8gY29s
b3IgPSBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlKS50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOworICAgIGcgPSBjb2xvci5n
cmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKIH0KIAogQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVk
T2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJH
QkNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIERl
cHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBibHVlKCkgeyByZXR1cm4gbV9ibHVlOyB9CiAg
ICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWUmIGFscGhhKCkgeyByZXR1cm4gbV9hbHBo
YTsgfQogCi0gICAgU2ltcGxlQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CisgICAgU2ltcGxlQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtYWtlU2ltcGxlQ29sb3Io
bV9jb2xvcik7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBl
PiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBjcmVhdGVXcmFwcGVy
KENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJlcikKQEAgLTQ2LDE1
ICs0NiwxNSBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIERlcHJlY2F0ZWRDU1NPTVJHQkNvbG9y
KENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAg
IDogbV9jb2xvcihjb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKQotICAgICAgICAsIG1f
cmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkQ29tcG9uZW50KCkpKQotICAgICAg
ICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbkNvbXBvbmVudCgp
KSkKLSAgICAgICAgLCBtX2JsdWUoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ibHVlQ29t
cG9uZW50KCkpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xv
ci5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKSkpCisgICAgICAgIDogbV9jb2xvcihjb2xvci50b1NS
R0JBTG9zc3k8dWludDhfdD4oKSkKKyAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVy
LCBtX2NvbG9yLnJlZCkpCisgICAgICAgICwgbV9ncmVlbihjcmVhdGVXcmFwcGVyKG93bmVyLCBt
X2NvbG9yLmdyZWVuKSkKKyAgICAgICAgLCBtX2JsdWUoY3JlYXRlV3JhcHBlcihvd25lciwgbV9j
b2xvci5ibHVlKSkKKyAgICAgICAgLCBtX2FscGhhKGNyZWF0ZVdyYXBwZXIob3duZXIsIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KG1fY29sb3IuYWxwaGEpKSkKICAgICB7CiAgICAgfQogCi0gICAg
U2ltcGxlQ29sb3IgbV9jb2xvcjsKKyAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yOwogICAgIFJl
ZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9yZWQ7CiAgICAgUmVmPERlcHJlY2F0
ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2dyZWVuOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ibHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MjEs
NyArNjIxLDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUgogICAg
ICAgICAgICAgICAgIGlmIChyZW5kZXJTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBhdXRv
IHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRv
U1JHQkFMb3NzeSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaHNsYSA9IHRvSFNM
QSh0ZXh0Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGUgdW5kZXJsaW5lIGNvbG9yIHRvIHRo
ZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEgYnkgMzglLAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJh
Y2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjYz
OTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25z
dAogICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAgICAgIHJl
dHVybiBsaWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAg
ICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKIAogICAgIGlmICh2ID09IDAuMGYp
CkBAIC0xMDMsNyArMTAzLDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKICAgICBp
ZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFy
a2VuZWRXaGl0ZTsKICAgICAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwogCiAgICAg
ZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0g
c3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKQEAgLTExNCwxNCArMTE0LDE0IEBAIENv
bG9yIENvbG9yOjpkYXJrZW5lZCgpIGNvbnN0CiBmbG9hdCBDb2xvcjo6bGlnaHRuZXNzKCkgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYXZvaWQgY29udmVyc2lvbiB0
byBzUkdCIGJ5IGhhdmluZyBwZXItY29sb3JzcGFjZSBhbGdvcml0aG1zIGZvciBIU0wuCi0gICAg
cmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBTG9zc3koKSk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogfQogCiBmbG9hdCBDb2xv
cjo6bHVtaW5hbmNlKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkg
YXZvaWQgY29udmVyc2lvbiB0byBzUkdCIGJ5IGhhdmluZyBwZXItY29sb3JzcGFjZSBhbGdvcml0
aG1zCiAgICAgLy8gZm9yIGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYykueUNvbXBvbmVu
dCgpKS4KLSAgICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFMb3NzeSgpKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiB9CiAK
IENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKQEAgLTE0OSw3
ICsxNDksNyBAQCBDb2xvciBDb2xvcjo6c2VtYW50aWNDb2xvcigpIGNvbnN0CiAgICAgaWYgKGlz
U2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgcmV0dXJuIHsgdG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSwgU2VtYW50aWMgfTsKKyAgICByZXR1cm4geyBtYWtlU2ltcGxl
Q29sb3IodG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpLCBTZW1hbnRpYyB9OwogfQogCiBzdGQ6OnBh
aXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3BhY2VB
bmRDb21wb25lbnRzKCkgY29uc3QKQEAgLTE1OSwyMCArMTU5LDYgQEAgc3RkOjpwYWlyPENvbG9y
U3BhY2UsIENvbG9yQ29tcG9uZW50czxmbAogICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0Is
IGFzQ29sb3JDb21wb25lbnRzKGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKSkgfTsKIH0KIAot
U2ltcGxlQ29sb3IgQ29sb3I6OnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3QKLXsKLSAg
ICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGFzRXh0
ZW5kZWQoKS50b1NSR0JBTG9zc3koKSk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCk7Ci19Ci0KLVNS
R0JBPGZsb2F0PiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRl
bmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeSgpOwotICAg
IHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkE8ZmxvYXQ+KCk7Ci19Ci0KIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICByZXR1
cm4gdHMgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEsMTAgKzEyMSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6
OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gY29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNv
bG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xv
ciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OwotCi0gICAgLy8gVGhpcyB3aWxsIGNv
bnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIFdFQkNPUkVf
RVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBTG9zc3koKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdDsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
IGRhcmtlbmVkKCkgY29uc3Q7CkBAIC0yNjgsNiArMjY1LDEzIEBAIGlubGluZSB1bnNpZ25lZCBD
b2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5z
aW1wbGVDb2xvckFuZEZsYWdzKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4g
Q29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NSR0JBTG9zc3k8VD4oKTsKKyAgICByZXR1cm4g
YXNTaW1wbGUoKS5hc1NSR0JBPFQ+KCk7Cit9CisKIGlubGluZSBDb2xvciBDb2xvcjo6aW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGFscGhhID8gaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYS52YWx1ZSgpKSA6ICp0aGlz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JC
bGVuZGluZy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4
IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYgYmFja2QKICAgICBpZiAoIXNv
dXJjZS5hbHBoYSgpKQogICAgICAgICByZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNr
ZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VC
LCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8g
W2JhY2tkcm9wUiwgYmFja2Ryb3BHLCBiYWNrZHJvcEIsIGJhY2tkcm9wQV0gPSBiYWNrZHJvcC50
b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3Vy
Y2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgIGlu
dCBkID0gMHhGRiAqIChiYWNrZHJvcEEgKyBzb3VyY2VBKSAtIGJhY2tkcm9wQSAqIHNvdXJjZUE7
CiAgICAgaW50IGEgPSBkIC8gMHhGRjsKQEAgLTY4LDcgKzY4LDcgQEAgQ29sb3IgYmxlbmRXaXRo
V2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIGlmICghY29sb3IuaXNPcGFxdWUoKSkKICAg
ICAgICAgcmV0dXJuIGNvbG9yOwogCi0gICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4
aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
OworICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxw
aGFdID0gY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKICAgICBTaW1wbGVDb2xvciBy
ZXN1bHQ7CiAgICAgZm9yIChpbnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBo
YTsgYWxwaGEgKz0gYWxwaGFJbmNyZW1lbnQpIHsKQEAgLTk3LDE4ICs5NywxNyBAQCBDb2xvciBi
bGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIC8vIFNpbmNlIHBy
ZW11bHRpcGx5Q2VpbGluZygpIGJhaWxzIG9uIHplcm8gYWxwaGEsIHNwZWNpYWwtY2FzZSB0aGF0
LgotICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20gPSBmcm9tLmFscGhhKCkgPyBwcmVtdWx0aXBs
eUNlaWxpbmcoZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3Bh
cmVudDsKLSAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHRvLmFscGhhKCkgPyBwcmVtdWx0aXBs
eUNlaWxpbmcodG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkgOiBDb2xvcjo6dHJhbnNwYXJl
bnQ7Ci0KLSAgICBhdXRvIHByZW11bHRCbGVuZGVkID0gbWFrZVNpbXBsZUNvbG9yKAotICAgICAg
ICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVs
dGlwbGllZFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJs
ZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRpcGxpZWRUby5n
cmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11
bHRpcGxpZWRGcm9tLmJsdWVDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmJsdWVDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJv
bS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0aXBsaWVkVG8uYWxwaGFDb21wb25lbnQoKSwgcHJv
Z3Jlc3MpCisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWRDZWlsaW5n
KGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZFRv
ID0gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOworCisg
ICAgYXV0byBwcmVtdWx0aXBsaWVkQmxlbmRlZCA9IG1ha2VTaW1wbGVDb2xvcigKKyAgICAgICAg
V2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVtdWx0aXBsaWVkVG8ucmVk
LCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLmdy
ZWVuLCBwcmVtdWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6
YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGllZFRvLmJsdWUsIHByb2dy
ZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYWxwaGEsIHBy
ZW11bHRpcGxpZWRUby5hbHBoYSwgcHJvZ3Jlc3MpCiAgICAgKTsKIAotICAgIHJldHVybiB1bnBy
ZW11bHRpcGx5KHByZW11bHRCbGVuZGVkKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHVu
cHJlbXVsdGlwbGllZChwcmVtdWx0aXBsaWVkQmxlbmRlZC5hc1NSR0JBPHVpbnQ4X3Q+KCkpKTsK
IH0KIAogQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sb3ImIGZyb20sIGNv
bnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQpAQCAtMTE4LDE0ICsxMTcsMTQgQEAgQ29s
b3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogICAgIGlmIChwcm9ncmVzcyA9
PSAxICYmICF0by5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIGZy
b21TUkdCID0gZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIGF1dG8gdG9TUkdC
ID0gZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gZnJvbVNSR0IgPSBm
cm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gdG9TUkdCID0gZnJvbS50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCi0gICAg
ICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZENvbXBvbmVudCgpLCB0b1NSR0IucmVkQ29t
cG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuZ3Jl
ZW5Db21wb25lbnQoKSwgdG9TUkdCLmdyZWVuQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZUNvbXBvbmVudCgpLCB0b1NSR0IuYmx1ZUNv
bXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmFs
cGhhQ29tcG9uZW50KCksIHRvU1JHQi5hbHBoYUNvbXBvbmVudCgpLCBwcm9ncmVzcykKKyAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkLCB0b1NSR0IucmVkLCBwcm9ncmVzcyksCisg
ICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuLCB0b1NSR0IuZ3JlZW4sIHByb2dy
ZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZSwgdG9TUkdCLmJsdWUs
IHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGEsIHRvU1JH
Qi5hbHBoYSwgcHJvZ3Jlc3MpCiAgICAgKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzcsNCArMjM3LDIxIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXIKICAgICByZXR1cm4gIShhID09IGIpOwogfQogCisKKy8vIFBpeGVsIEZvcm1hdHMKKwor
c3RydWN0IEFSR0IgeworICAgIHVuc2lnbmVkIHZhbHVlOworfTsKKworY29uc3RleHByIEFSR0Ig
YXNBUkdCKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIHJldHVybiB7IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjb2xvci5hbHBoYSA8PCAyNCB8IGNvbG9yLnJlZCA8PCAxNiB8IGNvbG9yLmdy
ZWVuIDw8IDggfCBjb2xvci5ibHVlKSB9OworfQorCitjb25zdGV4cHIgU1JHQkE8dWludDhfdD4g
YXNTUkdCQShBUkdCIGNvbG9yKQoreworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGNvbG9yLnZhbHVlID4+IDE2KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUgPj4g
OCksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGNvbG9yLnZhbHVlKSwgc3RhdGljX2Nhc3Q8dWludDhf
dD4oY29sb3IudmFsdWUgPj4gMjQpIH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNCArNjYsNDMg
QEAgU1JHQkE8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8ZgogICAgIHJldHVybiB7
IHIgKiBhLCBnICogYSwgYiAqIGEsIGEgfTsKIH0KIAorU1JHQkE8ZmxvYXQ+IHVucHJlbXVsdGlw
bGllZChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbG9yKQoreworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gY29sb3I7CisgICAgcmV0dXJuIHsgciAvIGEsIGcgLyBhLCBiIC8gYSwgYSB9OworfQorCitT
UkdCQTx1aW50OF90PiBwcmVtdWx0aXBsaWVkRmxvb3JpbmcoU1JHQkE8dWludDhfdD4gY29sb3Ip
Cit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBpZiAoIWEpCisgICAgICAg
IHJldHVybiB7IDAsIDAsIDAsIDAgfTsKKyAgICBpZiAoYSA9PSAyNTUpCisgICAgICAgIHJldHVy
biBjb2xvcjsKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnky
NTUociAqIGEpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSks
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1NShiICogYSkpLCBhIH07Cit9CisK
K1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9y
KQoreworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAgaWYgKCFhKQorICAgICAg
ICByZXR1cm4geyAwLCAwLCAwLCAwIH07CisgICAgaWYgKGEgPT0gMjU1KQorICAgICAgICByZXR1
cm4gY29sb3I7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oZmFzdERpdmlkZUJ5
MjU1KHIgKiBhICsgMjU0KSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGZhc3REaXZpZGVCeTI1NShn
ICogYSArIDI1NCkpLCBzdGF0aWNfY2FzdDx1aW50OF90PihmYXN0RGl2aWRlQnkyNTUoYiAqIGEg
KyAyNTQpKSwgYSB9OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IHVucHJlbXVsdGlwbGll
ZENvbXBvbmVudEJ5dGUodWludDhfdCBjLCB1aW50OF90IGEpCit7CisgICAgcmV0dXJuIChmYXN0
TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHVucHJl
bXVsdGlwbGllZChTUkdCQTx1aW50OF90PiBjb2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGNvbG9yOworICAgIGlmICghYSB8fCBhID09IDI1NSkKKyAgICAgICAgcmV0dXJuIGNvbG9y
OworICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHVucHJlbXVsdGlwbGllZENvbXBv
bmVudEJ5dGUociwgYSkpLCBzdGF0aWNfY2FzdDx1aW50OF90Pih1bnByZW11bHRpcGxpZWRDb21w
b25lbnRCeXRlKGcsIGEpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4odW5wcmVtdWx0aXBsaWVkQ29t
cG9uZW50Qnl0ZShiLCBhKSksIGEgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGll
cy5oCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMSBAQCBmbG9h
dCBsdW1pbmFuY2UoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiBmbG9hdCBjb250cmFzdFJhdGlvKGNv
bnN0IFNSR0JBPGZsb2F0PiYsIGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBTUkdCQTxmbG9hdD4g
cHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKK1NSR0JBPGZsb2F0PiB1bnByZW11
bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRp
cGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90Pik7CitTUkdCQTx1aW50OF90PiBwcmVtdWx0aXBs
aWVkQ2VpbGluZyhTUkdCQTx1aW50OF90Pik7CitTUkdCQTx1aW50OF90PiB1bnByZW11bHRpcGxp
ZWQoU1JHQkE8dWludDhfdD4pOwogCiBpbmxpbmUgdWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9D
b21wb25lbnRCeXRlKGZsb2F0IGYpCiB7CkBAIC01NCw2ICs1OSwxOCBAQCBjb25zdGV4cHIgZmxv
YXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQoCiAgICAgcmV0dXJuIGJ5dGUgLyAyNTUuMGY7CiB9
CiAKK3RlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5cGU+IGlubGlu
ZSBDb2xvclR5cGU8dWludDhfdD4gY29udmVydFRvQ29tcG9uZW50Qnl0ZXMoY29uc3QgQ29sb3JU
eXBlPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBjb21wb25lbnRzID0gYXNDb2xvckNvbXBv
bmVudHMoY29sb3IpOworICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9u
ZW50c1swXSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1sxXSksIGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGUoY29tcG9uZW50c1syXSksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoY29t
cG9uZW50c1szXSkgfTsKK30KKwordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1l
IENvbG9yVHlwZT4gY29uc3RleHByIENvbG9yVHlwZTxmbG9hdD4gY29udmVydFRvQ29tcG9uZW50
RmxvYXRzKGNvbnN0IENvbG9yVHlwZTx1aW50OF90PiYgY29sb3IpCit7CisgICAgYXV0byBjb21w
b25lbnRzID0gYXNDb2xvckNvbXBvbmVudHMoY29sb3IpOworICAgIHJldHVybiB7IGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMF0pLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChj
b21wb25lbnRzWzFdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50c1syXSksIGNv
bnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbM10pIH07Cit9CisKIGNvbnN0ZXhwciB1
aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4g
KHZhbHVlIDw8IDgpIC0gdmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6
OmludmVydAogICAgIHJldHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBm
IC0gYzIsIDEuMGYgLSBjMywgb3ZlcnJpZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsKIH0KIAotU1JH
QkE8ZmxvYXQ+IEV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CitTUkdCQTxmbG9h
dD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKG1fY29sb3JTcGFjZSkgewogICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENv
bG9yLmgJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAj
aW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2lu
Y2x1ZGUgIkNvbG9yVHlwZXMuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1
ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00OSwxMSAr
NTEsMTggQEAgcHVibGljOgogICAgIFJlZjxFeHRlbmRlZENvbG9yPiBjb2xvcldpdGhBbHBoYShm
bG9hdCkgY29uc3Q7CiAgICAgUmVmPEV4dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxw
aGEoZmxvYXQpIGNvbnN0OwogCi0gICAgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0
OwotCiAgICAgYm9vbCBpc1doaXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0JsYWNrKCkgY29uc3Q7
CiAKKyAgICAvLyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBp
bnRvIHNSR0IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IHRv
U1JHQkFMb3NzeSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
c2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgIHJldHVybiB0b1NSR0JBRmxvYXRDb21wb25l
bnRzTG9zc3koKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQs
IHVpbnQ4X3Q+KQorICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRv
U1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgRXh0
ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQogICAgICAgICA6IG1fY29tcG9uZW50cyhjMSwgYzIsIGMzLCBh
bHBoYSkKQEAgLTYxLDYgKzcwLDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCisgICAgV0VC
Q09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpIGNv
bnN0OworCiAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBtX2NvbXBvbmVudHM7CiAgICAgQ29s
b3JTcGFjZSBtX2NvbG9yU3BhY2U7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgfQogCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0LCB1bnNpZ25lZCBy
LCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgSW50UmVjdCAmcmVjdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYiwgdWlu
dDhfdCBhKQogICAgIHsKICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhy
ZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEzNiw0NSArMTM2LDQ1IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKICAg
ICB9CiAKLSAgICB2b2lkIHNldFBpeGVsKHVpbnQzMl90KiBkZXN0LCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHZvaWQgc2V0UGl4ZWwodWludDMy
X3QqIGRlc3QsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIsIHVpbnQ4X3QgYSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChkZXN0KTsKICAgICAgICAgKmRlc3QgPSBwaXhlbFZhbHVlKHIs
IGcsIGIsIGEpOwogICAgIH0KIAotICAgIHZvaWQgc2V0UGl4ZWwoaW50IHgsIGludCB5LCB1bnNp
Z25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHZvaWQgc2V0
UGl4ZWwoaW50IHgsIGludCB5LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50
OF90IGEpCiAgICAgewogICAgICAgICBzZXRQaXhlbChwaXhlbEF0KHgsIHkpLCByLCBnLCBiLCBh
KTsKICAgICB9CiAKLSAgICB2b2lkIGJsZW5kUGl4ZWwodWludDMyX3QqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgdm9pZCBibGVuZFBp
eGVsKHVpbnQzMl90KiBkZXN0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50
OF90IGEpCiAgICAgewogICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgU2ltcGxlQ29sb3IgcGl4ZWwgeyAqZGVzdCB9OworICAgICAgICBhdXRvIHBpeGVsID0g
YXNTUkdCQShBUkdCIHsgKmRlc3QgfSk7CiAKLSAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhl
bC5pc1Zpc2libGUoKSkgeworICAgICAgICBpZiAoYSA+PSAyNTUgfHwgIXBpeGVsLmFscGhhKSB7
CiAgICAgICAgICAgICBzZXRQaXhlbChkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAg
ICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0aXBseUZsb29yaW5nKHBpeGVsKTsKKyAgICAgICAgICAg
IHBpeGVsID0gcHJlbXVsdGlwbGllZEZsb29yaW5nKHBpeGVsKTsKIAotICAgICAgICB1bnNpZ25l
ZCBkID0gMjU1IC0gYTsKKyAgICAgICAgdWludDhfdCBkID0gMjU1IC0gYTsKIAotICAgICAgICBy
ID0gZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgcGl4ZWwucmVkQ29tcG9uZW50KCkgKiBkKTsKLSAg
ICAgICAgZyA9IGZhc3REaXZpZGVCeTI1NShnICogYSArIHBpeGVsLmdyZWVuQ29tcG9uZW50KCkg
KiBkKTsKLSAgICAgICAgYiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIHBpeGVsLmJsdWVDb21w
b25lbnQoKSAqIGQpOwotICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwuYWxw
aGFDb21wb25lbnQoKSk7CisgICAgICAgIHIgPSBmYXN0RGl2aWRlQnkyNTUociAqIGEgKyBwaXhl
bC5yZWQgKiBkKTsKKyAgICAgICAgZyA9IGZhc3REaXZpZGVCeTI1NShnICogYSArIHBpeGVsLmdy
ZWVuICogZCk7CisgICAgICAgIGIgPSBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhlbC5ibHVl
ICogZCk7CisgICAgICAgIGEgKz0gZmFzdERpdmlkZUJ5MjU1KGQgKiBwaXhlbC5hbHBoYSk7CiAK
LSAgICAgICAgYXV0byByZXN1bHQgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gU1JHQkEgeyByLCBnLCBiLCBhIH07CiAKICAgICAgICAgaWYgKCFt
X3ByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICByZXN1bHQgPSB1bnByZW11bHRpcGx5KHJl
c3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSB1bnByZW11bHRpcGxpZWQocmVzdWx0KTsKIAot
ICAgICAgICAqZGVzdCA9IHJlc3VsdC52YWx1ZUFzQVJHQigpOworICAgICAgICAqZGVzdCA9IGFz
QVJHQihyZXN1bHQpLnZhbHVlOwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTIyMSwxNyArMjIxLDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCk7CiAg
ICAgfQogCi0gICAgdWludDMyX3QgcGl4ZWxWYWx1ZSh1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKSBjb25zdAorICAgIHVpbnQzMl90IHBpeGVsVmFsdWUodWlu
dDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYiwgdWludDhfdCBhKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiAhYSkKICAgICAgICAgICAgIHJldHVybiAw
OwogCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpOwor
ICAgICAgICBhdXRvIHJlc3VsdCA9IFNSR0JBIHsgciwgZywgYiwgYSB9OwogCiAgICAgICAgIGlm
IChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHBy
ZW11bHRpcGx5Rmxvb3JpbmcocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZW11bHRp
cGxpZWRGbG9vcmluZyhyZXN1bHQpOwogCi0gICAgICAgIHJldHVybiByZXN1bHQudmFsdWVBc0FS
R0IoKTsKKyAgICAgICAgcmV0dXJuIGFzQVJHQihyZXN1bHQpLnZhbHVlOwogICAgIH0KIAogICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiBtX3BpeGVsczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNv
bG9yLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaW1wbGVD
b2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQotewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0gMjU1KQotICAgICAgICBy
ZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUo
ciAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBh
KTsKLX0KLQotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlDZWlsaW5nKFNpbXBsZUNvbG9yIGNvbG9y
KQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0g
MjU1KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihm
YXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQp
LCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKLX0KLQotc3RhdGljIGlubGluZSB1
aW50MTZfdCB1bnByZW11bHRpcGx5Q2hhbm5lbCh1aW50OF90IGMsIHVpbnQ4X3QgYSkKLXsKLSAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKLX0KLQotU2ltcGxl
Q29sb3IgdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciBjb2xvcikKLXsKLSAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yOwotICAgIGlmICghYSB8fCBhID09IDI1NSkKLSAgICAgICAgcmV0dXJu
IGNvbG9yOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBseUNoYW5uZWwo
ciwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5lbChi
LCBhKSwgYSk7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjM5
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIHVp
bnQzMl90IHZhbHVlQXNBUkdCKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0
ZXhwciB1aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIGNv
bnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4g
MTY7IH0KLSAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBvbmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUgPj4gODsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFD
b21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDI0OyB9Ci0KICAgICBjb25zdGV4
cHIgZmxvYXQgYWxwaGFDb21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gY29udmVydFRv
Q29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSk7IH0KIAogICAgIGNvbnN0ZXhwciBib29s
IGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CkBA
IC02Miw3ICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KDB4RkYgLSByZWRDb21wb25lbnQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYg
LSBncmVlbkNvbXBvbmVudCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGJsdWVDb21w
b25lbnQoKSksIGFscGhhIH07CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFNSR0JBPFQ+IGFzU1JHQkEoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgU1JHQkE8VD4gYXNTUkdCQSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgIHJldHVybiB7
IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9u
ZW50RmxvYXQoZ3JlZW5Db21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVD
b21wb25lbnQoKSksICBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9
OworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4p
CisgICAgICAgICAgICByZXR1cm4geyByZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwg
Ymx1ZUNvbXBvbmVudCgpLCBhbHBoYUNvbXBvbmVudCgpIH07CisgICAgfQogCiAgICAgdGVtcGxh
dGU8c3RkOjpzaXplX3QgTj4KICAgICBjb25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25zdApAQCAt
NzksNiArODEsMTAgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBjb25zdGV4cHIg
dWludDhfdCByZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9Cisg
ICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlID4+IDg7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorCiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CiAK
QEAgLTkwLDEzICs5Niw5IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3Io
aW4KIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWlu
dDhfdD4mKTsKIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4m
KTsKIAotU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlGbG9vcmluZyhTaW1wbGVDb2xvcik7Ci1TaW1w
bGVDb2xvciBwcmVtdWx0aXBseUNlaWxpbmcoU2ltcGxlQ29sb3IpOwotU2ltcGxlQ29sb3IgdW5w
cmVtdWx0aXBseShTaW1wbGVDb2xvcik7Ci0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxl
Q29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFs
dWUoKTsKKyAgICByZXR1cm4gYS52YWx1ZUFzQVJHQigpID09IGIudmFsdWVBc0FSR0IoKTsKIH0K
IAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQpA
QCAtMTE2LDI1ICsxMTgsMTQgQEAgY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xv
cihpbgogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JB
PHVpbnQ4X3Q+JiBzUkdCQSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAg
IHJldHVybiB7IHIsIGcsIGIsIGEgfTsKKyAgICByZXR1cm4geyBzUkdCQS5yZWQsIHNSR0JBLmdy
ZWVuLCBzUkdCQS5ibHVlLCBzUkdCQS5hbHBoYSB9OwogfQogCiBpbmxpbmUgU2ltcGxlQ29sb3Ig
bWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgc1JHQkEpCiB7Ci0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBzUkdCQTsKLSAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGIp
LCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhzUkdCQSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gU2ltcGxlQ29sb3I6OmFzU1JHQkEoKSBjb25zdAotewot
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19mbG9hdGluZ19wb2ludF92PFQ+KQotICAgICAgICBy
ZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChyZWRDb21wb25lbnQoKSksIGNvbnZlcnRU
b0NvbXBvbmVudEZsb2F0KGdyZWVuQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9h
dChibHVlQ29tcG9uZW50KCkpLCAgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25l
bnQoKSkgfTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpLCBncmVl
bkNvbXBvbmVudCgpLCBibHVlQ29tcG9uZW50KCksIGFscGhhQ29tcG9uZW50KCkgfTsKLX0KLQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBzdGQgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQkocmV2aXNpb24gMjYzOTE4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYQogewogICAgIGlmICghaXNCYXNpY0FuaW1h
dGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUu
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRp
b24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwg
QChhKV1dOwogfQogCkBAIC00MzksNyArNDM5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFRvVmFsdQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVp
bnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VG9WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAt
NDk2LDcgKzQ5Niw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24q
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChh
dXRvJiBjb2xvcikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudGVt
cGxhdGUgdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIHJldHVybiBAW0AociksIEAo
ZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUFuaW1hdGlvbldpbi5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldp
bjo6c2V0RnJvbVZhbHUKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gdmFsdWUudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVu
dCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9u
ZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICBhdXRvIGNvbXBvbmVu
dHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBDR0Zsb2F0IGFbNF0gPSB7
IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBv
bmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0Yo
Q0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNldEZyb21WYWx1ZSht
X2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00MTksOCArNDE5LDggQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVlKAogICAgIGlmIChhbmltYXRpb25UeXBl
KCkgIT0gQmFzaWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2
YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIENHRmxvYXQgYVs0XSA9IHsgc2lt
cGxlQ29sb3IucmVkQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNp
bXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9
OworICAgIGF1dG8gY29tcG9uZW50cyA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwor
ICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNv
bXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVj
dG9yUmVmPiB2ID0gYWRvcHRDRihDQUNGVmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5p
bWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00ODks
OCArNDg5LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoYwogICAg
ICAgICAKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihD
RkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFj
a3MpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOwotICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgp
LCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50
KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICAgICAgYXV0byBjb21wb25l
bnRzID0gdmFsdWVbaV0udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIENHRmxvYXQg
YVs0XSA9IHsgY29tcG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1
ZSwgY29tcG9uZW50cy5hbHBoYSB9OwogICAgICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4g
diA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgICAgIENGQXJyYXlBcHBl
bmRWYWx1ZShhcnJheS5nZXQoKSwgdi5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3
IEBAIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBzZXRT
b3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNhaXJv
X3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRD
YWlyby5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiAKIHN0YXRpYyB2b2lkIGFk
ZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0dGVybl90ICpncmFkaWVudCwgR3JhZGllbnQ6OkNvbG9y
U3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9w
LmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xv
cl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxw
aGEpOwogfQogCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogCiBz
dGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xvclJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwg
aW50IGlkLCBHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAg
IGNhaXJvX21lc2hfcGF0dGVybl9zZXRfY29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCBy
LCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwogfQogCkBAIC0xMzUsOCArMTM1LDggQEAgc3RhdGlj
IHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fpcm9fcGF0dGVybgogCiBzdGF0aWMgR3JhZGllbnQ6OkNv
bG9yU3RvcCBpbnRlcnBvbGF0ZUNvbG9yU3RvcChHcmFkaWVudDo6Q29sb3JTdG9wIGZyb20sIEdy
YWRpZW50OjpDb2xvclN0b3AgdG8pCiB7Ci0gICAgYXV0byBbcjEsIGcxLCBiMSwgYTFdID0gZnJv
bS5jb2xvci50b1NSR0JBTG9zc3koKTsKLSAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0by5j
b2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyMSwgZzEsIGIxLCBhMV0gPSBmcm9tLmNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKKyAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0
by5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAKICAgICBmbG9hdCBvZmZzZXQgPSBmcm9t
Lm9mZnNldCArICh0by5vZmZzZXQgLSBmcm9tLm9mZnNldCkgKiAwLjVmOwogICAgIGZsb2F0IHIg
PSByMSArIChyMiAtIHIxKSAqIDAuNWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDkgQEAgdm9p
ZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZAogICAgICAgICB1bnNpZ25lZCog
cm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4
KyspIHsKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAg
ICBhdXRvIHBpeGVsQ29sb3IgPSB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0p
OwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcihsb29rVXBUYWJsZVtw
aXhlbENvbG9yLnJlZENvbXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNv
bXBvbmVudCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhl
bENvbG9yLmFscGhhQ29tcG9uZW50KCkpOwotICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlw
bHlDZWlsaW5nKHBpeGVsQ29sb3IpLnZhbHVlQXNBUkdCKCk7CisgICAgICAgICAgICBhdXRvIHBp
eGVsQ29tcG9uZW50cyA9IHVucHJlbXVsdGlwbGllZChhc1NSR0JBKEFSR0IgeyAqcGl4ZWwgfSkp
OworICAgICAgICAgICAgcGl4ZWxDb21wb25lbnRzID0geyBsb29rVXBUYWJsZVtwaXhlbENvbXBv
bmVudHMucmVkXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLmdyZWVuXSwgbG9va1VwVGFi
bGVbcGl4ZWxDb21wb25lbnRzLmJsdWVdLCBwaXhlbENvbXBvbmVudHMuYWxwaGEgfTsKKyAgICAg
ICAgICAgICpwaXhlbCA9IGFzQVJHQihwcmVtdWx0aXBsaWVkQ2VpbGluZyhwaXhlbENvbXBvbmVu
dHMpKS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICBjYWlyb19zdXJmYWNlX21hcmtfZGly
dHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgp
LCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCShy
ZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9OYXRpdmVJbWFnZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBD
b2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihjCiAgICAgICAgIHJldHVybiBD
b2xvcigpOwogCiAgICAgdW5zaWduZWQqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5z
aWduZWQqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAg
cmV0dXJuIHVucHJlbXVsdGlwbHkoU2ltcGxlQ29sb3IgeyAqcGl4ZWwgfSk7CisgICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcih1bnByZW11bHRpcGxpZWQoYXNTUkdCQShBUkdCIHsgKnBpeGVsIH0p
KSk7CiB9CiAKIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFn
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVM
aWdodGluZ05FT04uaAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMSwxMSArMTExLDExIEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlOZW8KICAgICAvLyBTZXQgbGlnaHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFy
Z3VtZW50cy5jb25zdE9uZSA9IDE7CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gbV9saWdodGlu
Z0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBjb2xvciA9IG1fbGln
aHRpbmdDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAotICAgIGZsb2F0QXJndW1lbnRz
LmNvbG9yUmVkID0gc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRBcmd1bWVu
dHMuY29sb3JHcmVlbiA9IHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRB
cmd1bWVudHMuY29sb3JCbHVlID0gc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpOworICAgIGZs
b2F0QXJndW1lbnRzLmNvbG9yUmVkID0gY29sb3IucmVkOworICAgIGZsb2F0QXJndW1lbnRzLmNv
bG9yR3JlZW4gPSBjb2xvci5ncmVlbjsKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBj
b2xvci5ibHVlOwogICAgIGZsb2F0QXJndW1lbnRzLnBhZGRpbmc0ID0gMDsKIAogICAgIGlmICht
X2xpZ2h0U291cmNlLT50eXBlKCkgPT0gTFNfUE9JTlQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDEwICs0MDUsMTAgQEAg
Ym9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcAogICAgIGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwogICAgIAogICAgIGlmIChvcGVyYXRpbmdDb2xv
clNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdG9MaW5lYXJTUkdCQShtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCkpOwor
ICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9y
LnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGln
aHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFM
b3NzeSgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdE
YXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0KICAgICBtX2xp
Z2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFu
c2Zvcm1Db2xvcihDbwogICAgIGlmIChjb2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOwor
ICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKIAogICAg
IGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3Bl
cmF0aW9uLT50cmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBi
b29sIEZpbHRlck9wZXJhdGlvbnM6OmludmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlz
U2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9y
ID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOwogCiAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJh
dGlvbnMpIHsKICAgICAgICAgaWYgKCFvcGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihz
UkdCQUNvbG9yKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQCBDb2xvcjo6Q29sb3IoY29uc3QgR2RrUkdCQSYgY29sb3IpCiAKIENvbG9yOjpv
cGVyYXRvciBHZGtSR0JBKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0Pigp
OwogICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyAr
MjUzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJl
ZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQ
cm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVz
ZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0g
PSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICBn
bFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGds
TGluZVdpZHRoKHdpZHRoKTsKIApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpkcmF3TnVtYmVyKGludCBudW0KICAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShz
dXJmYWNlKTsKIAogICAgIC8vIFNpbmNlIHdlIHdvbid0IHN3YXAgUitCIHdoZW4gdXBsb2FkaW5n
IGEgdGV4dHVyZSwgcGFpbnQgd2l0aCB0aGUgc3dhcHBlZCBSK0IgY29sb3IuCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19zZXRfc291cmNlX3Jn
YmEoY3IsIGIsIGcsIHIsIGEpOwogCiAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0KTsKQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVy
UHJvZ3JhbShUZXh0dXJlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAg
ICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhl
IGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHByZW11bHRpcGxpZWQoc2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5KCkpOwor
ICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xv
cigpLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9n
cmFtLmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0y
Zihwcm9ncmFtLmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkg
LyBmbG9hdChzaXplLmhlaWdodCgpKSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFt
LnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3U29saWRDb2xvcihjb24KICAgICBSZWY8VGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25z
KTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0
PigpKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIs
IGEpOwogICAgIGlmIChhIDwgMSAmJiBpc0JsZW5kaW5nQWxsb3dlZCkKICAgICAgICAgZmxhZ3Mg
fD0gU2hvdWxkQmxlbmQ7CkBAIC02ODYsNyArNjg2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NS
R0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKICAgICBnbENsZWFyQ29sb3IociwgZywgYiwgYSk7CiAgICAgZ2xDbGVhcihHTF9D
T0xPUl9CVUZGRVJfQklUKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBAIENvbG9yOjpDb2xvcihEMkQxX0NP
TE9SX0YgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihy
LCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiBEMkQxOjpWZWN0
b3I0RihyLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24g
MjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgR3JhZGll
bnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW4KICAgICBWZWN0b3I8RDJEMV9HUkFESUVOVF9T
VE9QPiBncmFkaWVudFN0b3BzOwogICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRXh0ZW5k
ZWRDb2xvci4KICAgICBmb3IgKGF1dG8gc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgYXV0byBb
ciwgZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwg
ZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgICAgIGdyYWRp
ZW50U3RvcHMuYXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29s
b3JGKHIsIGcsIGIsIGEpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsy
MDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVuCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBncmFtbWFyUGF0dGVybkNvbG9yIHsgbWFrZVNpbXBs
ZUNvbG9yKDAsIDEyOCwgMCkgfTsKIAogICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29s
b3IgPSBzdHlsZS5tb2RlID09IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFy
ID8gZ3JhbW1hclBhdHRlcm5Db2xvciA6IHNwZWxsaW5nUGF0dGVybkNvbG9yOwotICAgIENHQ29u
dGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQo
KSwgcGF0dGVybkNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9u
ZW50KCksIHBhdHRlcm5Db2xvci5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICBhdXRvIHBhdHRlcm5D
b2xvckNvbXBvbmVudHMgPSBwYXR0ZXJuQ29sb3IuYXNTUkdCQTx1aW50OF90PigpOworICAgIENH
Q29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMu
cmVkLCBwYXR0ZXJuQ29sb3JDb21wb25lbnRzLmdyZWVuLCBwYXR0ZXJuQ29sb3JDb21wb25lbnRz
LmJsdWUsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMuYWxwaGEpOwogCiAgICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gdXNlclRvQmFzZSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAgICAgQ0dQb2lu
dCBwaGFzZSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwb2ludCwgdXNlclRvQmFzZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90CiAKIEQyRDFfQ09MT1JfRiBHcmFwaGljc0Nv
bnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsK
LSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiBE
MkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCkpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlz
aW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MDIsNyArMTQwMiw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpk
aXNhYmxlZFRleHRDb2xvcihjb24KICAgICAvLyBJZiB0aGVyZSdzIG5vdCB2ZXJ5IG11Y2ggY29u
dHJhc3QgYmV0d2VlbiB0aGUgZGlzYWJsZWQgY29sb3IgYW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9y
LAogICAgIC8vIGp1c3QgbGVhdmUgdGhlIHRleHQgY29sb3IgYWxvbmUuIFdlIGRvbid0IHdhbnQg
dG8gY2hhbmdlIGEgZ29vZCBjb250cmFzdCBjb2xvciBzY2hlbWUgc28gdGhhdCBpdCBoYXMgcmVh
bGx5IGJhZCBjb250cmFzdC4KICAgICAvLyBJZiB0aGUgY29udHJhc3Qgd2FzIGFscmVhZHkgcG9v
ciwgdGhlbiBpdCBkb2Vzbid0IGRvIGFueSBnb29kIHRvIGNoYW5nZSBpdCB0byBhIGRpZmZlcmVu
dCBwb29yIGNvbnRyYXN0IGNvbG9yIHNjaGVtZS4KLSAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNh
YmxlZENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkp
IDwgbWluQ29sb3JDb250cmFzdFZhbHVlKQorICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVk
Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpKSA8IG1pbkNvbG9yQ29udHJhc3RWYWx1ZSkKICAgICAgICAgcmV0dXJuIHRleHRD
b2xvcjsKIAogICAgIHJldHVybiBkaXNhYmxlZENvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDU1LDcgKzEwNTUsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRp
CiBzdGF0aWMgYm9vbCBzaG91bGRVc2VDb252ZXhHcmFkaWVudChjb25zdCBDb2xvciYgYmFja2dy
b3VuZENvbG9yKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2lu
ZyBsdW1pbmFuY2UuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9T
UkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBz
dGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAgICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFs
cGhhQ2hhbm5lbCA8IDAuNTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRQYWludFN0eWxlLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBA
QCBib29sIHRleHRDb2xvcklzTGVnaWJsZUFnYWluc3RCYWNrZ3JvdW5kCiB7CiAgICAgLy8gVXNl
cyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlvbiBvZiBsZWdpYmlsaXR5OiBhIGNvbnRyYXN0IHJhdGlv
IG9mIDQuNToxIG9yIGdyZWF0ZXIuCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcy
MC8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0Ci0gICAgcmV0dXJuIGNvbnRyYXN0UmF0
aW8odGV4dENvbG9yLnRvU1JHQkFMb3NzeSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5
KCkpID4gNC41OworICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBTG9z
c3k8ZmxvYXQ+KCksIGJhY2tncm91bmRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpID4gNC41
OwogfQogCiBzdGF0aWMgQ29sb3IgYWRqdXN0Q29sb3JGb3JWaXNpYmlsaXR5T25CYWNrZ3JvdW5k
KGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZh
bHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAy
NjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRp
dGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDE1ICs4MSwxNSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGFuaW1hdGUoU1ZHRWxlbWVudCosIGZsb2F0IHByb2dyZXNz
LCB1bnNpZ25lZCByZXBlYXRDb3VudCwgQ29sb3ImIGFuaW1hdGVkKQogICAgIHsKLSAgICAgICAg
YXV0byBzaW1wbGVBbmltYXRlZCA9IGFuaW1hdGVkLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25N
b2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVkIDogbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJh
dGlvbigpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlQW5p
bWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBz
aW1wbGVGcm9tID0gbV9hbmltYXRpb25Nb2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxl
QW5pbWF0ZWQgOiBtX2Zyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8g
c2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNp
bXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKICAgICAgICAgCi0gICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUo
cHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVU
by5yZWRDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCks
IHNpbXBsZUFuaW1hdGVkLnJlZENvbXBvbmVudCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBC
YXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlv
bi5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKLSAg
ICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVD
b21wb25lbnQoKSk7Ci0gICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVz
cywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxw
aGFDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwg
c2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21wb25lbnQoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJh
c2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZCwgc2ltcGxl
VG8ucmVkLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5yZWQsIHNpbXBsZUFuaW1hdGVkLnJlZCk7
CisgICAgICAgIGZsb2F0IGdyZWVuID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291
bnQsIHNpbXBsZUZyb20uZ3JlZW4sIHNpbXBsZVRvLmdyZWVuLCBzaW1wbGVUb0F0RW5kT2ZEdXJh
dGlvbi5ncmVlbiwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW4pOworICAgICAgICBmbG9hdCBibHVlID0g
QmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2lt
cGxlVG8uYmx1ZSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQu
Ymx1ZSk7CisgICAgICAgIGZsb2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVw
ZWF0Q291bnQsIHNpbXBsZUZyb20uYWxwaGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5k
T2ZEdXJhdGlvbi5hbHBoYSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKICAgICAg
ICAgYW5pbWF0ZWQgPSBtYWtlU2ltcGxlQ29sb3Iocm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChy
ZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkpOwogICAgIH0K
QEAgLTEwMywxMiArMTAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFs
aWQoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0
byBzaW1wbGVGcm9tID0gZnJvbUNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAg
ICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Cisg
ICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9IGZyb21Db2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4o
KTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9IHRvQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CiAKLSAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSAtIHNp
bXBsZVRvLnJlZENvbXBvbmVudCgpOwotICAgICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZyb20u
Z3JlZW5Db21wb25lbnQoKSAtIHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgICAgIGZs
b2F0IGJsdWUgPSBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSAtIHNpbXBsZVRvLmJsdWVDb21w
b25lbnQoKTsKKyAgICAgICAgZmxvYXQgcmVkID0gc2ltcGxlRnJvbS5yZWQgLSBzaW1wbGVUby5y
ZWQ7CisgICAgICAgIGZsb2F0IGdyZWVuID0gc2ltcGxlRnJvbS5ncmVlbiAtIHNpbXBsZVRvLmdy
ZWVuOworICAgICAgICBmbG9hdCBibHVlID0gc2ltcGxlRnJvbS5ibHVlIC0gc2ltcGxlVG8uYmx1
ZTsKIAogICAgICAgICByZXR1cm4gc3RkOjpoeXBvdChyZWQsIGdyZWVuLCBibHVlKTsKICAgICB9
CkBAIC0xMjYsMTQgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRGcm9tQW5kVG9W
YWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJyaWRlCiAgICAgewotICAgICAgICBhdXRvIHNpbXBsZUZy
b20gPSBtX2Zyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1w
bGVUbyA9IG1fdG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1w
bGVGcm9tID0gbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNp
bXBsZVRvID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25v
cmVzIGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAg
ICAgICAgIG1fdG8gPSBtYWtlU2ltcGxlQ29sb3IoCi0gICAgICAgICAgICByb3VuZEFuZENsYW1w
Q29sb3JDaGFubmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21w
b25lbnQoKSksCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRv
LmdyZWVuQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAotICAgICAg
ICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkg
KyBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSkKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkICsgc2ltcGxlRnJvbS5yZWQpLAorICAgICAgICAgICAg
cm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3Jl
ZW4pLAorICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVl
ICsgc2ltcGxlRnJvbS5ibHVlKQogICAgICAgICApOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgorCisgICAgICAgIFBhcnQgMSBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhfdD4g
YXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzOTQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW06CisgICAgICAg
IChXZWJLaXQ6OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
OjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIEFkYXB0IHRvIHVzZSB0ZW1w
bGF0aXplZCB0b1NSR0JBTG9zc3k8ZmxvYXQvdWludDhfdD4uCisKIDIwMjAtMDctMDMgIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjYzOTE4
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCB3ZWJraXRDb2xvckZpbGxGcm9tV2Vi
Q29yZUNvbG9yKGNvbgogewogICAgIFJFTEVBU0VfQVNTRVJUKHdlYkNvcmVDb2xvci5pc1ZhbGlk
KCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5PGZs
b2F0PigpOwogICAgIGNvbG9yLT5yZWQgPSByOwogICAgIGNvbG9yLT5ncmVlbiA9IGc7CiAgICAg
Y29sb3ItPmJsdWUgPSBiOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmJlZ2luU3dpcGVHZQogICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CiAg
ICAgICAgICAgICBtX2JhY2tncm91bmRDb2xvckZvckN1cnJlbnRTbmFwc2hvdCA9IGNvbG9yOwog
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0dGVybikgewotICAgICAg
ICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFM
b3NzeSgpOworICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRT
d2lwZVNuYXBzaG90UGF0dGVybiA9IGFkb3B0UmVmKGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYmEo
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2
aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTYsNyArNjU2LDcgQEAgYm9vbCBXZWJGcmFtZTo6
Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sbwogICAgIGlmICghYmdDb2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50
b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgICpyZWQgPSByOwogICAgICpncmVlbiA9IGc7CiAgICAgKmJsdWUg
PSBiOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGUubW0JKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02OTMsNyArNjkzLDcgQEAgc3RhdGljIE5TT2JqZWN0KiBhbmltYXRp
b25WYWx1ZUZyb21LZXlmcgogICAgICAgICByZXR1cm4gQChrZXlmcmFtZVZhbHVlLm51bWJlclZh
bHVlKCkpOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
OjpLZXlmcmFtZVZhbHVlOjpDb2xvcktleVR5cGU6IHsKLSAgICAgICAgYXV0byBbciwgZywgYiwg
YV0gPSBrZXlmcmFtZVZhbHVlLmNvbG9yVmFsdWUoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
OworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgp
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICByZXR1cm4gQFsgQChyKSwgQChnKSwg
QChiKSwgQChhKSBdOwogICAgIH0KIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzOTI1KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDctMDMgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFBhcnQgMSBvZiBTaW1wbGVDb2xvciBhbmQg
U1JHQkE8dWludDhfdD4gYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2Ug
dGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEz
OTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICBBZGFwdCB0ZXN0cyB0byB1c2UgdGVtcGxhdGl6ZWQgdG9TUkdCQUxvc3N5PGZsb2F0
L3VpbnQ4X3Q+LgorCiAyMDIwLTA3LTAzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVf
SU5DT01QTEVURQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9y
VGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0g
Q29sb3I6OndoaXRlOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdC
QUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTU0LDcgKzU0
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiB7CiAgICAgQ29sb3IgY29sb3IgPSBD
b2xvcjo6YmxhY2s7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JB
TG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAg
ICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtNzAsNyArNzAs
NyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNv
bG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xv
ci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBA
IC04Niw3ICs4Niw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9y
IGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCk7CiAKLSAgICBhdXRvIGhzbGFDb2xv
ciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0
b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9F
USgwLjMzMzMzMzM0LCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTAyLDcgKzEwMiw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX0JsdWUpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1
KTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsK
KyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkp
OwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNjY2NjY2NjksIGhzbGFDb2xvci5odWUpOwogICAg
IEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMTgsNyArMTE4
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfRGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3Ig
PSBDb2xvcjo6ZGFya0dyYXk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50
b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdC
QUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVl
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTM0
LDcgKzEzNCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3IgY29s
b3IgPSBDb2xvcjo6Z3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRv
U1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUp
OwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xNTAs
NyArMTUwLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfTGlnaHRHcmF5KQogewogICAgIENvbG9y
IGNvbG9yID0gQ29sb3I6OmxpZ2h0R3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xB
KGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7
CkBAIC0xODMsMjkgKzE4MywyOSBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKICAgICB2YWxpZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDEsIDIsIDMsIDQpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlk
Q29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4dGVuZGVk
KCkpOwotICAgIGF1dG8gc2ltcGxlVmFsaWRDb2xvciA9IHZhbGlkQ29sb3IudG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5yZWRDb21wb25l
bnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQo
KSwgMik7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAz
KTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsK
KyAgICBhdXRvIHZhbGlkQ29sb3JDb21wb25lbnRzID0gdmFsaWRDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsK
KyAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOworICAgIEVYUEVD
VF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRD
b2xvckNvbXBvbmVudHMuYWxwaGEsIDQpOwogCiAgICAgQ29sb3IgeWV0QW5vdGhlclZhbGlkQ29s
b3IoV1RGTW92ZSh2YWxpZENvbG9yKSk7CiAgICAgRVhQRUNUX1RSVUUoeWV0QW5vdGhlclZhbGlk
Q29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UoeWV0QW5vdGhlclZhbGlkQ29sb3Iu
aXNFeHRlbmRlZCgpKTsKLSAgICBhdXRvIHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yID0geWV0
QW5vdGhlclZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1Rf
RVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOwotICAgIEVY
UEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsK
LSAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgp
LCAzKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYWxwaGFDb21w
b25lbnQoKSwgNCk7CisgICAgYXV0byB5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSB5
ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1Rf
RVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CisgICAgRVhQRUNUX0VR
KHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VR
KHlldEFub3RoZXJWYWxpZENvbG9yQ29tcG9uZW50cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEo
eWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmFscGhhLCA0KTsKIAogICAgIG90aGVyVmFs
aWRDb2xvciA9IFdURk1vdmUoeWV0QW5vdGhlclZhbGlkQ29sb3IpOwogICAgIEVYUEVDVF9UUlVF
KG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRShvdGhlclZhbGlk
Q29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBhdXRvIHNpbXBsZU90aGVyVmFsaWRDb2xvciA9IG90
aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShz
aW1wbGVPdGhlclZhbGlkQ29sb3IucmVkQ29tcG9uZW50KCksIDEpOwotICAgIEVYUEVDVF9FUShz
aW1wbGVPdGhlclZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgMik7Ci0gICAgRVhQRUNUX0VR
KHNpbXBsZU90aGVyVmFsaWRDb2xvci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9F
UShzaW1wbGVPdGhlclZhbGlkQ29sb3IuYWxwaGFDb21wb25lbnQoKSwgNCk7CisgICAgYXV0byBv
dGhlclZhbGlkQ29sb3JDb21wb25lbnRzID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1
aW50OF90PigpOworICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwg
MSk7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOwor
ICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOworICAgIEVY
UEVDVF9FUShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmFscGhhLCA0KTsKIH0KIAogVEVTVChD
b2xvciwgTHVtaW5hbmNlKQpAQCAtMjE2LDIxICsyMTYsMjIgQEAgVEVTVChDb2xvciwgTHVtaW5h
bmNlKQogICAgIGF1dG8gYyA9IG1ha2VTaW1wbGVDb2xvcig4NSwgOTAsIDE2MCk7CiAgICAgRVhQ
RUNUX0ZMT0FUX0VRKENvbG9yKGMpLmx1bWluYW5jZSgpLCAwLjExNzgxNjkyKTsKIAotICAgIEVY
UEVDVF9FUShjLnJlZENvbXBvbmVudCgpLCA4NSk7Ci0gICAgRVhQRUNUX0VRKGMuZ3JlZW5Db21w
b25lbnQoKSwgOTApOwotICAgIEVYUEVDVF9FUShjLmJsdWVDb21wb25lbnQoKSwgMTYwKTsKLQot
ICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0xpZ3RlbmVkKS5sdW1pbmFu
Y2UoKSwgMC4yOTE2ODgwOCk7Ci0gICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWRDb21wb25lbnQo
KSwgMTMwKTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmdyZWVuQ29tcG9uZW50KCksIDEzNyk7
Ci0gICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlQ29tcG9uZW50KCksIDI0NCk7Ci0KLSAgICBh
dXRvIGNEYXJrZW5lZCA9IENvbG9yKGMpLmRhcmtlbmVkKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoY0RhcmtlbmVkKS5sdW1pbmFuY2UoKSwg
MC4wMjcwMDY3MjcpOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkQ29tcG9uZW50KCksIDQw
KTsKLSAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmdyZWVuQ29tcG9uZW50KCksIDQzKTsKLSAgICBF
WFBFQ1RfRVEoY0RhcmtlbmVkLmJsdWVDb21wb25lbnQoKSwgNzYpOworICAgIGF1dG8gY0NvbXBv
bmVudHMgPSBjLmFzU1JHQkE8dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMu
cmVkLCA4NSk7CisgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLmdyZWVuLCA5MCk7CisgICAgRVhQ
RUNUX0VRKGNDb21wb25lbnRzLmJsdWUsIDE2MCk7CisKKyAgICBhdXRvIGNMaWd0ZW5lZCA9IENv
bG9yKGMpLmxpZ2h0ZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9G
TE9BVF9FUShDb2xvcihtYWtlU2ltcGxlQ29sb3IoY0xpZ3RlbmVkKSkubHVtaW5hbmNlKCksIDAu
MjkxNjg4MDgpOworICAgIEVYUEVDVF9FUShjTGlndGVuZWQucmVkLCAxMzApOworICAgIEVYUEVD
VF9FUShjTGlndGVuZWQuZ3JlZW4sIDEzNyk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVl
LCAyNDQpOworCisgICAgYXV0byBjRGFya2VuZWQgPSBDb2xvcihjKS5kYXJrZW5lZCgpLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihtYWtlU2ltcGxl
Q29sb3IoY0RhcmtlbmVkKSkubHVtaW5hbmNlKCksIDAuMDI3MDA2NzI3KTsKKyAgICBFWFBFQ1Rf
RVEoY0RhcmtlbmVkLnJlZCwgNDApOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQuZ3JlZW4sIDQz
KTsKKyAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmJsdWUsIDc2KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9y
LCBQM0NvbnZlcnNpb25Ub1NSR0IpCiAgICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENv
bG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAg
RVhQRUNUX1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCi0gICAgYXV0byBzUkdCQUNvbG9y
ID0gcDNDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9y
LnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFy
ZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC40NjI1Mzc4ODVmKSk7CiAgICAg
RVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC4x
NDkxNDc4MzhmKSk7CkBAIC0yNTIsNyArMjUyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBMaW5l
YXJTUkdCQ29udmVyc2lvbgogewogICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVk
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKICAg
ICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc1JHQkFD
b2xvciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9
IGxpbmVhckNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6
OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1Rf
VFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5
MjdmKSk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29s
b3IuYmx1ZSwgMC41MzcwOTg3MDZmKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403523</attachid>
            <date>2020-07-04 08:45:34 -0700</date>
            <delta_ts>2020-07-04 11:10:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213948-20200704084533.patch</filename>
            <type>text/plain</type>
            <size>71707</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDIwLTA3LTAzICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3Ig
YW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZl
cmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtXSVBdCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y29sb3JWYWx1ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwOgorICAgICAgICAoZ2V0QXR0cmlidXRlU2V0
Rm9yQWNjZXNzaWJpbGl0eU9iamVjdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29sb3I6OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2Vu
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
Ojp0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnRvU1JHQkFM
b3NzeSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpibGVuZFNvdXJjZU92ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6YmxlbmRXaXRoV2hpdGUpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFzQVJHQik6CisgICAgICAg
IChXZWJDb3JlOjphc1NSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnBy
ZW11bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENv
bXBvbmVudEJ5dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
Lmg6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9Db21wb25lbnRCeXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRD
b2xvcjo6dG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNr
aW5nU3RvcmU6OmJsZW5kUGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OnBpeGVsVmFsdWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBs
ZUNvbG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVD
b2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphc1NSR0JBIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpyZWRDb21wb25lbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmdyZWVuQ29tcG9uZW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpibHVlQ29tcG9uZW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNl
dEZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6
OnNldFRvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
OjpzZXRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBQW5pbWF0aW9uV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNl
dEZyb21WYWx1ZSk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRUb1ZhbHVl
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldFZhbHVlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVvbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnM6OnRyYW5zZm9ybUNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnM6OmludmVyc2VUcmFuc2Zvcm1Db2xvciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpkaXNhYmxlZFRleHRDb2xvciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNlQ29udmV4R3JhZGllbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp0ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBz
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uOjphbmltYXRlKToKKwog
MjAyMC0wNy0wMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
Q29yZS9Tb3VyY2VzLnR4dDogUmVtb3ZlICNpZiBFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFS
R0VUCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE5NzAsNyArMTk3MCw2IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2Ft
cGxlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9T
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0
UnVuLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05OTg0LDcgKzk5
ODQsNiBAQAogCQk3QzMwRDk4MDFGODE1QUMxMDAyNjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBYm9ydENvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMEQ5ODExRjgxNUFDMTAwMjY4MzU2IC8q
IEpTQWJvcnRTaWduYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBYm9y
dFNpZ25hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMwRDk4MjFGODE1QUMy
MDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0Fib3J0U2lnbmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJN0MzMUM4OEEyNDdBRDU5NDAwNUJGMzE5IC8qIFNpbXBsZUNvbG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUNvbG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMUM4OEMyNDdBRDU5NTAwNUJGMzE5IC8qIFNpbXBsZUNvbG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUNvbG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzMwQTAxMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDMzMwQTAzMURGOUU5NUIwMEQzMzk1QyAvKiBQb3NpdGlvbk9wdGlvbnMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFBvc2l0aW9uT3B0aW9ucy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTY5Nyw3ICsyNTY5Niw2IEBACiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5k
ZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIu
Y3BwICovLAogCQkJCTBGM0RENDRFMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8s
Ci0JCQkJN0MzMUM4OEEyNDdBRDU5NDAwNUJGMzE5IC8qIFNpbXBsZUNvbG9yLmNwcCAqLywKIAkJ
CQk3QzMxQzg4QzI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29sb3IuaCAqLywKIAkJCQlDRDY0
MUVCMjE4MThGNUVEMDBFRTRDNDEgLyogU291cmNlQnVmZmVyUHJpdmF0ZS5oICovLAogCQkJCUNE
QzhCNUFDMTgwNEFFNUQwMDE2RTY4NSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50LmggKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5ODMsMTAgKzE5ODMsMTAgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
Y29sb3JWYWx1ZQogICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSgpKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBjb2xvciA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAg
ciA9IGNvbG9yLnJlZENvbXBvbmVudCgpOwotICAgIGcgPSBjb2xvci5ncmVlbkNvbXBvbmVudCgp
OwotICAgIGIgPSBjb2xvci5ibHVlQ29tcG9uZW50KCk7CisgICAgYXV0byBjb2xvciA9IGRvd25j
YXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKCkpLnZhbHVlQXNDb2xvcigpLnRvU1JHQkFMb3Nz
eTx1aW50OF90PigpOworICAgIHIgPSBjb2xvci5yZWQ7CisgICAgZyA9IGNvbG9yLmdyZWVuOwor
ICAgIGIgPSBjb2xvci5ibHVlOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTIsMTQgKzkyLDE0IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIGdldEF0
dHJpYnV0ZVNldEYKIAogICAgIENvbG9yIGJnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKICAgICBpZiAoYmdDb2xvci5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRvU1JHQkFTaW1w
bGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKICAgICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50
ZigiJWksJWksJWkiLCByLCBnLCBiKSk7CiAgICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJf
QkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkpOwogICAgIH0KIAogICAgIENvbG9yIGZnQ29sb3IgPSBz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIGlmIChm
Z0NvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGZnQ29sb3Iu
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBm
Z0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICBidWZmZXIucmVzZXQoZ19z
dHJkdXBfcHJpbnRmKCIlaSwlaSwlaSIsIHIsIGcsIGIpKTsKICAgICAgICAgcmVzdWx0ID0gYWRk
VG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRL
X1RFWFRfQVRUUl9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MDEsMTAgKzcwMSwxMCBAQCB2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OnNldFBy
ZXZlbnRLZXlib2FyCiAKIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6Y29sb3JWYWx1ZShpbnQmIHIs
IGludCYgZywgaW50JiBiKSBjb25zdAogewotICAgIGF1dG8gY29sb3IgPSBjb2xvckF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlKS50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOwotICAgIHIgPSBjb2xvci5yZWRDb21wb25lbnQoKTsKLSAgICBnID0gY29sb3IuZ3JlZW5D
b21wb25lbnQoKTsKLSAgICBiID0gY29sb3IuYmx1ZUNvbXBvbmVudCgpOworICAgIGF1dG8gY29s
b3IgPSBjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlKS50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICByID0gY29sb3IucmVkOworICAgIGcgPSBjb2xvci5n
cmVlbjsKKyAgICBiID0gY29sb3IuYmx1ZTsKIH0KIAogQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVk
T2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09NUkdCQ29sb3IuaAko
cmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRDU1NPTVJH
QkNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIERl
cHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlJiBibHVlKCkgeyByZXR1cm4gbV9ibHVlOyB9CiAg
ICAgRGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWUmIGFscGhhKCkgeyByZXR1cm4gbV9hbHBo
YTsgfQogCi0gICAgU2ltcGxlQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CisgICAgU2ltcGxlQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiBtYWtlU2ltcGxlQ29sb3Io
bV9jb2xvcik7IH0KIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBl
PiBzdGF0aWMgUmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBjcmVhdGVXcmFwcGVy
KENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBOdW1iZXJUeXBlIG51bWJlcikKQEAgLTQ2LDE1
ICs0NiwxNSBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIERlcHJlY2F0ZWRDU1NPTVJHQkNvbG9y
KENTU1N0eWxlRGVjbGFyYXRpb24mIG93bmVyLCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAg
IDogbV9jb2xvcihjb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKQotICAgICAgICAsIG1f
cmVkKGNyZWF0ZVdyYXBwZXIob3duZXIsIG1fY29sb3IucmVkQ29tcG9uZW50KCkpKQotICAgICAg
ICAsIG1fZ3JlZW4oY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ncmVlbkNvbXBvbmVudCgp
KSkKLSAgICAgICAgLCBtX2JsdWUoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5ibHVlQ29t
cG9uZW50KCkpKQotICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xv
ci5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKSkpCisgICAgICAgIDogbV9jb2xvcihjb2xvci50b1NS
R0JBTG9zc3k8dWludDhfdD4oKSkKKyAgICAgICAgLCBtX3JlZChjcmVhdGVXcmFwcGVyKG93bmVy
LCBtX2NvbG9yLnJlZCkpCisgICAgICAgICwgbV9ncmVlbihjcmVhdGVXcmFwcGVyKG93bmVyLCBt
X2NvbG9yLmdyZWVuKSkKKyAgICAgICAgLCBtX2JsdWUoY3JlYXRlV3JhcHBlcihvd25lciwgbV9j
b2xvci5ibHVlKSkKKyAgICAgICAgLCBtX2FscGhhKGNyZWF0ZVdyYXBwZXIob3duZXIsIGNvbnZl
cnRUb0NvbXBvbmVudEZsb2F0KG1fY29sb3IuYWxwaGEpKSkKICAgICB7CiAgICAgfQogCi0gICAg
U2ltcGxlQ29sb3IgbV9jb2xvcjsKKyAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yOwogICAgIFJl
ZjxEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZT4gbV9yZWQ7CiAgICAgUmVmPERlcHJlY2F0
ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX2dyZWVuOwogICAgIFJlZjxEZXByZWNhdGVkQ1NTT01Q
cmltaXRpdmVWYWx1ZT4gbV9ibHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRGF0YURldGVjdGlvbi5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MjEs
NyArNjIxLDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUgogICAg
ICAgICAgICAgICAgIGlmIChyZW5kZXJTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBhdXRv
IHRleHRDb2xvciA9IHJlbmRlclN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGhzbGEgPSB0b0hTTEEodGV4dENvbG9yLnRv
U1JHQkFMb3NzeSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaHNsYSA9IHRvSFNM
QSh0ZXh0Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yY2UgdGhlIGxpZ2h0bmVzcyBvZiB0aGUgdW5kZXJsaW5lIGNvbG9yIHRvIHRo
ZSBtaWRkbGUsIGFuZCBtdWx0aXBseSB0aGUgYWxwaGEgYnkgMzglLAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc28gdGhlIGNvbG9yIHdpbGwgYXBwZWFyIG9uIGxpZ2h0IGFuZCBkYXJrIGJh
Y2tncm91bmRzLCBzaW5jZSBvbmx5IG9uZSBjb2xvciBjYW4gYmUgc3BlY2lmaWVkLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjYz
OTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25z
dAogICAgIGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gYmxhY2spCiAgICAgICAgIHJl
dHVybiBsaWdodGVuZWRCbGFjazsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxv
c3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAg
ICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKIAogICAgIGlmICh2ID09IDAuMGYp
CkBAIC0xMDMsNyArMTAzLDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKICAgICBp
ZiAoaXNTaW1wbGUoKSAmJiBhc1NpbXBsZSgpID09IHdoaXRlKQogICAgICAgICByZXR1cm4gZGFy
a2VuZWRXaGl0ZTsKICAgICAKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwogCiAgICAg
ZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0g
c3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKQEAgLTExNCwxNCArMTE0LDE0IEBAIENv
bG9yIENvbG9yOjpkYXJrZW5lZCgpIGNvbnN0CiBmbG9hdCBDb2xvcjo6bGlnaHRuZXNzKCkgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYXZvaWQgY29udmVyc2lvbiB0
byBzUkdCIGJ5IGhhdmluZyBwZXItY29sb3JzcGFjZSBhbGdvcml0aG1zIGZvciBIU0wuCi0gICAg
cmV0dXJuIFdlYkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBTG9zc3koKSk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OmxpZ2h0bmVzcyh0b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogfQogCiBmbG9hdCBDb2xv
cjo6bHVtaW5hbmNlKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkg
YXZvaWQgY29udmVyc2lvbiB0byBzUkdCIGJ5IGhhdmluZyBwZXItY29sb3JzcGFjZSBhbGdvcml0
aG1zCiAgICAgLy8gZm9yIGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYykueUNvbXBvbmVu
dCgpKS4KLSAgICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFMb3NzeSgpKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiB9CiAK
IENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKQEAgLTE0OSw3
ICsxNDksNyBAQCBDb2xvciBDb2xvcjo6c2VtYW50aWNDb2xvcigpIGNvbnN0CiAgICAgaWYgKGlz
U2VtYW50aWMoKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgcmV0dXJuIHsgdG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSwgU2VtYW50aWMgfTsKKyAgICByZXR1cm4geyBtYWtlU2ltcGxl
Q29sb3IodG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpLCBTZW1hbnRpYyB9OwogfQogCiBzdGQ6OnBh
aXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gQ29sb3I6OmNvbG9yU3BhY2VB
bmRDb21wb25lbnRzKCkgY29uc3QKQEAgLTE1OSwyMCArMTU5LDYgQEAgc3RkOjpwYWlyPENvbG9y
U3BhY2UsIENvbG9yQ29tcG9uZW50czxmbAogICAgIHJldHVybiB7IENvbG9yU3BhY2U6OlNSR0Is
IGFzQ29sb3JDb21wb25lbnRzKGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKSkgfTsKIH0KIAot
U2ltcGxlQ29sb3IgQ29sb3I6OnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3QKLXsKLSAg
ICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKGFzRXh0
ZW5kZWQoKS50b1NSR0JBTG9zc3koKSk7Ci0gICAgcmV0dXJuIGFzU2ltcGxlKCk7Ci19Ci0KLVNS
R0JBPGZsb2F0PiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRl
bmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeSgpOwotICAg
IHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkE8ZmxvYXQ+KCk7Ci19Ci0KIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICByZXR1
cm4gdHMgPDwgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoY29sb3IpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjM5MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEsMTAgKzEyMSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6
OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0Pj4gY29sb3JTcGFjZUFuZENv
bXBvbmVudHMoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNv
bG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xv
ciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OwotCi0gICAgLy8gVGhpcyB3aWxsIGNv
bnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIFdFQkNPUkVf
RVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JBTG9zc3koKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdDsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIENvbG9yIGxpZ2h0ZW5lZCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
IGRhcmtlbmVkKCkgY29uc3Q7CkBAIC0yNjgsNiArMjY1LDEzIEBAIGlubGluZSB1bnNpZ25lZCBD
b2xvcjo6aGFzaCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5z
aW1wbGVDb2xvckFuZEZsYWdzKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gU1JHQkE8VD4g
Q29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS50b1NSR0JBTG9zc3k8VD4oKTsKKyAgICByZXR1cm4g
YXNTaW1wbGUoKS5hc1NSR0JBPFQ+KCk7Cit9CisKIGlubGluZSBDb2xvciBDb2xvcjo6aW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGFscGhhID8gaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYS52YWx1ZSgpKSA6ICp0aGlz
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JC
bGVuZGluZy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4
IEBAIENvbG9yIGJsZW5kU291cmNlT3Zlcihjb25zdCBDb2xvciYgYmFja2QKICAgICBpZiAoIXNv
dXJjZS5hbHBoYSgpKQogICAgICAgICByZXR1cm4gYmFja2Ryb3A7CiAKLSAgICBhdXRvIFtiYWNr
ZHJvcFIsIGJhY2tkcm9wRywgYmFja2Ryb3BCLCBiYWNrZHJvcEFdID0gYmFja2Ryb3AudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VC
LCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8g
W2JhY2tkcm9wUiwgYmFja2Ryb3BHLCBiYWNrZHJvcEIsIGJhY2tkcm9wQV0gPSBiYWNrZHJvcC50
b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3Vy
Y2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgIGlu
dCBkID0gMHhGRiAqIChiYWNrZHJvcEEgKyBzb3VyY2VBKSAtIGJhY2tkcm9wQSAqIHNvdXJjZUE7
CiAgICAgaW50IGEgPSBkIC8gMHhGRjsKQEAgLTY4LDcgKzY4LDcgQEAgQ29sb3IgYmxlbmRXaXRo
V2hpdGUoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIGlmICghY29sb3IuaXNPcGFxdWUoKSkKICAg
ICAgICAgcmV0dXJuIGNvbG9yOwogCi0gICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4
aXN0aW5nQiwgZXhpc3RpbmdBbHBoYV0gPSBjb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
OworICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxw
aGFdID0gY29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKICAgICBTaW1wbGVDb2xvciBy
ZXN1bHQ7CiAgICAgZm9yIChpbnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBlbmRBbHBo
YTsgYWxwaGEgKz0gYWxwaGFJbmNyZW1lbnQpIHsKQEAgLTk3LDE4ICs5NywxNyBAQCBDb2xvciBi
bGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIC8vIFNpbmNlIHBy
ZW11bHRpcGx5Q2VpbGluZygpIGJhaWxzIG9uIHplcm8gYWxwaGEsIHNwZWNpYWwtY2FzZSB0aGF0
LgotICAgIGF1dG8gcHJlbXVsdGlwbGllZEZyb20gPSBmcm9tLmFscGhhKCkgPyBwcmVtdWx0aXBs
eUNlaWxpbmcoZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3Bh
cmVudDsKLSAgICBhdXRvIHByZW11bHRpcGxpZWRUbyA9IHRvLmFscGhhKCkgPyBwcmVtdWx0aXBs
eUNlaWxpbmcodG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSkgOiBDb2xvcjo6dHJhbnNwYXJl
bnQ7Ci0KLSAgICBhdXRvIHByZW11bHRCbGVuZGVkID0gbWFrZVNpbXBsZUNvbG9yKAotICAgICAg
ICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVs
dGlwbGllZFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJs
ZW5kKHByZW11bHRpcGxpZWRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRpcGxpZWRUby5n
cmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11
bHRpcGxpZWRGcm9tLmJsdWVDb21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRvLmJsdWVDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJv
bS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0aXBsaWVkVG8uYWxwaGFDb21wb25lbnQoKSwgcHJv
Z3Jlc3MpCisgICAgYXV0byBwcmVtdWx0aXBsaWVkRnJvbSA9IHByZW11bHRpcGxpZWRDZWlsaW5n
KGZyb20udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOworICAgIGF1dG8gcHJlbXVsdGlwbGllZFRv
ID0gcHJlbXVsdGlwbGllZENlaWxpbmcodG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCkpOworCisg
ICAgYXV0byBwcmVtdWx0aXBsaWVkQmxlbmRlZCA9IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzPFNS
R0JBPigKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20ucmVkLCBwcmVt
dWx0aXBsaWVkVG8ucmVkLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11
bHRpcGxpZWRGcm9tLmdyZWVuLCBwcmVtdWx0aXBsaWVkVG8uZ3JlZW4sIHByb2dyZXNzKSwKKyAg
ICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGllZEZyb20uYmx1ZSwgcHJlbXVsdGlwbGll
ZFRvLmJsdWUsIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdGlwbGll
ZEZyb20uYWxwaGEsIHByZW11bHRpcGxpZWRUby5hbHBoYSwgcHJvZ3Jlc3MpCiAgICAgKTsKIAot
ICAgIHJldHVybiB1bnByZW11bHRpcGx5KHByZW11bHRCbGVuZGVkKTsKKyAgICByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKHVucHJlbXVsdGlwbGllZChwcmVtdWx0aXBsaWVkQmxlbmRlZCkpOwogfQog
CiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3Qg
Q29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0xMTgsMTQgKzExNywxNCBAQCBDb2xvciBi
bGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZnJvbVNS
R0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0byB0b1NSR0IgPSBm
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byBmcm9tU1JHQiA9IGZyb20u
dG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogCiAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKLSAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbkNv
bXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29tcG9u
ZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGFD
b21wb25lbnQoKSwgdG9TUkdCLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQorICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWQsIHRvU1JHQi5yZWQsIHByb2dyZXNzKSwKKyAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuZ3JlZW4sIHRvU1JHQi5ncmVlbiwgcHJvZ3Jlc3Mp
LAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlLCB0b1NSR0IuYmx1ZSwgcHJv
Z3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBoYSwgdG9TUkdCLmFs
cGhhLCBwcm9ncmVzcykKICAgICApOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzNyw0ICsyMzcsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3Bl
cgogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKworLy8gUGl4ZWwgRm9ybWF0cworCitzdHJ1
Y3QgQVJHQiB7CisgICAgdW5zaWduZWQgdmFsdWU7Cit9OworCitjb25zdGV4cHIgQVJHQiBhc0FS
R0IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwgY29sb3IuZ3JlZW4g
PDwgOCB8IGNvbG9yLmJsdWUpIH07Cit9CisKK2NvbnN0ZXhwciBTUkdCQTx1aW50OF90PiBhc1NS
R0JBKEFSR0IgY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29s
b3IudmFsdWUgPj4gMTYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52YWx1ZSA+PiA4KSwg
c3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihj
b2xvci52YWx1ZSA+PiAyNCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw0ICs2Niw0MyBAQCBT
UkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmCiAgICAgcmV0dXJuIHsgciAq
IGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCitTUkdCQTxmbG9hdD4gdW5wcmVtdWx0aXBsaWVk
KGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBj
b2xvcjsKKyAgICByZXR1cm4geyByIC8gYSwgZyAvIGEsIGIgLyBhLCBhIH07Cit9CisKK1NSR0JB
PHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBjb2xvcikKK3sK
KyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSkKKyAgICAgICAgcmV0
dXJuIHsgMCwgMCwgMCwgMCB9OworICAgIGlmIChhID09IDI1NSkKKyAgICAgICAgcmV0dXJuIGNv
bG9yOworICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlczxTUkdCQT4oZmFzdERpdmlk
ZUJ5MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGIg
KiBhKSwgYSk7Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWlsaW5nKFNSR0JB
PHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7CisgICAg
aWYgKCFhKQorICAgICAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07CisgICAgaWYgKGEgPT0gMjU1
KQorICAgICAgICByZXR1cm4gY29sb3I7CisgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5
dGVzPFNSR0JBPihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsKK30KKworc3Rh
dGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRlKHVpbnQ4X3Qg
YywgdWludDhfdCBhKQoreworICAgIHJldHVybiAoZmFzdE11bHRpcGx5QnkyNTUoYykgKyBhIC0g
MSkgLyBhOworfQorCitTUkdCQTx1aW50OF90PiB1bnByZW11bHRpcGxpZWQoU1JHQkE8dWludDhf
dD4gY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAgICBpZiAoIWEg
fHwgYSA9PSAyNTUpCisgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4gY29udmVydFRv
Q29tcG9uZW50Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUociwgYSks
IHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlwbGllZENvbXBv
bmVudEJ5dGUoYiwgYSksIGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJ
KHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDExIEBAIGZsb2F0IGx1
bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0IGNvbnRyYXN0UmF0aW8oY29uc3Qg
U1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNSR0JBPGZsb2F0PiBwcmVt
dWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+IHVucHJlbXVsdGlw
bGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8dWludDhfdD4gcHJlbXVsdGlwbGll
ZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRD
ZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHVucHJlbXVsdGlwbGllZChT
UkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVzY2FsZWRUb0NvbXBv
bmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDI4IEBAIGNvbnN0ZXhwciBmbG9hdCBj
b252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4gYnl0ZSAvIDI1NS4wZjsKIH0KIAor
dGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4gaW5saW5lIENv
bG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25zdCBDb2xvclR5cGU8
ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9yQ29tcG9uZW50
cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRz
WzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwgY29udmVydFRvQ29t
cG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25l
bnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29s
b3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNvbnZlcnRUb0NvbXBvbmVudEJ5
dGVzKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiB7IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAociwgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90
PihzdGQ6OmNsYW1wKGcsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFt
cChiLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYSwgMCwgMHhG
RikpIH07Cit9CisKK3RlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFtZSBDb2xvclR5
cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyhj
b25zdCBDb2xvclR5cGU8dWludDhfdD4mIGNvbG9yKQoreworICAgIGF1dG8gY29tcG9uZW50cyA9
IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25l
bnRGbG9hdChjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoY29tcG9uZW50
c1sxXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMl0pLCBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdChjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0
eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPGZsb2F0PiBj
b252ZXJ0VG9Db21wb25lbnRGbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQg
YSkKK3sKKyAgICByZXR1cm4geyBzdGQ6OmNsYW1wKHIsIDAuMGYsIDEuMGYpLCBzdGQ6OmNsYW1w
KGcsIDAuMGYsIDEuMGYpLCBzdGQ6OmNsYW1wKGIsIDAuMGYsIDEuMGYpLCBzdGQ6OmNsYW1wKGEs
IDAuMGYsIDEuMGYpIH07Cit9CisKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1
NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENv
bG9yLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAg
UmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydAogICAgIHJldHVybiBFeHRl
bmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBjMywgb3ZlcnJp
ZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsKIH0KIAotU1JHQkE8ZmxvYXQ+IEV4dGVuZGVkQ29sb3I6
OnRvU1JHQkFMb3NzeSgpIGNvbnN0CitTUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xvcjo6dG9TUkdC
QUZsb2F0Q29tcG9uZW50c0xvc3N5KCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fY29sb3JTcGFj
ZSkgewogICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiQ29sb3JDb21wb25lbnRz
LmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKKyNp
bmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00OSwxMSArNTEsMTggQEAgcHVibGljOgogICAgIFJl
ZjxFeHRlbmRlZENvbG9yPiBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAgICAgUmVmPEV4
dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0OwogCi0gICAg
U1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwotCiAgICAgYm9vbCBpc1doaXRlKCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0JsYWNrKCkgY29uc3Q7CiAKKyAgICAvLyBUaGlzIHdpbGwgY29u
dmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAg
ICAgICAgIHJldHVybiB0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKTsKKyAgICAgICAgZWxz
ZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQorICAgICAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3Nz
eSgpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxv
YXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogICAg
ICAgICA6IG1fY29tcG9uZW50cyhjMSwgYzIsIGMzLCBhbHBoYSkKQEAgLTYxLDYgKzcwLDggQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgU1JHQkE8ZmxvYXQ+
IHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpIGNvbnN0OworCiAgICAgQ29sb3JDb21wb25l
bnRzPGZsb2F0PiBtX2NvbXBvbmVudHM7CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NyArMTAyLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBJbnRSZWN0ICZyZWN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBi
LCB1bnNpZ25lZCBhKQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgdWlu
dDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYiwgdWludDhfdCBhKQogICAgIHsKICAgICAgICAg
aWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhyZWN0KSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTEzNiw0NSArMTM2LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fcGl4ZWxz
UHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKICAgICB9CiAKLSAgICB2b2lkIHNldFBpeGVs
KHVpbnQzMl90KiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNp
Z25lZCBhKQorICAgIHZvaWQgc2V0UGl4ZWwodWludDMyX3QqIGRlc3QsIHVpbnQ4X3QgciwgdWlu
dDhfdCBnLCB1aW50OF90IGIsIHVpbnQ4X3QgYSkKICAgICB7CiAgICAgICAgIEFTU0VSVChkZXN0
KTsKICAgICAgICAgKmRlc3QgPSBwaXhlbFZhbHVlKHIsIGcsIGIsIGEpOwogICAgIH0KIAotICAg
IHZvaWQgc2V0UGl4ZWwoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNp
Z25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHZvaWQgc2V0UGl4ZWwoaW50IHgsIGludCB5LCB1aW50
OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpCiAgICAgewogICAgICAgICBz
ZXRQaXhlbChwaXhlbEF0KHgsIHkpLCByLCBnLCBiLCBhKTsKICAgICB9CiAKLSAgICB2b2lkIGJs
ZW5kUGl4ZWwodWludDMyX3QqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVk
IGIsIHVuc2lnbmVkIGEpCisgICAgdm9pZCBibGVuZFBpeGVsKHVpbnQzMl90KiBkZXN0LCB1aW50
OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpCiAgICAgewogICAgICAgICBp
ZiAoIWEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgU2ltcGxlQ29sb3IgcGl4ZWwg
eyAqZGVzdCB9OworICAgICAgICBhdXRvIHBpeGVsID0gYXNTUkdCQShBUkdCIHsgKmRlc3QgfSk7
CiAKLSAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5pc1Zpc2libGUoKSkgeworICAgICAg
ICBpZiAoYSA+PSAyNTUgfHwgIXBpeGVsLmFscGhhKSB7CiAgICAgICAgICAgICBzZXRQaXhlbChk
ZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcGl4ZWwgPSBwcmVtdWx0
aXBseUZsb29yaW5nKHBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsID0gcHJlbXVsdGlwbGllZEZs
b29yaW5nKHBpeGVsKTsKIAotICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsKKyAgICAgICAg
dWludDhfdCBkID0gMjU1IC0gYTsKIAotICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIgKiBh
ICsgcGl4ZWwucmVkQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgZyA9IGZhc3REaXZpZGVCeTI1
NShnICogYSArIHBpeGVsLmdyZWVuQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgYiA9IGZhc3RE
aXZpZGVCeTI1NShiICogYSArIHBpeGVsLmJsdWVDb21wb25lbnQoKSAqIGQpOwotICAgICAgICBh
ICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwuYWxwaGFDb21wb25lbnQoKSk7CisgICAgICAg
IHIgPSBmYXN0RGl2aWRlQnkyNTUociAqIGEgKyBwaXhlbC5yZWQgKiBkKTsKKyAgICAgICAgZyA9
IGZhc3REaXZpZGVCeTI1NShnICogYSArIHBpeGVsLmdyZWVuICogZCk7CisgICAgICAgIGIgPSBm
YXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhlbC5ibHVlICogZCk7CisgICAgICAgIGEgKz0gZmFz
dERpdmlkZUJ5MjU1KGQgKiBwaXhlbC5hbHBoYSk7CiAKLSAgICAgICAgYXV0byByZXN1bHQgPSBt
YWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gU1JHQkEg
eyByLCBnLCBiLCBhIH07CiAKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCi0gICAg
ICAgICAgICByZXN1bHQgPSB1bnByZW11bHRpcGx5KHJlc3VsdCk7CisgICAgICAgICAgICByZXN1
bHQgPSB1bnByZW11bHRpcGxpZWQocmVzdWx0KTsKIAotICAgICAgICAqZGVzdCA9IHJlc3VsdC52
YWx1ZUFzQVJHQigpOworICAgICAgICAqZGVzdCA9IGFzQVJHQihyZXN1bHQpLnZhbHVlOwogICAg
IH0KIAogICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAg
LTIyMSwxNyArMjIxLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBv
aW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCk7CiAgICAgfQogCi0gICAgdWludDMyX3QgcGl4
ZWxWYWx1ZSh1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKSBj
b25zdAorICAgIHVpbnQzMl90IHBpeGVsVmFsdWUodWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4
X3QgYiwgdWludDhfdCBhKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlB
bHBoYSAmJiAhYSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGF1dG8gcmVzdWx0
ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpOworICAgICAgICBhdXRvIHJlc3VsdCA9IFNS
R0JBIHsgciwgZywgYiwgYSB9OwogCiAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYg
YSA8IDI1NSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHByZW11bHRpcGx5Rmxvb3JpbmcocmVzdWx0
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZW11bHRpcGxpZWRGbG9vcmluZyhyZXN1bHQpOwog
Ci0gICAgICAgIHJldHVybiByZXN1bHQudmFsdWVBc0FSR0IoKTsKKyAgICAgICAgcmV0dXJuIGFz
QVJHQihyZXN1bHQpLnZhbHVlOwogICAgIH0KIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI6OkRh
dGFTZWdtZW50PiBtX3BpeGVsczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkobm9uZXhpc3RlbnQpCkBA
IC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaW1wbGVDb2xvciBwcmVtdWx0aXBseUZsb29yaW5n
KFNpbXBsZUNvbG9yIGNvbG9yKQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3I7Ci0g
ICAgaWYgKCFhIHx8IGEgPT0gMjU1KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUociAqIGEpLCBmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBhKTsKLX0KLQotU2ltcGxlQ29sb3IgcHJl
bXVsdGlwbHlDZWlsaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQotewotICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0gMjU1KQotICAgICAgICByZXR1cm4gY29s
b3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAy
NTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEg
KyAyNTQpLCBhKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGx5Q2hh
bm5lbCh1aW50OF90IGMsIHVpbnQ4X3QgYSkKLXsKLSAgICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5
MjU1KGMpICsgYSAtIDEpIC8gYTsKLX0KLQotU2ltcGxlQ29sb3IgdW5wcmVtdWx0aXBseShTaW1w
bGVDb2xvciBjb2xvcikKLXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwotICAgIGlm
ICghYSB8fCBhID09IDI1NSkKLSAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJldHVybiBtYWtl
U2ltcGxlQ29sb3IodW5wcmVtdWx0aXBseUNoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbHlDaGFu
bmVsKGcsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5lbChiLCBhKSwgYSk7Ci19Ci0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSAr
NDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIHVpbnQzMl90IHZhbHVlQXNBUkdCKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0ZXhwciB1aW50MzJfdCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIGNvbnN0ZXhwciB1aW50OF90IHJlZENvbXBv
bmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gMTY7IH0KLSAgICBjb25zdGV4cHIgdWlu
dDhfdCBncmVlbkNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gODsgfQotICAg
IGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlID4+IDI0OyB9Ci0KICAgICBjb25zdGV4cHIgZmxvYXQgYWxwaGFDb21wb25lbnRB
c0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21w
b25lbnQoKSk7IH0KIAogICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1
cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CkBAIC02Miw3ICs1OCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSByZWRDb21wb25l
bnQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBncmVlbkNvbXBvbmVudCgpKSwgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGJsdWVDb21wb25lbnQoKSksIGFscGhhIH07CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IGFzU1JHQkEo
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gYXNT
UkdCQSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92
PFQsIGZsb2F0PikKKyAgICAgICAgICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0
KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5Db21wb25lbnQo
KSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBjb252ZXJ0VG9D
b21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9OworICAgICAgICBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICByZXR1cm4geyBy
ZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwgYmx1ZUNvbXBvbmVudCgpLCBhbHBoYUNv
bXBvbmVudCgpIH07CisgICAgfQogCiAgICAgdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KICAgICBj
b25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25zdApAQCAtNzksNiArODEsMTAgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKKyAgICBjb25zdGV4cHIgdWludDhfdCByZWRDb21wb25lbnQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9CisgICAgY29uc3RleHByIHVpbnQ4X3QgZ3Jl
ZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDg7IH0KKyAgICBjb25zdGV4
cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCiAg
ICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CiAKQEAgLTkwLDEzICs5Niw5IEBAIGNvbnN0
ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW4KIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWludDhfdD4mKTsKIFNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAotU2ltcGxlQ29sb3IgcHJlbXVs
dGlwbHlGbG9vcmluZyhTaW1wbGVDb2xvcik7Ci1TaW1wbGVDb2xvciBwcmVtdWx0aXBseUNlaWxp
bmcoU2ltcGxlQ29sb3IpOwotU2ltcGxlQ29sb3IgdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvcik7
Ci0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikK
IHsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUoKTsKKyAgICByZXR1cm4gYS52YWx1
ZUFzQVJHQigpID09IGIudmFsdWVBc0FSR0IoKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQpAQCAtMTE2LDI1ICsxMTgsMTQgQEAgY29u
c3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihpbgogCiBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+JiBzUkdCQSkKIHsKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsK
KyAgICByZXR1cm4geyBzUkdCQS5yZWQsIHNSR0JBLmdyZWVuLCBzUkdCQS5ibHVlLCBzUkdCQS5h
bHBoYSB9OwogfQogCiBpbmxpbmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNS
R0JBPGZsb2F0PiYgc1JHQkEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQTsKLSAg
ICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKHIpLCBjb252ZXJ0VG9Db21wb25lbnRC
eXRlKGcpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRl
KGEpIH07CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihjb252ZXJ0VG9Db21wb25lbnRCeXRl
cyhzUkdCQSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4g
U2ltcGxlQ29sb3I6OmFzU1JHQkEoKSBjb25zdAotewotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjpp
c19mbG9hdGluZ19wb2ludF92PFQ+KQotICAgICAgICByZXR1cm4geyBjb252ZXJ0VG9Db21wb25l
bnRGbG9hdChyZWRDb21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGdyZWVuQ29t
cG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdChibHVlQ29tcG9uZW50KCkpLCAgY29u
dmVydFRvQ29tcG9uZW50RmxvYXQoYWxwaGFDb21wb25lbnQoKSkgfTsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiB7IHJlZENvbXBvbmVudCgpLCBncmVlbkNvbXBvbmVudCgpLCBibHVlQ29tcG9u
ZW50KCksIGFscGhhQ29tcG9uZW50KCkgfTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKIG5hbWVzcGFjZSBzdGQgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYS5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTYsNyArMzk2LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNl
dEZyb21WYQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
OworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7
CiAgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkg
c2V0RnJvbVZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwgQChhKV1dOwogfQogCkBAIC00MzksNyAr
NDM5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFsdQogewogICAg
IGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byBbciwg
ZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgW3N0YXRpY19j
YXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpAW0Ao
ciksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIApAQCAtNDk2LDcgKzQ5Niw3IEBAIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMKICAgICAgICAgcmV0dXJuOwogCiAgICAg
W3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0
VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBjb2xvcikgewotICAgICAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAg
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudGVtcGxhdGUgdG9TUkdCQUxvc3N5PHVpbnQ4
X3Q+KCk7CiAgICAgICAgIHJldHVybiBAW0AociksIEAoZyksIEAoYiksIEAoYSldOwogICAgIH0p
LmdldCgpXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHJl
dmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDggKzM2
Nyw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0RnJvbVZhbHUKICAgICBpZiAo
YW5pbWF0aW9uVHlwZSgpICE9IEJhc2ljKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNp
bXBsZUNvbG9yID0gdmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBDR0Zsb2F0
IGFbNF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNv
bXBvbmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhh
Q29tcG9uZW50KCkgfTsKKyAgICBhdXRvIGNvbXBvbmVudHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKKyAgICBDR0Zsb2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25l
bnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRh
aW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7
CiAgICAgQ0FDRkFuaW1hdGlvblNldEZyb21WYWx1ZShtX2FuaW1hdGlvbi5nZXQoKSwgdi5nZXQo
KSk7CiB9CkBAIC00MTksOCArNDE5LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpz
ZXRUb1ZhbHVlKAogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gQmFzaWMpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gc2ltcGxlQ29sb3IgPSB2YWx1ZS50b1NSR0JBU2ltcGxlQ29sb3JM
b3NzeSgpOwotICAgIENHRmxvYXQgYVs0XSA9IHsgc2ltcGxlQ29sb3IucmVkQ29tcG9uZW50KCks
IHNpbXBsZUNvbG9yLmdyZWVuQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQo
KSwgc2ltcGxlQ29sb3IuYWxwaGFDb21wb25lbnQoKSB9OworICAgIGF1dG8gY29tcG9uZW50cyA9
IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIENHRmxvYXQgYVs0XSA9IHsgY29t
cG9uZW50cy5yZWQsIGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50
cy5hbHBoYSB9OwogICAgIFJldGFpblB0cjxDQUNGVmVjdG9yUmVmPiB2ID0gYWRvcHRDRihDQUNG
VmVjdG9yQ3JlYXRlKDQsIGEpKTsKICAgICBDQUNGQW5pbWF0aW9uU2V0VG9WYWx1ZShtX2FuaW1h
dGlvbi5nZXQoKSwgdi5nZXQoKSk7CiB9CkBAIC00ODksOCArNDg5LDggQEAgdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uV2luOjpzZXRWYWx1ZXMoYwogICAgICAgICAKICAgICBSZXRhaW5QdHI8Q0ZN
dXRhYmxlQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2
YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8gc2ltcGxlQ29sb3Ig
PSB2YWx1ZVtpXS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgICAgICBDR0Zsb2F0IGFb
NF0gPSB7IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBv
bmVudCgpLCBzaW1wbGVDb2xvci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29t
cG9uZW50KCkgfTsKKyAgICAgICAgYXV0byBjb21wb25lbnRzID0gdmFsdWVbaV0udG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIENHRmxvYXQgYVs0XSA9IHsgY29tcG9uZW50cy5yZWQs
IGNvbXBvbmVudHMuZ3JlZW4sIGNvbXBvbmVudHMuYmx1ZSwgY29tcG9uZW50cy5hbHBoYSB9Owog
ICAgICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4gdiA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNy
ZWF0ZSg0LCBhKSk7CiAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgdi5n
ZXQoKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzOTE4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgY29weUNvbnRleHRQcm9w
ZXJ0aWVzKGNhaXJvX3QqIHNyY0MKIAogdm9pZCBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNhaXJv
X3QqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0
LCByLCBnLCBiLCBhKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDI2Mzkx
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgR3JhZGllbnQ6OnBs
YXRmb3JtRGVzdHJveSgpCiAKIHN0YXRpYyB2b2lkIGFkZENvbG9yU3RvcFJHQkEoY2Fpcm9fcGF0
dGVybl90ICpncmFkaWVudCwgR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxB
bHBoYSkKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKICAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmEoZ3JhZGllbnQsIHN0
b3Aub2Zmc2V0LCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEpOwogfQogCkBAIC01NSw3ICs1NSw3
IEBAIHR5cGVkZWYgc3RydWN0IHBvaW50X3QgewogCiBzdGF0aWMgdm9pZCBzZXRDb3JuZXJDb2xv
clJHQkEoY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCwgaW50IGlkLCBHcmFkaWVudDo6Q29sb3JT
dG9wIHN0b3AsIGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
c3RvcC5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHN0b3Au
Y29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNhaXJvX21lc2hfcGF0dGVybl9zZXRf
Y29ybmVyX2NvbG9yX3JnYmEoZ3JhZGllbnQsIGlkLCByLCBnLCBiLCBhICogZ2xvYmFsQWxwaGEp
OwogfQogCkBAIC0xMzUsOCArMTM1LDggQEAgc3RhdGljIHZvaWQgYWRkQ29uaWNTZWN0b3IoY2Fp
cm9fcGF0dGVybgogCiBzdGF0aWMgR3JhZGllbnQ6OkNvbG9yU3RvcCBpbnRlcnBvbGF0ZUNvbG9y
U3RvcChHcmFkaWVudDo6Q29sb3JTdG9wIGZyb20sIEdyYWRpZW50OjpDb2xvclN0b3AgdG8pCiB7
Ci0gICAgYXV0byBbcjEsIGcxLCBiMSwgYTFdID0gZnJvbS5jb2xvci50b1NSR0JBTG9zc3koKTsK
LSAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0by5jb2xvci50b1NSR0JBTG9zc3koKTsKKyAg
ICBhdXRvIFtyMSwgZzEsIGIxLCBhMV0gPSBmcm9tLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKKyAgICBhdXRvIFtyMiwgZzIsIGIyLCBhMl0gPSB0by5jb2xvci50b1NSR0JBTG9zc3k8Zmxv
YXQ+KCk7CiAKICAgICBmbG9hdCBvZmZzZXQgPSBmcm9tLm9mZnNldCArICh0by5vZmZzZXQgLSBm
cm9tLm9mZnNldCkgKiAwLjVmOwogICAgIGZsb2F0IHIgPSByMSArIChyMiAtIHIxKSAqIDAuNWY7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDkgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZAogICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKICAgICAgICAgICAgIHVuc2ln
bmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBhdXRvIHBpeGVsQ29sb3IgPSB1bnBy
ZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0pOwotICAgICAgICAgICAgcGl4ZWxDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZENvbXBvbmVudCgp
XSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpXSwgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCldLCBwaXhlbENvbG9yLmFscGhhQ29tcG9uZW50KCkp
OwotICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbHlDZWlsaW5nKHBpeGVsQ29sb3IpLnZh
bHVlQXNBUkdCKCk7CisgICAgICAgICAgICBhdXRvIHBpeGVsQ29tcG9uZW50cyA9IHVucHJlbXVs
dGlwbGllZChhc1NSR0JBKEFSR0IgeyAqcGl4ZWwgfSkpOworICAgICAgICAgICAgcGl4ZWxDb21w
b25lbnRzID0geyBsb29rVXBUYWJsZVtwaXhlbENvbXBvbmVudHMucmVkXSwgbG9va1VwVGFibGVb
cGl4ZWxDb21wb25lbnRzLmdyZWVuXSwgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLmJsdWVd
LCBwaXhlbENvbXBvbmVudHMuYWxwaGEgfTsKKyAgICAgICAgICAgICpwaXhlbCA9IGFzQVJHQihw
cmVtdWx0aXBsaWVkQ2VpbGluZyhwaXhlbENvbXBvbmVudHMpKS52YWx1ZTsKICAgICAgICAgfQog
ICAgIH0KICAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5n
ZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUlt
YWdlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBp
eGVsU29saWRDb2xvcihjCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogCiAgICAgdW5zaWduZWQq
IHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkoU2lt
cGxlQ29sb3IgeyAqcGl4ZWwgfSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcih1bnByZW11
bHRpcGxpZWQoYXNTUkdCQShBUkdCIHsgKnBpeGVsIH0pKSk7CiB9CiAKIHZvaWQgZHJhd05hdGl2
ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2Zp
bHRlcnMvRkVMaWdodGluZ05FT04uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaAkocmV2aXNpb24g
MjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFTGlnaHRpbmdORU9OLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMSArMTExLDExIEBA
IGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW8KICAgICAvLyBTZXQgbGln
aHQgc291cmNlIGFyZ3VtZW50cy4KICAgICBmbG9hdEFyZ3VtZW50cy5jb25zdE9uZSA9IDE7CiAK
LSAgICBhdXRvIHNpbXBsZUNvbG9yID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgYXV0byBjb2xvciA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3k8
dWludDhfdD4oKTsKIAotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yUmVkID0gc2ltcGxlQ29sb3Iu
cmVkQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JHcmVlbiA9IHNpbXBsZUNv
bG9yLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgZmxvYXRBcmd1bWVudHMuY29sb3JCbHVlID0gc2lt
cGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yUmVkID0g
Y29sb3IucmVkOworICAgIGZsb2F0QXJndW1lbnRzLmNvbG9yR3JlZW4gPSBjb2xvci5ncmVlbjsK
KyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckJsdWUgPSBjb2xvci5ibHVlOwogICAgIGZsb2F0QXJn
dW1lbnRzLnBhZGRpbmc0ID0gMDsKIAogICAgIGlmIChtX2xpZ2h0U291cmNlLT50eXBlKCkgPT0g
TFNfUE9JTlQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDA1LDEwICs0MDUsMTAgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGln
aHRpbmcoVWludDhDbGFtcAogICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQg
LSAxOwogICAgIAogICAgIGlmIChvcGVyYXRpbmdDb2xvclNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9MaW5lYXJTUkdCQSht
X2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7
CiAgICAgICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0g
RmxvYXRQb2ludDNEKHIsIGcsIGIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gbV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgICAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAg
ICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQ
b2ludDNEKHIsIGcsIGIpOwogICAgIH0KICAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdE
YXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEw
LDcgQEAgYm9vbCBGaWx0ZXJPcGVyYXRpb25zOjp0cmFuc2Zvcm1Db2xvcihDbwogICAgIGlmIChj
b2xvci5pc1NlbWFudGljKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JH
QkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDog
bV9vcGVyYXRpb25zKSB7CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT50cmFuc2Zvcm1Db2xvcihz
UkdCQUNvbG9yKSkKQEAgLTEyOSw3ICsxMjksNyBAQCBib29sIEZpbHRlck9wZXJhdGlvbnM6Omlu
dmVyc2VUcmFuc2Zvcm1DCiAgICAgaWYgKGNvbG9yLmlzU2VtYW50aWMoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5KCk7
CisgICAgYXV0byBzUkdCQUNvbG9yID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogCiAg
ICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBtX29wZXJhdGlvbnMpIHsKICAgICAgICAgaWYgKCFv
cGVyYXRpb24tPmludmVyc2VUcmFuc2Zvcm1Db2xvcihzUkdCQUNvbG9yKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAkocmV2
aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Nv
bG9yR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBDb2xvcjo6Q29sb3Io
Y29uc3QgR2RrUkdCQSYgY29sb3IpCiAKIENvbG9yOjpvcGVyYXRvciBHZGtSR0JBKCkgY29uc3QK
IHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3Is
IGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiB7IHIsIGcsIGIs
IGEgfTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAJKHJldmlzaW9uIDI2MzkxOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdCb3JkZXIoY29uc3QgQwogICAgIFJlZjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpTb2xpZENvbG9yKTsKICAgICBnbFVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bUlEKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRv
U1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQoY29s
b3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLT5jb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGdsTGluZVdpZHRoKHdpZHRoKTsKIApAQCAt
Mjc1LDcgKzI3NSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3TnVtYmVyKGludCBudW0K
ICAgICBjYWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKIAogICAgIC8vIFNpbmNl
IHdlIHdvbid0IHN3YXAgUitCIHdoZW4gdXBsb2FkaW5nIGEgdGV4dHVyZSwgcGFpbnQgd2l0aCB0
aGUgc3dhcHBlZCBSK0IgY29sb3IuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NS
R0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3IsIGIsIGcsIHIsIGEpOwogCiAg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTQxNCw3ICs0
MTQsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlRmlsdGVyUHJvZ3JhbShUZXh0dXJlCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6
IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29t
cG9zaXRpbmcuCi0gICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11bHRpcGxpZWQo
c2hhZG93LmNvbG9yKCkudG9TUkdCQUxvc3N5KCkpOworICAgICAgICAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KSk7CiAgICAgICAgICAgICBnbFVuaWZvcm00Zihwcm9ncmFtLmNvbG9yTG9jYXRpb24oKSwgciwg
ZywgYiwgYSk7CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLmJsdXJSYWRpdXNMb2Nh
dGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7
CiAgICAgICAgICAgICBnbFVuaWZvcm0yZihwcm9ncmFtLnNoYWRvd09mZnNldExvY2F0aW9uKCks
IDAsIDApOwpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29s
aWRDb2xvcihjb24KICAgICBSZWY8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0g
PSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBnbFVzZVByb2dyYW0ocHJv
Z3JhbS0+cHJvZ3JhbUlEKCkpOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBwcmVtdWx0aXBs
aWVkKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHByZW11
bHRpcGxpZWQoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKICAgICBnbFVuaWZvcm00Zihw
cm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgIGlmIChhIDwgMSAmJiBp
c0JsZW5kaW5nQWxsb3dlZCkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CkBAIC02ODYs
NyArNjg2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKGNvbgogCiB2
b2lkIFRleHR1cmVNYXBwZXJHTDo6Y2xlYXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBnbENsZWFyQ29s
b3IociwgZywgYiwgYSk7CiAgICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29s
b3JEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Db2xvckRpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MTMgKzQwLDEzIEBAIENvbG9yOjpDb2xvcihEMkQxX0NPTE9SX0YgY29sb3IpCiAKIENvbG9yOjpv
cGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdAogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8Zmxv
YXQ+KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKTsKIH0KIAogQ29sb3I6
Om9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5
PGZsb2F0PigpOwogICAgIHJldHVybiBEMkQxOjpWZWN0b3I0RihyLCBnLCBiLCBhKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQy
RDFSZW4KICAgICBWZWN0b3I8RDJEMV9HUkFESUVOVF9TVE9QPiBncmFkaWVudFN0b3BzOwogICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRXh0ZW5kZWRDb2xvci4KICAgICBmb3IgKGF1dG8g
c3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50
b1NSR0JBTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgICAgIGdyYWRpZW50U3RvcHMuYXBwZW5kKEQyRDE6Okdy
YWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVuCiAgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBncmFtbWFyUGF0dGVybkNvbG9yIHsgbWFrZVNpbXBsZUNvbG9yKDAsIDEyOCwgMCkgfTsKIAog
ICAgIGNvbnN0IFNpbXBsZUNvbG9yJiBwYXR0ZXJuQ29sb3IgPSBzdHlsZS5tb2RlID09IERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyID8gZ3JhbW1hclBhdHRlcm5Db2xvciA6
IHNwZWxsaW5nUGF0dGVybkNvbG9yOwotICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNv
bnRleHQsIHBhdHRlcm5Db2xvci5yZWRDb21wb25lbnQoKSwgcGF0dGVybkNvbG9yLmdyZWVuQ29t
cG9uZW50KCksIHBhdHRlcm5Db2xvci5ibHVlQ29tcG9uZW50KCksIHBhdHRlcm5Db2xvci5hbHBo
YUNvbXBvbmVudCgpKTsKKyAgICBhdXRvIHBhdHRlcm5Db2xvckNvbXBvbmVudHMgPSBwYXR0ZXJu
Q29sb3IuYXNTUkdCQTx1aW50OF90PigpOworICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9y
KGNvbnRleHQsIHBhdHRlcm5Db2xvckNvbXBvbmVudHMucmVkLCBwYXR0ZXJuQ29sb3JDb21wb25l
bnRzLmdyZWVuLCBwYXR0ZXJuQ29sb3JDb21wb25lbnRzLmJsdWUsIHBhdHRlcm5Db2xvckNvbXBv
bmVudHMuYWxwaGEpOwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZSA9IGdldFVz
ZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAgICAgQ0dQb2ludCBwaGFzZSA9IENHUG9pbnRBcHBseUFm
ZmluZVRyYW5zZm9ybShwb2ludCwgdXNlclRvQmFzZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3OSw3ICszNzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6cm90CiAKIEQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFs
cGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9T
UkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAq
IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIs
NyArMTQwMiw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpkaXNhYmxlZFRleHRDb2xvcihjb24KICAg
ICAvLyBJZiB0aGVyZSdzIG5vdCB2ZXJ5IG11Y2ggY29udHJhc3QgYmV0d2VlbiB0aGUgZGlzYWJs
ZWQgY29sb3IgYW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLAogICAgIC8vIGp1c3QgbGVhdmUgdGhl
IHRleHQgY29sb3IgYWxvbmUuIFdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIGEgZ29vZCBjb250cmFz
dCBjb2xvciBzY2hlbWUgc28gdGhhdCBpdCBoYXMgcmVhbGx5IGJhZCBjb250cmFzdC4KICAgICAv
LyBJZiB0aGUgY29udHJhc3Qgd2FzIGFscmVhZHkgcG9vciwgdGhlbiBpdCBkb2Vzbid0IGRvIGFu
eSBnb29kIHRvIGNoYW5nZSBpdCB0byBhIGRpZmZlcmVudCBwb29yIGNvbnRyYXN0IGNvbG9yIHNj
aGVtZS4KLSAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNhYmxlZENvbG9yLnRvU1JHQkFMb3NzeSgp
LCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkpIDwgbWluQ29sb3JDb250cmFzdFZhbHVl
KQorICAgIGlmIChjb250cmFzdFJhdGlvKGRpc2FibGVkQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0
PigpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKSA8IG1pbkNvbG9yQ29u
dHJhc3RWYWx1ZSkKICAgICAgICAgcmV0dXJuIHRleHRDb2xvcjsKIAogICAgIHJldHVybiBkaXNh
YmxlZENvbG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU1LDcgKzEwNTUsNyBAQCBib29sIFJl
bmRlclRoZW1lSU9TOjpwYWludEJ1dHRvbkRlY29yYXRpCiBzdGF0aWMgYm9vbCBzaG91bGRVc2VD
b252ZXhHcmFkaWVudChjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB1c2luZyBsdW1pbmFuY2UuCi0gICAgYXV0byBb
ciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAg
IGZsb2F0IGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAg
ICAgcmV0dXJuIGEgPiAwLjUgJiYgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA8IDAuNTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAkocmV2aXNp
b24gMjYzOTE4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBib29sIHRleHRDb2xvcklzTGVnaWJs
ZUFnYWluc3RCYWNrZ3JvdW5kCiB7CiAgICAgLy8gVXNlcyB0aGUgV0NBRyAyLjAgZGVmaW5pdGlv
biBvZiBsZWdpYmlsaXR5OiBhIGNvbnRyYXN0IHJhdGlvIG9mIDQuNToxIG9yIGdyZWF0ZXIuCiAg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMC8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0
LWNvbnRyYXN0Ci0gICAgcmV0dXJuIGNvbnRyYXN0UmF0aW8odGV4dENvbG9yLnRvU1JHQkFMb3Nz
eSgpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5KCkpID4gNC41OworICAgIHJldHVybiBj
b250cmFzdFJhdGlvKHRleHRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCksIGJhY2tncm91bmRD
b2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpID4gNC41OwogfQogCiBzdGF0aWMgQ29sb3IgYWRq
dXN0Q29sb3JGb3JWaXNpYmlsaXR5T25CYWNrZ3JvdW5kKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3Is
IGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRp
dmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNjM5MTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDE1ICs4MSwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFu
aW1hdGUoU1ZHRWxlbWVudCosIGZsb2F0IHByb2dyZXNzLCB1bnNpZ25lZCByZXBlYXRDb3VudCwg
Q29sb3ImIGFuaW1hdGVkKQogICAgIHsKLSAgICAgICAgYXV0byBzaW1wbGVBbmltYXRlZCA9IGFu
aW1hdGVkLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlRnJv
bSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25Nb2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVk
IDogbV9mcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxl
VG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxl
VG9BdEVuZE9mRHVyYXRpb24gPSB0b0F0RW5kT2ZEdXJhdGlvbigpLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JB
TG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9hbmltYXRpb25N
b2RlID09IEFuaW1hdGlvbk1vZGU6OlRvID8gc2ltcGxlQW5pbWF0ZWQgOiBtX2Zyb20udG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0g
dG9BdEVuZE9mRHVyYXRpb24oKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICAgICAgCi0g
ICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLnJlZENvbXBvbmVudCgpLCBzaW1wbGVUby5yZWRDb21wb25lbnQoKSwgc2ltcGxl
VG9BdEVuZE9mRHVyYXRpb24ucmVkQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLnJlZENvbXBv
bmVudCgpKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCBy
ZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVUby5ncmVlbkNv
bXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVlbkNvbXBvbmVudCgpLCBzaW1w
bGVBbmltYXRlZC5ncmVlbkNvbXBvbmVudCgpKTsKLSAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6
OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQo
KSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVl
Q29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVDb21wb25lbnQoKSk7Ci0gICAgICAgIGZs
b2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZy
b20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG9B
dEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21w
b25lbnQoKSk7CisgICAgICAgIGZsb2F0IHJlZCA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJl
cGVhdENvdW50LCBzaW1wbGVGcm9tLnJlZCwgc2ltcGxlVG8ucmVkLCBzaW1wbGVUb0F0RW5kT2ZE
dXJhdGlvbi5yZWQsIHNpbXBsZUFuaW1hdGVkLnJlZCk7CisgICAgICAgIGZsb2F0IGdyZWVuID0g
QmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uZ3JlZW4sIHNp
bXBsZVRvLmdyZWVuLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ncmVlbiwgc2ltcGxlQW5pbWF0
ZWQuZ3JlZW4pOworICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywg
cmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZSwgc2ltcGxlVG8uYmx1ZSwgc2ltcGxlVG9BdEVu
ZE9mRHVyYXRpb24uYmx1ZSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZSk7CisgICAgICAgIGZsb2F0IGFs
cGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxw
aGEsIHNpbXBsZVRvLmFscGhhLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYSwgc2ltcGxl
QW5pbWF0ZWQuYWxwaGEpOwogICAgICAgICAKICAgICAgICAgYW5pbWF0ZWQgPSBtYWtlU2ltcGxl
Q29sb3Iocm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRBbmRD
bGFtcENvbG9yQ2hhbm5lbChhbHBoYSkpOwogICAgIH0KQEAgLTEwMywxMiArMTAzLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgICAgICAKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gZnJvbUNvbG9y
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSB0b0Nv
bG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9
IGZyb21Db2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVU
byA9IHRvQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKLSAgICAgICAgZmxvYXQgcmVk
ID0gc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSAtIHNpbXBsZVRvLnJlZENvbXBvbmVudCgpOwot
ICAgICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZyb20uZ3JlZW5Db21wb25lbnQoKSAtIHNpbXBs
ZVRvLmdyZWVuQ29tcG9uZW50KCk7Ci0gICAgICAgIGZsb2F0IGJsdWUgPSBzaW1wbGVGcm9tLmJs
dWVDb21wb25lbnQoKSAtIHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZmxvYXQg
cmVkID0gc2ltcGxlRnJvbS5yZWQgLSBzaW1wbGVUby5yZWQ7CisgICAgICAgIGZsb2F0IGdyZWVu
ID0gc2ltcGxlRnJvbS5ncmVlbiAtIHNpbXBsZVRvLmdyZWVuOworICAgICAgICBmbG9hdCBibHVl
ID0gc2ltcGxlRnJvbS5ibHVlIC0gc2ltcGxlVG8uYmx1ZTsKIAogICAgICAgICByZXR1cm4gc3Rk
OjpoeXBvdChyZWQsIGdyZWVuLCBibHVlKTsKICAgICB9CkBAIC0xMjYsMTQgKzEyNiwxNCBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBhZGRGcm9tQW5kVG9WYWx1ZXMoU1ZHRWxlbWVudCopIG92ZXJy
aWRlCiAgICAgewotICAgICAgICBhdXRvIHNpbXBsZUZyb20gPSBtX2Zyb20udG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKLSAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1fdG8udG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9mcm9tLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBTG9z
c3k8dWludDhfdD4oKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFueSBhbHBoYSBhbmQgc2V0cyBh
bHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCiAgICAgICAgIG1fdG8gPSBtYWtlU2ltcGxl
Q29sb3IoCi0gICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLnJl
ZENvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSksCi0gICAgICAgICAgICBy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCkgKyBzaW1w
bGVGcm9tLmdyZWVuQ29tcG9uZW50KCkpLAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbChzaW1wbGVUby5ibHVlQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmJsdWVDb21wb25l
bnQoKSkKKyAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVk
ICsgc2ltcGxlRnJvbS5yZWQpLAorICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bChzaW1wbGVUby5ncmVlbiArIHNpbXBsZUZyb20uZ3JlZW4pLAorICAgICAgICAgICAgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlICsgc2ltcGxlRnJvbS5ibHVlKQogICAg
ICAgICApOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAt
MDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFBhcnQgMSBv
ZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhfdD4gYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1l
IC0gbGV0J3MgY29udmVyZ2UgdGhlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEzOTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGUubW06CisgICAgICAgIChXZWJLaXQ6OmFuaW1hdGlvblZhbHVl
RnJvbUtleWZyYW1lVmFsdWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRD
b2xvcik6CisgICAgICAgIEFkYXB0IHRvIHVzZSB0ZW1wbGF0aXplZCB0b1NSR0JBTG9zc3k8Zmxv
YXQvdWludDhfdD4uCisKIDIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElN
RV9JTkNPTVBMRVRFCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktp
dENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDcgQEAgdm9pZCB3ZWJraXRDb2xvckZpbGxGcm9tV2ViQ29yZUNvbG9yKGNvbgogewogICAgIFJF
TEVBU0VfQVNTRVJUKHdlYkNvcmVDb2xvci5pc1ZhbGlkKCkpOwogCi0gICAgYXV0byBbciwgZywg
YiwgYV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSB3ZWJDb3JlQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIGNvbG9yLT5yZWQg
PSByOwogICAgIGNvbG9yLT5ncmVlbiA9IGc7CiAgICAgY29sb3ItPmJsdWUgPSBiOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29udHJvbGxlckd0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1ZpZXdHZXN0dXJlQ29u
dHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzgsNyArMzM4LDcgQEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZQog
ICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2JhY2tncm91bmRD
b2xvckZvckN1cnJlbnRTbmFwc2hvdCA9IGNvbG9yOwogICAgICAgICAgICAgaWYgKCFtX2N1cnJl
bnRTd2lwZVNuYXBzaG90UGF0dGVybikgewotICAgICAgICAgICAgICAgIGF1dG8gW3JlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgICAgICAgICAgICAg
IGF1dG8gW3JlZCwgZ3JlZW4sIGJsdWUsIGFscGhhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90UGF0dGVybiA9IGFk
b3B0UmVmKGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYmEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMjYzOTE4KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NTYsNyArNjU2LDcgQEAgYm9vbCBXZWJGcmFtZTo6Z2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29s
bwogICAgIGlmICghYmdDb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgICpyZWQg
PSByOwogICAgICpncmVlbiA9IGc7CiAgICAgKmJsdWUgPSBiOwpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0JKHJldmlzaW9uIDI2
MzkxOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNyAr
NjkzLDcgQEAgc3RhdGljIE5TT2JqZWN0KiBhbmltYXRpb25WYWx1ZUZyb21LZXlmcgogICAgICAg
ICByZXR1cm4gQChrZXlmcmFtZVZhbHVlLm51bWJlclZhbHVlKCkpOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlOjpDb2xvcktl
eVR5cGU6IHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBrZXlmcmFtZVZhbHVlLmNvbG9y
VmFsdWUoKS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGtleWZyYW1lVmFsdWUuY29sb3JWYWx1ZSgpLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OwogICAgICAgICByZXR1cm4gQFsgQChyKSwgQChnKSwgQChiKSwgQChhKSBdOwogICAgIH0KIApJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjYzOTI1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMjAtMDctMDMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisg
ICAgICAgIFBhcnQgMSBvZiBTaW1wbGVDb2xvciBhbmQgU1JHQkE8dWludDhfdD4gYXJlIGVzc2Vu
dGlhbGx5IHRoZSBzYW1lIC0gbGV0J3MgY29udmVyZ2UgdGhlbQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzOTQ4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBBZGFwdCB0ZXN0cyB0byB1
c2UgdGVtcGxhdGl6ZWQgdG9TUkdCQUxvc3N5PGZsb2F0L3VpbnQ4X3Q+LgorCiAyMDIwLTA3LTAz
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgc3VwcG9y
dCBmb3IgRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVURQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkocmV2aXNp
b24gMjYzOTE4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVz
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRv
SFNMX1doaXRlKQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OndoaXRlOwogCi0gICAgYXV0
byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNs
YUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBF
Q1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5zYXR1cmF0aW9uKTsKQEAgLTU0LDcgKzU0LDcgQEAgVEVTVChDb2xvciwgUkdCVG9I
U0xfQmxhY2spCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6YmxhY2s7CiAKLSAgICBhdXRv
IGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xh
Q29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVD
VF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNs
YUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtNzAsNyArNzAsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hT
TF9SZWQpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsK
IAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAg
ICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwog
CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9B
VF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC04Niw3ICs4Niw3IEBAIFRFU1QoQ29s
b3IsIFJHQlRvSFNMX0dyZWVuKQogewogICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDAsIDI1NSwgMCk7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JB
TG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLjMzMzMzMzM0LCBoc2xhQ29sb3Iu
aHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAt
MTAyLDcgKzEwMiw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiB7CiAgICAgQ29sb3Ig
Y29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KTsKIAotICAgIGF1dG8gaHNsYUNvbG9y
ID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRv
SFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDAuNjY2NjY2NjksIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBoc2xh
Q29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMTgsNyArMTE4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9I
U0xfRGFya0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6ZGFya0dyYXk7CiAKLSAg
ICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0
byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAg
IEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLnNhdHVyYXRpb24pOwpAQCAtMTM0LDcgKzEzNCw3IEBAIFRFU1QoQ29sb3Is
IFJHQlRvSFNMX0dyYXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Z3JheTsKIAotICAg
IGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRv
IGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgw
LCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xNTAsNyArMTUwLDcgQEAgVEVTVChDb2xvciwg
UkdCVG9IU0xfTGlnaHRHcmF5KQogewogICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmxpZ2h0R3Jh
eTsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsK
KyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkp
OwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9G
TE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xODMsMjkgKzE4MywyOSBAQCBU
RVNUKENvbG9yLCBWYWxpZGl0eSkKICAgICB2YWxpZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDEs
IDIsIDMsIDQpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBF
WFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc2ltcGxlVmFs
aWRDb2xvciA9IHZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBFWFBF
Q1RfRVEoc2ltcGxlVmFsaWRDb2xvci5yZWRDb21wb25lbnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VR
KHNpbXBsZVZhbGlkQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgMik7Ci0gICAgRVhQRUNUX0VRKHNp
bXBsZVZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAzKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxl
VmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKKyAgICBhdXRvIHZhbGlkQ29sb3JDb21w
b25lbnRzID0gdmFsaWRDb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1Rf
RVEodmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAxKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRDb2xv
ckNvbXBvbmVudHMuZ3JlZW4sIDIpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50
cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEodmFsaWRDb2xvckNvbXBvbmVudHMuYWxwaGEsIDQp
OwogCiAgICAgQ29sb3IgeWV0QW5vdGhlclZhbGlkQ29sb3IoV1RGTW92ZSh2YWxpZENvbG9yKSk7
CiAgICAgRVhQRUNUX1RSVUUoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBF
WFBFQ1RfRkFMU0UoeWV0QW5vdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAgICBhdXRv
IHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yID0geWV0QW5vdGhlclZhbGlkQ29sb3IudG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0QW5vdGhlclZhbGlk
Q29sb3IucmVkQ29tcG9uZW50KCksIDEpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVy
VmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAyKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlWWV0
QW5vdGhlclZhbGlkQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCAzKTsKLSAgICBFWFBFQ1RfRVEoc2lt
cGxlWWV0QW5vdGhlclZhbGlkQ29sb3IuYWxwaGFDb21wb25lbnQoKSwgNCk7CisgICAgYXV0byB5
ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b1NS
R0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JD
b21wb25lbnRzLnJlZCwgMSk7CisgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VRKHlldEFub3RoZXJWYWxpZENvbG9yQ29t
cG9uZW50cy5ibHVlLCAzKTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21w
b25lbnRzLmFscGhhLCA0KTsKIAogICAgIG90aGVyVmFsaWRDb2xvciA9IFdURk1vdmUoeWV0QW5v
dGhlclZhbGlkQ29sb3IpOwogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlk
KCkpOwogICAgIEVYUEVDVF9GQUxTRShvdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKLSAg
ICBhdXRvIHNpbXBsZU90aGVyVmFsaWRDb2xvciA9IG90aGVyVmFsaWRDb2xvci50b1NSR0JBU2lt
cGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IucmVk
Q29tcG9uZW50KCksIDEpOwotICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3IuZ3Jl
ZW5Db21wb25lbnQoKSwgMik7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5i
bHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1wbGVPdGhlclZhbGlkQ29sb3Iu
YWxwaGFDb21wb25lbnQoKSwgNCk7CisgICAgYXV0byBvdGhlclZhbGlkQ29sb3JDb21wb25lbnRz
ID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9F
UShvdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLnJlZCwgMSk7CisgICAgRVhQRUNUX0VRKG90aGVy
VmFsaWRDb2xvckNvbXBvbmVudHMuZ3JlZW4sIDIpOworICAgIEVYUEVDVF9FUShvdGhlclZhbGlk
Q29sb3JDb21wb25lbnRzLmJsdWUsIDMpOworICAgIEVYUEVDVF9FUShvdGhlclZhbGlkQ29sb3JD
b21wb25lbnRzLmFscGhhLCA0KTsKIH0KIAogVEVTVChDb2xvciwgTHVtaW5hbmNlKQpAQCAtMjE2
LDIxICsyMTYsMjIgQEAgVEVTVChDb2xvciwgTHVtaW5hbmNlKQogICAgIGF1dG8gYyA9IG1ha2VT
aW1wbGVDb2xvcig4NSwgOTAsIDE2MCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKGMpLmx1
bWluYW5jZSgpLCAwLjExNzgxNjkyKTsKIAotICAgIEVYUEVDVF9FUShjLnJlZENvbXBvbmVudCgp
LCA4NSk7Ci0gICAgRVhQRUNUX0VRKGMuZ3JlZW5Db21wb25lbnQoKSwgOTApOwotICAgIEVYUEVD
VF9FUShjLmJsdWVDb21wb25lbnQoKSwgMTYwKTsKLQotICAgIGF1dG8gY0xpZ3RlbmVkID0gQ29s
b3IoYykubGlnaHRlbmVkKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoQ29sb3IoY0xpZ3RlbmVkKS5sdW1pbmFuY2UoKSwgMC4yOTE2ODgwOCk7Ci0gICAg
RVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWRDb21wb25lbnQoKSwgMTMwKTsKLSAgICBFWFBFQ1RfRVEo
Y0xpZ3RlbmVkLmdyZWVuQ29tcG9uZW50KCksIDEzNyk7Ci0gICAgRVhQRUNUX0VRKGNMaWd0ZW5l
ZC5ibHVlQ29tcG9uZW50KCksIDI0NCk7Ci0KLSAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGMp
LmRhcmtlbmVkKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoQ29sb3IoY0RhcmtlbmVkKS5sdW1pbmFuY2UoKSwgMC4wMjcwMDY3MjcpOwotICAgIEVYUEVD
VF9FUShjRGFya2VuZWQucmVkQ29tcG9uZW50KCksIDQwKTsKLSAgICBFWFBFQ1RfRVEoY0Rhcmtl
bmVkLmdyZWVuQ29tcG9uZW50KCksIDQzKTsKLSAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLmJsdWVD
b21wb25lbnQoKSwgNzYpOworICAgIGF1dG8gY0NvbXBvbmVudHMgPSBjLmFzU1JHQkE8dWludDhf
dD4oKTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMucmVkLCA4NSk7CisgICAgRVhQRUNUX0VR
KGNDb21wb25lbnRzLmdyZWVuLCA5MCk7CisgICAgRVhQRUNUX0VRKGNDb21wb25lbnRzLmJsdWUs
IDE2MCk7CisKKyAgICBhdXRvIGNMaWd0ZW5lZCA9IENvbG9yKGMpLmxpZ2h0ZW5lZCgpLnRvU1JH
QkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihtYWtlU2ltcGxl
Q29sb3IoY0xpZ3RlbmVkKSkubHVtaW5hbmNlKCksIDAuMjkxNjg4MDgpOworICAgIEVYUEVDVF9F
UShjTGlndGVuZWQucmVkLCAxMzApOworICAgIEVYUEVDVF9FUShjTGlndGVuZWQuZ3JlZW4sIDEz
Nyk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ibHVlLCAyNDQpOworCisgICAgYXV0byBjRGFy
a2VuZWQgPSBDb2xvcihjKS5kYXJrZW5lZCgpLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAg
IEVYUEVDVF9GTE9BVF9FUShDb2xvcihtYWtlU2ltcGxlQ29sb3IoY0RhcmtlbmVkKSkubHVtaW5h
bmNlKCksIDAuMDI3MDA2NzI3KTsKKyAgICBFWFBFQ1RfRVEoY0RhcmtlbmVkLnJlZCwgNDApOwor
ICAgIEVYUEVDVF9FUShjRGFya2VuZWQuZ3JlZW4sIDQzKTsKKyAgICBFWFBFQ1RfRVEoY0Rhcmtl
bmVkLmJsdWUsIDc2KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVk
Q29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MzkxOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDEsNyArMjQxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiAg
ICAgQ29sb3IgcDNDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1
LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUocDNDb2xvci5pc0V4
dGVuZGVkKCkpOwogCi0gICAgYXV0byBzUkdCQUNvbG9yID0gcDNDb2xvci50b1NSR0JBTG9zc3ko
KTsKKyAgICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsK
ICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFDb2xvci5yZWQs
IDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkFD
b2xvci5ncmVlbiwgMC40NjI1Mzc4ODVmKSk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3Nl
bnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC4xNDkxNDc4MzhmKSk7CkBAIC0yNTIsNyAr
MjUyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBMaW5lYXJTUkdCQ29udmVyc2lvbgogewogICAg
IENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAu
NzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKICAgICBFWFBFQ1RfVFJVRShsaW5lYXJDb2xv
ci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhckNvbG9yLnRvU1JH
QkFMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGxpbmVhckNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JH
QkFDb2xvci5yZWQsIDEuMGYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5
RXF1YWwoc1JHQkFDb2xvci5ncmVlbiwgMC43MzUzNTY5MjdmKSk7CiAgICAgRVhQRUNUX1RSVUUo
V1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JBQ29sb3IuYmx1ZSwgMC41MzcwOTg3MDZmKSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403529</attachid>
            <date>2020-07-04 11:10:44 -0700</date>
            <delta_ts>2020-07-04 12:20:55 -0700</delta_ts>
            <desc>Part 1</desc>
            <filename>bug-213948-20200704111043.patch</filename>
            <type>text/plain</type>
            <size>78018</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBAQAorMjAyMC0wNy0wNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUGFydCAxIG9mIFNpbXBsZUNvbG9y
IGFuZCBTUkdCQTx1aW50OF90PiBhcmUgZXNzZW50aWFsbHkgdGhlIHNhbWUgLSBsZXQncyBjb252
ZXJnZSB0aGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM5NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBCZWdpbiBjb252ZXJnaW5nIFNpbXBsZUNvbG9yIGFuZCBTUkdCQTx1aW50OF90Piwgc3RhcnRp
bmcgd2l0aCByZW1vdmluZyB1c2FnZXMgdGhhdAorICAgICAgICB3ZXJlIGdldHRpbmcgU2ltcGxl
Q29sb3JzIHRvIGFjY2VzcyBvciBvcGVyYXRlIG9uIHRoZSBjb2xvcidzIGNvbXBvbmVudHMuCisK
KyAgICAgICAgLSBSZXBsYWNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgd2l0aCB0b1NSR0JB
TG9zc3k8dWludDhfdD4KKyAgICAgICAgLSBSZXBsYWNlIHRvU1JHQkFMb3NzeSgpIHdpdGggdG9T
UkdCQUxvc3N5PGZsb2F0PigpLgorICAgICAgICAtIFJlbW92ZSBkaXJlY3QgY29sb3IgY29tcG9u
ZW50IGFjY2Vzc29ycyBmcm9tIFNpbXBsZUNvbG9yLiAKKyAgICAgICAgLSBBZGQgbmV3IEFSR0Ig
dHlwZSB0byBzdXBwb3J0IGV4cGxpY2l0IGNvbnZlcnNpb24gZnJvbSBwYWNrZWQgQVJHQiBiaXRz
IHRvIGEgY29sb3IgdHlwZS4KKyAgICAgICAgLSBVcGRhdGUgcHJlbXVsaXRwbGljYXRpb24gZnVu
Y3Rpb25zIHRvIG9wZXJhdGUgb24gU1JHQkE8dWludDhfdD4gYW5kIHJlbmFtZSB0aGVtIHRvCisg
ICAgICAgICAgbWF0Y2ggZXhpc3RpbmcgZnVuY3Rpb24gb3BlcmF0aW5nIG9uIFNSR0JBPGZsb2F0
Pi4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgUmVtb3ZlcyBTaW1wbGVDb2xvci5jcHAKKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbG9yVmFsdWUgY29uc3QpOgor
ICAgICAgICBSZXBsYWNlIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgd2l0aCB0b1NSR0JBTG9z
c3k8dWludDhfdD4uCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3Np
YmlsaXR5T2JqZWN0KToKKyAgICAgICAgUmVwbGFjZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
IHdpdGggdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElz
b2xhdGVkT2JqZWN0Ojpjb2xvclZhbHVlIGNvbnN0KToKKyAgICAgICAgUmVwbGFjZSB0b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpIHdpdGggdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+LgorCisgICAgICAg
ICogY3NzL0RlcHJlY2F0ZWRDU1NPTVJHQkNvbG9yLmg6CisgICAgICAgIFJlcGxhY2UgdG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSB3aXRoIHRvU1JHQkFMb3NzeTx1aW50OF90Pi4KKyAgICAgICAg
CisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UpOgorICAgICAgICBSZXBs
YWNlIHRvU1JHQkFMb3NzeSgpIHdpdGggdG9TUkdCQUxvc3N5PGZsb2F0PigpLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmxpZ2h0bmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDb2xvcjo6bHVtaW5hbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpzZW1hbnRpY0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5oOgorICAgICAgICBSZW1vdmUgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KSBhbmQgdGVtcGxhdGl6ZSB0b1NSR0JBTG9zc3koKSB0byBzdXBwb3J0IGJvdGgKKyAgICAgICAg
bG9zc3kgY29udmVyc2lvbiB0byBieXRlIGJhc2VkIGNvbXBvbmVudHMgYXMgd2VsbC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQmxlbmRpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YmxlbmRTb3VyY2VPdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aFdoaXRl
KToKKyAgICAgICAgUmVwbGFjZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHdpdGggdG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+LgorCisgICAgICAgIChXZWJDb3JlOjpibGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpibGVuZFdpdGhvdXRQcmVtdWx0aXBseSk6CisgICAgICAgIFJlcGxhY2UgdG9TUkdC
QVNpbXBsZUNvbG9yTG9zc3koKSB3aXRoIHRvU1JHQkFMb3NzeTx1aW50OF90Pi4gQWRvcHQgbmV3
IHByZW11bHRpcGxpZWRDZWlsaW5nCisgICAgICAgIGFuZCB1bnByZW11bHRpcGxpZWQgZnVuY3Rp
b25zIHRoYXQgb3BlcmF0ZSBvbiBTUkdCQTx1aW50OF90PiAocmF0aGVyIHRoYW4gU2ltcGxlQ29s
b3IpIGFuZCAKKyAgICAgICAgY2xhbXBpbmcgY29udmVyc2lvbiB0byBTUkdCQTx1aW50OF90PiB2
aWEgY29udmVydFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+LiBwcmVtdWx0aXBsaWVkQ2VpbGluZyAK
KyAgICAgICAgbm93IHdvcmtzIGNvcnJlY3RseSBmb3IgMCBhbHBoYSwgc28gbm8gd29ya2Fyb3Vu
ZCBpcyBuZWVkZWQgYW55bW9yZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFzQVJHQik6CisgICAgICAgIChXZWJDb3JlOjph
c1NSR0JBKToKKyAgICAgICAgQWRkIG5ldyB0eXBlIG9mIGNvbG9yIHN0cnVjdCByZXByZXNlbnRp
bmcgYSBmb3JtYXQgcGFja2luZy4gVGhlIGluaXRpYWwgb25lIGlzIEFSR0IgdG8gc3VwcG9ydAor
ICAgICAgICB0aGUgZmV3IHBsYWNlcyB1c2luZyBTaW1wbGVDb2xvciB0byBtYW5pcHVsYXRlIEFS
R0IgcGl4ZWwgZGF0YS4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWQpOgorICAgICAgICAo
V2ViQ29yZTo6cHJlbXVsdGlwbGllZEZsb29yaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11
bHRpcGxpZWRDZWlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENvbXBv
bmVudEJ5dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmg6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9Db21wb25lbnRCeXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMpOgorICAgICAgICBNb3ZlIHJlbWFpbmlu
ZyBwcmVtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbnMgaGVyZSAoZnJvbSBTaW1wbGVDb2xvci5oL2Nw
cCkgYW5kIHJlaW1wbGVtZW50CisgICAgICAgIHRvIG9wZXJhdGUgb24gU1JHQkE8dWludDhfdD4u
IEFsc28gc2xpZ2h0bHkgcmVuYW1lLCBwcmVtdWx0aXBseSAtPiBwcmVtdWx0aXBsaWVkLCB0byAK
KyAgICAgICAgbWF0Y2ggZXhpc3RpbmcgcHJlbXVsdGlwbGllZCBmdW5jdGlvbnMuIFdoaWxlIG1v
dmluZyB0aGVtLCBhbHNvIGZpeCB0aGUgcHJlbXVsdGlwbGllZAorICAgICAgICBmdW5jdGlvbnMg
dG8gYmV0dGVyIHN1cHBvcnQgMCBhbHBoYSB0byBhdm9pZCB3b3JrYXJvdW5kcyBpbiBjYWxsZXJz
LgorICAgICAgICAKKyAgICAgICAgQWRkaXRpb25hbCwgdGhpcyBhZGRzIGNvbnZlcnRUb0NvbXBv
bmVudEJ5dGVzL2NvbnZlcnRUb0NvbXBvbmVudEZsb2F0cyBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIHdoaWNoIGNvbnZlcnQgdG8vZnJvbSB1aW50OF90L2Zsb2F0IGJhc2VkIGNvbG9yIHR5cGVz
LCBhbmQgc3VwcG9ydCBjcmVhdGluZyBjb2xvciB0eXBlcworICAgICAgICBmcm9tIHZhbHVlcyBw
b3RlbnRpYWxseSBvdXRzaWRlIG9mIHRoZWlyIHN1cHBvcnRlZCB2YWx1ZSByYW5nZS4gUmlnaHQg
bm93LCB0aGF0IHZhbHVlCisgICAgICAgIHJhbmdlIGlzIGFsd2F5cyBjb25zaWRlcmVyIHRvIGJl
IDAtMjU1IGZvciB1aW50OF90IGFuZCAwLTEgZm9yIGZsb2F0LCBidXQgdGhhdCBjYW4gYmUKKyAg
ICAgICAgY2huYWdlZCBpbiB0aGUgZnV0dXJlIGJ5IGFsbG93aW5nIGNvbG9yIHR5cGUgc3RydWN0
cyB0byBpbmRpY2F0ZSB0aGVpciBzdXBwb3J0ZWQgcmFuZ2VzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbmRl
ZENvbG9yOjp0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3kgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5kZWRDb2xvcjo6dG9TUkdCQUxvc3N5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbmRlZENvbG9yOjp0b1NSR0JBTG9zc3kgY29uc3QpOgorICAgICAgICBSZW5hbWUgZXhp
c3RpbmcgdG9TUkdCQUxvc3N5KCkgdG8gdG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkgYW5k
IHJlcGxhY2UgdGVtcGxhdGl6ZQorICAgICAgICB0b1NSR0JBTG9zc3koKSwgd2l0aCB0aGUgdWlu
dDhfdCBjYXNlIGp1c3QgZG93biBjb252ZXJ0aW5nIHZpYSBuZXcgY29udmVydFRvQ29tcG9uZW50
Qnl0ZXMuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2lu
Z1N0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6ZmlsbFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNldFBpeGVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpibGVuZFBpeGVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpwaXhlbFZhbHVlIGNvbnN0KToKKyAgICAgICAgUmVw
bGFjZSB1c2FnZSBvZiBTaW1wbGVDb2xvciB3aXRoIG5ldyBBUkdCIHR5cGUgZm9yIGNvbnZlcnNp
b24gZnJvbSBBUkdCIHRvIFNSR0JBPHVpbnQ4X3Q+LgorICAgICAgICBVcGRhdGUgdG8gdXNlIG5l
dyBwcmVtdWxpdHBsaWNhdGlvbiBmdW5jdGlvbnMuIEFsc28sIHVwZGF0ZSB0aGUgaW50ZXJmYWNl
IHRvIHRha2UgcGl4ZWwgCisgICAgICAgIGNvbXBvbmVudHMgYXMgdWludDhfdCwgcmF0aGVyIHRo
YW4gdW5zaWduZWQsIGFzIHRoYXQgaXMgd2hhdCB0aGUgY2FsbGVycyBhcmUgcGFzc2luZyBhbnl3
YXksCisgICAgICAgIGFuZCBpdCBhdm9pZHMgdXMgaGF2aW5nIHRvIGNsYW1wL2Nhc3QgbWFudWFs
bHkgYWxsIG92ZXIgdGhlIGNhc2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Q29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjphbHBoYUNvbXBvbmVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YXNTUkdCQSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVkQ29tcG9uZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpncmVlbkNvbXBvbmVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Ymx1ZUNvbXBvbmVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcik6
CisgICAgICAgIFNpbXBsaWZ5IGludGVyZmFjZSwgbWFraW5nIHJlZCwgZ3JlZW4gYW5kIGJsdWUg
Y29tcG9uZW50IGFjY2Vzc29ycyBwcml2YXRlIGFuZCBoYXZpbmcgCisgICAgICAgIGNhbGxlcnMg
YWxsIHVzZSBTUkdCQSBkaXJlY3RseS4gUmVtb3ZlIHByZW11bHRpcGxpY2F0aW9uIGZ1bmN0aW9u
cyBpbiBmYXZvciBvZiBuZXcgb25lcyAgCisgICAgICAgIGluIENvbG9yVXRpbGl0aWVzLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpz
ZXRUb1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
c2V0VmFsdWVzKToKKyAgICAgICAgUmVwbGFjZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHdp
dGggdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwOgorICAgICAgICAoUGxhdGZvcm1DQUFu
aW1hdGlvbldpbjo6c2V0RnJvbVZhbHVlKToKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25X
aW46OnNldFRvVmFsdWUpOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFs
dWVzKToKKyAgICAgICAgUmVwbGFjZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHdpdGggdG9T
UkdCQUxvc3N5PHVpbnQ4X3Q+LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9VdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0U291cmNlUkdCQUZyb21D
b2xvcik6CisgICAgICAgIFJlcGxhY2UgdG9TUkdCQUxvc3N5KCkgd2l0aCB0b1NSR0JBTG9zc3k8
ZmxvYXQ+KCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZENvbG9yU3RvcFJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0Q29ybmVyQ29sb3JSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVycG9s
YXRlQ29sb3JTdG9wKToKKyAgICAgICAgUmVwbGFjZSB0b1NSR0JBTG9zc3koKSB3aXRoIHRvU1JH
QkFMb3NzeTxmbG9hdD4oKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNv
bG9yU3BhY2UpOgorICAgICAgICBSZXBsYWNlIHVzYWdlIG9mIFNpbXBsZUNvbG9yIHdpdGggbmV3
IEFSR0IgdHlwZSBmb3IgY29udmVyc2lvbiBmcm9tIEFSR0IgdG8gU1JHQkE8dWludDhfdD4uCisg
ICAgICAgIFVwZGF0ZSB0byB1c2UgbmV3IHByZW11bGl0cGxpY2F0aW9uIGZ1bmN0aW9ucy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAg
ICAgICBSZXBsYWNlIHVzYWdlIG9mIFNpbXBsZUNvbG9yIHdpdGggbmV3IEFSR0IgdHlwZSBmb3Ig
Y29udmVyc2lvbiBmcm9tIEFSR0IgdG8gU1JHQkE8dWludDhfdD4uCisgICAgICAgIFVwZGF0ZSB0
byB1c2UgbmV3IHByZW11bGl0cGxpY2F0aW9uIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlOZW9uKToKKyAgICAgICAgUmVwbGFj
ZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHdpdGggdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgIFJlcGxh
Y2UgdG9TUkdCQUxvc3N5KCkgd2l0aCB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3JtQ29sb3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9uczo6aW52ZXJzZVRyYW5zZm9ybUNvbG9yIGNv
bnN0KToKKyAgICAgICAgUmVwbGFjZSB0b1NSR0JBTG9zc3koKSB3aXRoIHRvU1JHQkFMb3NzeTxm
bG9hdD4oKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgR2RrUkdCQSBjb25zdCk6CisgICAg
ICAgIFJlcGxhY2UgdG9TUkdCQUxvc3N5KCkgd2l0aCB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd0JvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckdMOjpkcmF3U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6
OmNsZWFyQ29sb3IpOgorICAgICAgICBSZXBsYWNlIHRvU1JHQkFMb3NzeSgpIHdpdGggdG9TUkdC
QUxvc3N5PGZsb2F0PigpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9y
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om9wZXJhdG9yIEQyRDFfQ09M
T1JfRiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgRDJEMV9WRUNU
T1JfNEYgY29uc3QpOgorICAgICAgICBSZXBsYWNlIHRvU1JHQkFMb3NzeSgpIHdpdGggdG9TUkdC
QUxvc3N5PGZsb2F0PigpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRp
ZW50RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmdlbmVyYXRlR3Jh
ZGllbnQpOgorICAgICAgICBSZXBsYWNlIHRvU1JHQkFMb3NzeSgpIHdpdGggdG9TUkdCQUxvc3N5
PGZsb2F0PigpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIFJlcGxhY2UgZGlyZWN0IHVzYWdlIGNvbXBv
bmVudCBhY2Nlc3MgZnJvbSBTaW1wbGVDb2xvciB3aXRoIHVzYWdlIG9mIGFjY2Vzc2VkIFNSR0JB
PHVpbnQ4X3Q+LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29s
b3JXaXRoR2xvYmFsQWxwaGEgY29uc3QpOgorICAgICAgICBSZXBsYWNlIHRvU1JHQkFMb3NzeSgp
IHdpdGggdG9TUkdCQUxvc3N5PGZsb2F0PigpLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpkaXNhYmxlZFRleHRD
b2xvciBjb25zdCk6CisgICAgICAgIFJlcGxhY2UgdG9TUkdCQUxvc3N5KCkgd2l0aCB0b1NSR0JB
TG9zc3k8ZmxvYXQ+KCkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRVc2VDb252ZXhHcmFkaWVudCk6CisgICAgICAgIFJl
cGxhY2UgdG9TUkdCQUxvc3N5KCkgd2l0aCB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCkuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4
dENvbG9ySXNMZWdpYmxlQWdhaW5zdEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIFJlcGxhY2Ug
dG9TUkdCQUxvc3N5KCkgd2l0aCB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCkuCisKKyAgICAgICAgKiBz
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25Db2xvckZ1bmN0aW9uOjphbmltYXRlKToKKyAg
ICAgICAgUmVwbGFjZSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIHdpdGggdG9TUkdCQUxvc3N5
PHVpbnQ4X3Q+LgorCiAyMDIwLTA3LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYWtlIGdlbmVyYXRlLXVuaWZpZWQtc291cmNlcy5zaCBub3QgZGVwZW5kIG9u
IGZlYXR1cmVzIGJlaW5nIGxpc3RlZCBpbiBGRUFUVVJFX0RFRklORVMgZW52aXJvbm1lbnQgdmFy
aWFibGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTg4Niw3ICsxODg2LDYgQEAgcGxh
dGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9T
YW1wbGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1Rl
eHRSdW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTk5ODQsNyAr
OTk4NCw2IEBACiAJCTdDMzBEOTgwMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fib3J0Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMwRDk4MTFGODE1QUMxMDAyNjgzNTYg
LyogSlNBYm9ydFNpZ25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fi
b3J0U2lnbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBEOTgyMUY4MTVB
QzIwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYzMTkgLyogU2ltcGxlQ29sb3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlQ29sb3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzMxQzg4QzI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29s
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlQ29sb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MzMzBBMDMxREY5RTk1QjAwRDMzOTVDIC8qIFBvc2l0aW9uT3B0aW9ucy5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gUG9zaXRpb25PcHRpb25zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI1Njk3LDcgKzI1Njk2LDYgQEAKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91
bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1
ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAq
LywKLQkJCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYzMTkgLyogU2ltcGxlQ29sb3IuY3BwICovLAog
CQkJCTdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICovLAogCQkJCUNE
NjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3VyY2VCdWZmZXJQcml2YXRlLmggKi8sCiAJCQkJ
Q0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk4MywxMCArMTk4MywxMCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojpjb2xvclZhbHVlCiAgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKCkpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIGNvbG9yID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVu
dD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAg
ICByID0gY29sb3IucmVkQ29tcG9uZW50KCk7Ci0gICAgZyA9IGNvbG9yLmdyZWVuQ29tcG9uZW50
KCk7Ci0gICAgYiA9IGNvbG9yLmJsdWVDb21wb25lbnQoKTsKKyAgICBhdXRvIGNvbG9yID0gZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUoKSkudmFsdWVBc0NvbG9yKCkudG9TUkdCQUxv
c3N5PHVpbnQ4X3Q+KCk7CisgICAgciA9IGNvbG9yLnJlZDsKKyAgICBnID0gY29sb3IuZ3JlZW47
CisgICAgYiA9IGNvbG9yLmJsdWU7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAkocmV2aXNpb24gMjYzOTM3KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MiwxNCArOTIsMTQgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0
QXR0cmlidXRlU2V0RgogCiAgICAgQ29sb3IgYmdDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGlmIChiZ0NvbG9yLmlz
VmFsaWQoKSkgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBiZ0NvbG9yLnRv
U1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICBidWZmZXIucmVzZXQoZ19zdHJkdXBfcHJp
bnRmKCIlaSwlaSwlaSIsIHIsIGcsIGIpKTsKICAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRy
aWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9CR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7CiAgICAgfQogCiAgICAgQ29sb3IgZmdDb2xvciA9
IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgaWYg
KGZnQ29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZmdDb2xv
ci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IGZnQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIGJ1ZmZlci5yZXNldChn
X3N0cmR1cF9wcmludGYoIiVpLCVpLCVpIiwgciwgZywgYikpOwogICAgICAgICByZXN1bHQgPSBh
ZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShB
VEtfVEVYVF9BVFRSX0ZHX0NPTE9SKSwgYnVmZmVyLmdldCgpKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJl
ZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMjYzOTM3KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwMSwxMCArNzAxLDEwIEBAIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6c2V0
UHJldmVudEtleWJvYXIKIAogdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojpjb2xvclZhbHVlKGludCYg
ciwgaW50JiBnLCBpbnQmIGIpIGNvbnN0CiB7Ci0gICAgYXV0byBjb2xvciA9IGNvbG9yQXR0cmli
dXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7Ci0gICAgciA9IGNvbG9yLnJlZENvbXBvbmVudCgpOwotICAgIGcgPSBjb2xvci5ncmVl
bkNvbXBvbmVudCgpOwotICAgIGIgPSBjb2xvci5ibHVlQ29tcG9uZW50KCk7CisgICAgYXV0byBj
b2xvciA9IGNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUpLnRv
U1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIHIgPSBjb2xvci5yZWQ7CisgICAgZyA9IGNvbG9y
LmdyZWVuOworICAgIGIgPSBjb2xvci5ibHVlOwogfQogCiBBWENvcmVPYmplY3QqIEFYSXNvbGF0
ZWRPYmplY3Q6OmFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkQ1NTT01SR0JDb2xvci5o
CShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZENTU09N
UkdCQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAg
RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWUmIGJsdWUoKSB7IHJldHVybiBtX2JsdWU7IH0K
ICAgICBEZXByZWNhdGVkQ1NTT01QcmltaXRpdmVWYWx1ZSYgYWxwaGEoKSB7IHJldHVybiBtX2Fs
cGhhOyB9CiAKLSAgICBTaW1wbGVDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7
IH0KKyAgICBTaW1wbGVDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihtX2NvbG9yKTsgfQogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclR5
cGU+IHN0YXRpYyBSZWY8RGVwcmVjYXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVdyYXBw
ZXIoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIE51bWJlclR5cGUgbnVtYmVyKQpAQCAtNDYs
MTUgKzQ2LDE1IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgRGVwcmVjYXRlZENTU09NUkdCQ29s
b3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3duZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAg
ICAgOiBtX2NvbG9yKGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpCi0gICAgICAgICwg
bV9yZWQoY3JlYXRlV3JhcHBlcihvd25lciwgbV9jb2xvci5yZWRDb21wb25lbnQoKSkpCi0gICAg
ICAgICwgbV9ncmVlbihjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmdyZWVuQ29tcG9uZW50
KCkpKQotICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2NvbG9yLmJsdWVD
b21wb25lbnQoKSkpCi0gICAgICAgICwgbV9hbHBoYShjcmVhdGVXcmFwcGVyKG93bmVyLCBtX2Nv
bG9yLmFscGhhQ29tcG9uZW50QXNGbG9hdCgpKSkKKyAgICAgICAgOiBtX2NvbG9yKGNvbG9yLnRv
U1JHQkFMb3NzeTx1aW50OF90PigpKQorICAgICAgICAsIG1fcmVkKGNyZWF0ZVdyYXBwZXIob3du
ZXIsIG1fY29sb3IucmVkKSkKKyAgICAgICAgLCBtX2dyZWVuKGNyZWF0ZVdyYXBwZXIob3duZXIs
IG1fY29sb3IuZ3JlZW4pKQorICAgICAgICAsIG1fYmx1ZShjcmVhdGVXcmFwcGVyKG93bmVyLCBt
X2NvbG9yLmJsdWUpKQorICAgICAgICAsIG1fYWxwaGEoY3JlYXRlV3JhcHBlcihvd25lciwgY29u
dmVydFRvQ29tcG9uZW50RmxvYXQobV9jb2xvci5hbHBoYSkpKQogICAgIHsKICAgICB9CiAKLSAg
ICBTaW1wbGVDb2xvciBtX2NvbG9yOworICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3I7CiAgICAg
UmVmPERlcHJlY2F0ZWRDU1NPTVByaW1pdGl2ZVZhbHVlPiBtX3JlZDsKICAgICBSZWY8RGVwcmVj
YXRlZENTU09NUHJpbWl0aXZlVmFsdWU+IG1fZ3JlZW47CiAgICAgUmVmPERlcHJlY2F0ZWRDU1NP
TVByaW1pdGl2ZVZhbHVlPiBtX2JsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTYy
MSw3ICs2MjEsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SCiAg
ICAgICAgICAgICAgICAgaWYgKHJlbmRlclN0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1
dG8gdGV4dENvbG9yID0gcmVuZGVyU3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRDb2xvci5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaHNsYSA9IHRvSFNMQSh0ZXh0Q29sb3Iu
dG9TUkdCQUxvc3N5KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBoc2xhID0gdG9I
U0xBKHRleHRDb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGb3JjZSB0aGUgbGlnaHRuZXNzIG9mIHRoZSB1bmRlcmxpbmUgY29sb3IgdG8g
dGhlIG1pZGRsZSwgYW5kIG11bHRpcGx5IHRoZSBhbHBoYSBieSAzOCUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBzbyB0aGUgY29sb3Igd2lsbCBhcHBlYXIgb24gbGlnaHQgYW5kIGRhcmsg
YmFja2dyb3VuZHMsIHNpbmNlIG9ubHkgb25lIGNvbG9yIGNhbiBiZSBzcGVjaWZpZWQuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAy
NjM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgQ29sb3IgQ29sb3I6OmxpZ2h0ZW5lZCgpIGNv
bnN0CiAgICAgaWYgKGlzU2ltcGxlKCkgJiYgYXNTaW1wbGUoKSA9PSBibGFjaykKICAgICAgICAg
cmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JB
TG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsK
ICAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogCiAgICAgaWYgKHYgPT0gMC4w
ZikKQEAgLTEwMyw3ICsxMDMsNyBAQCBDb2xvciBDb2xvcjo6ZGFya2VuZWQoKSBjb25zdAogICAg
IGlmIChpc1NpbXBsZSgpICYmIGFzU2ltcGxlKCkgPT0gd2hpdGUpCiAgICAgICAgIHJldHVybiBk
YXJrZW5lZFdoaXRlOwogICAgIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAKICAg
ICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIg
PSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwpAQCAtMTE0LDE0ICsxMTQsMTQgQEAg
Q29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKIGZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBj
b25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9u
IHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KLSAg
ICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFMb3NzeSgpKTsKKyAgICByZXR1cm4g
V2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiB9CiAKIGZsb2F0IENv
bG9yOjpsdW1pbmFuY2UoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJs
eSBhdm9pZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29y
aXRobXMKICAgICAvLyBmb3IgbHVtaW5hbmNlIChlLmcuIGNvbnZlcnRUb1hZWihjKS55Q29tcG9u
ZW50KCkpLgotICAgIHJldHVybiBXZWJDb3JlOjpsdW1pbmFuY2UodG9TUkdCQUxvc3N5KCkpOwor
ICAgIHJldHVybiBXZWJDb3JlOjpsdW1pbmFuY2UodG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIH0K
IAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKSBjb25zdApAQCAtMTQ5
LDcgKzE0OSw3IEBAIENvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKICAgICBpZiAo
aXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICByZXR1cm4geyB0b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpLCBTZW1hbnRpYyB9OworICAgIHJldHVybiB7IG1ha2VTaW1w
bGVDb2xvcih0b1NSR0JBTG9zc3k8dWludDhfdD4oKSksIFNlbWFudGljIH07CiB9CiAKIHN0ZDo6
cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBDb2xvcjo6Y29sb3JTcGFj
ZUFuZENvbXBvbmVudHMoKSBjb25zdApAQCAtMTU5LDIwICsxNTksNiBAQCBzdGQ6OnBhaXI8Q29s
b3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsCiAgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JH
QiwgYXNDb2xvckNvbXBvbmVudHMoYXNTaW1wbGUoKS5hc1NSR0JBPGZsb2F0PigpKSB9OwogfQog
Ci1TaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAotewot
ICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoYXNF
eHRlbmRlZCgpLnRvU1JHQkFMb3NzeSgpKTsKLSAgICByZXR1cm4gYXNTaW1wbGUoKTsKLX0KLQot
U1JHQkE8ZmxvYXQ+IENvbG9yOjp0b1NSR0JBTG9zc3koKSBjb25zdAotewotICAgIGlmIChpc0V4
dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkudG9TUkdCQUxvc3N5KCk7Ci0g
ICAgcmV0dXJuIGFzU2ltcGxlKCkuYXNTUkdCQTxmbG9hdD4oKTsKLX0KLQogVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIHJl
dHVybiB0cyA8PCBzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dChjb2xvcik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDI2Mzkz
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMSwxMCArMTIxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0
ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+PiBjb2xvclNwYWNlQW5k
Q29tcG9uZW50cygpIGNvbnN0OwogCiAgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0Ig
Y29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgotICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZUNv
bG9yIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIHdpbGwg
Y29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCi0gICAgV0VCQ09S
RV9FWFBPUlQgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFNSR0JBPFQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgQ29sb3IgbGlnaHRlbmVkKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29s
b3IgZGFya2VuZWQoKSBjb25zdDsKQEAgLTI2OCw2ICsyNjUsMTMgQEAgaW5saW5lIHVuc2lnbmVk
IENvbG9yOjpoYXNoKCkgY29uc3QKICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRh
LnNpbXBsZUNvbG9yQW5kRmxhZ3MpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxU
PiBDb2xvcjo6dG9TUkdCQUxvc3N5KCkgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQor
ICAgICAgICByZXR1cm4gYXNFeHRlbmRlZCgpLnRvU1JHQkFMb3NzeTxUPigpOworICAgIHJldHVy
biBhc1NpbXBsZSgpLmFzU1JHQkE8VD4oKTsKK30KKwogaW5saW5lIENvbG9yIENvbG9yOjppbnZl
cnRlZENvbG9yV2l0aEFscGhhKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gYWxwaGEgPyBpbnZlcnRlZENvbG9yV2l0aEFscGhhKGFscGhhLnZhbHVlKCkpIDogKnRo
aXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckJsZW5kaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ckJsZW5kaW5nLmNwcAkocmV2aXNpb24gMjYzOTM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JCbGVuZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5
LDggQEAgQ29sb3IgYmxlbmRTb3VyY2VPdmVyKGNvbnN0IENvbG9yJiBiYWNrZAogICAgIGlmICgh
c291cmNlLmFscGhhKCkpCiAgICAgICAgIHJldHVybiBiYWNrZHJvcDsKIAotICAgIGF1dG8gW2Jh
Y2tkcm9wUiwgYmFja2Ryb3BHLCBiYWNrZHJvcEIsIGJhY2tkcm9wQV0gPSBiYWNrZHJvcC50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIGF1dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNvdXJj
ZUIsIHNvdXJjZUFdID0gc291cmNlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0
byBbYmFja2Ryb3BSLCBiYWNrZHJvcEcsIGJhY2tkcm9wQiwgYmFja2Ryb3BBXSA9IGJhY2tkcm9w
LnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIGF1dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNv
dXJjZUIsIHNvdXJjZUFdID0gc291cmNlLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCiAgICAg
aW50IGQgPSAweEZGICogKGJhY2tkcm9wQSArIHNvdXJjZUEpIC0gYmFja2Ryb3BBICogc291cmNl
QTsKICAgICBpbnQgYSA9IGQgLyAweEZGOwpAQCAtNjgsNyArNjgsNyBAQCBDb2xvciBibGVuZFdp
dGhXaGl0ZShjb25zdCBDb2xvciYgY29sb3IpCiAgICAgaWYgKCFjb2xvci5pc09wYXF1ZSgpKQog
ICAgICAgICByZXR1cm4gY29sb3I7CiAKLSAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywg
ZXhpc3RpbmdCLCBleGlzdGluZ0FscGhhXSA9IGNvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisgICAgYXV0byBbZXhpc3RpbmdSLCBleGlzdGluZ0csIGV4aXN0aW5nQiwgZXhpc3RpbmdB
bHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKIAogICAgIFNpbXBsZUNvbG9y
IHJlc3VsdDsKICAgICBmb3IgKGludCBhbHBoYSA9IHN0YXJ0QWxwaGE7IGFscGhhIDw9IGVuZEFs
cGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVudCkgewpAQCAtOTcsMTggKzk3LDE3IEBAIENvbG9y
IGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKICAgICBpZiAocHJvZ3Jlc3MgPT0g
MSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgLy8gU2luY2Ug
cHJlbXVsdGlwbHlDZWlsaW5nKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRo
YXQuCi0gICAgYXV0byBwcmVtdWx0aXBsaWVkRnJvbSA9IGZyb20uYWxwaGEoKSA/IHByZW11bHRp
cGx5Q2VpbGluZyhmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5z
cGFyZW50OwotICAgIGF1dG8gcHJlbXVsdGlwbGllZFRvID0gdG8uYWxwaGEoKSA/IHByZW11bHRp
cGx5Q2VpbGluZyh0by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3Bh
cmVudDsKLQotICAgIGF1dG8gcHJlbXVsdEJsZW5kZWQgPSBtYWtlU2ltcGxlQ29sb3IoCi0gICAg
ICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRGcm9tLnJlZENvbXBvbmVudCgpLCBwcmVt
dWx0aXBsaWVkVG8ucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6
YmxlbmQocHJlbXVsdGlwbGllZEZyb20uZ3JlZW5Db21wb25lbnQoKSwgcHJlbXVsdGlwbGllZFRv
LmdyZWVuQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJl
bXVsdGlwbGllZEZyb20uYmx1ZUNvbXBvbmVudCgpLCBwcmVtdWx0aXBsaWVkVG8uYmx1ZUNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRpcGxpZWRG
cm9tLmFscGhhQ29tcG9uZW50KCksIHByZW11bHRpcGxpZWRUby5hbHBoYUNvbXBvbmVudCgpLCBw
cm9ncmVzcykKKyAgICBhdXRvIHByZW11bHRpcGxpZWRGcm9tID0gcHJlbXVsdGlwbGllZENlaWxp
bmcoZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKSk7CisgICAgYXV0byBwcmVtdWx0aXBsaWVk
VG8gPSBwcmVtdWx0aXBsaWVkQ2VpbGluZyh0by50b1NSR0JBTG9zc3k8dWludDhfdD4oKSk7CisK
KyAgICBhdXRvIHByZW11bHRpcGxpZWRCbGVuZGVkID0gY29udmVydFRvQ29tcG9uZW50Qnl0ZXM8
U1JHQkE+KAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5yZWQsIHBy
ZW11bHRpcGxpZWRUby5yZWQsIHByb2dyZXNzKSwKKyAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJl
bXVsdGlwbGllZEZyb20uZ3JlZW4sIHByZW11bHRpcGxpZWRUby5ncmVlbiwgcHJvZ3Jlc3MpLAor
ICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBsaWVkRnJvbS5ibHVlLCBwcmVtdWx0aXBs
aWVkVG8uYmx1ZSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0aXBs
aWVkRnJvbS5hbHBoYSwgcHJlbXVsdGlwbGllZFRvLmFscGhhLCBwcm9ncmVzcykKICAgICApOwog
Ci0gICAgcmV0dXJuIHVucHJlbXVsdGlwbHkocHJlbXVsdEJsZW5kZWQpOworICAgIHJldHVybiBt
YWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBsaWVkKHByZW11bHRpcGxpZWRCbGVuZGVkKSk7CiB9
CiAKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25z
dCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKQEAgLTExOCwxNCArMTE3LDE0IEBAIENvbG9y
IGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG8KICAgICBpZiAocHJvZ3Jlc3MgPT0g
MSAmJiAhdG8uaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBmcm9t
U1JHQiA9IGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBhdXRvIHRvU1JHQiA9
IGZyb20udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIGZyb21TUkdCID0gZnJv
bS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdC
QUxvc3N5PHVpbnQ4X3Q+KCk7CiAKICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAotICAgICAg
ICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRDb21wb25lbnQoKSwgdG9TUkdCLnJlZENvbXBv
bmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVu
Q29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAg
IFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVDb21wb25lbnQoKSwgdG9TUkdCLmJsdWVDb21w
b25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBo
YUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZCwgdG9TUkdCLnJlZCwgcHJvZ3Jlc3MpLAorICAg
ICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbiwgdG9TUkdCLmdyZWVuLCBwcm9ncmVz
cyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWUsIHRvU1JHQi5ibHVlLCBw
cm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmFscGhhLCB0b1NSR0Iu
YWxwaGEsIHByb2dyZXNzKQogICAgICk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM3LDQgKzIzNywyMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBv
cGVyCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAorCisvLyBQYWNrZWQgQ29sb3IgRm9ybWF0
cworCitzdHJ1Y3QgQVJHQiB7CisgICAgdWludDMyX3QgdmFsdWU7Cit9OworCitjb25zdGV4cHIg
QVJHQiBhc0FSR0IoU1JHQkE8dWludDhfdD4gY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNvbG9yLmFscGhhIDw8IDI0IHwgY29sb3IucmVkIDw8IDE2IHwgY29s
b3IuZ3JlZW4gPDwgOCB8IGNvbG9yLmJsdWUpIH07Cit9CisKK2NvbnN0ZXhwciBTUkdCQTx1aW50
OF90PiBhc1NSR0JBKEFSR0IgY29sb3IpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oY29sb3IudmFsdWUgPj4gMTYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihjb2xvci52YWx1
ZSA+PiA4KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oY29sb3IudmFsdWUpLCBzdGF0aWNfY2FzdDx1
aW50OF90Pihjb2xvci52YWx1ZSA+PiAyNCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjYzOTM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw0ICs2
Niw0MyBAQCBTUkdCQTxmbG9hdD4gcHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmCiAgICAgcmV0
dXJuIHsgciAqIGEsIGcgKiBhLCBiICogYSwgYSB9OwogfQogCitTUkdCQTxmbG9hdD4gdW5wcmVt
dWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCit7CisgICAgYXV0byBbciwgZywg
YiwgYV0gPSBjb2xvcjsKKyAgICByZXR1cm4geyByIC8gYSwgZyAvIGEsIGIgLyBhLCBhIH07Cit9
CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRGbG9vcmluZyhTUkdCQTx1aW50OF90PiBj
b2xvcikKK3sKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOworICAgIGlmICghYSkKKyAg
ICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OworICAgIGlmIChhID09IDI1NSkKKyAgICAgICAg
cmV0dXJuIGNvbG9yOworICAgIHJldHVybiBjb252ZXJ0VG9Db21wb25lbnRCeXRlczxTUkdCQT4o
ZmFzdERpdmlkZUJ5MjU1KHIgKiBhKSwgZmFzdERpdmlkZUJ5MjU1KGcgKiBhKSwgZmFzdERpdmlk
ZUJ5MjU1KGIgKiBhKSwgYSk7Cit9CisKK1NSR0JBPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWRDZWls
aW5nKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yKQoreworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3I7CisgICAgaWYgKCFhKQorICAgICAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07CisgICAgaWYg
KGEgPT0gMjU1KQorICAgICAgICByZXR1cm4gY29sb3I7CisgICAgcmV0dXJuIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzPFNSR0JBPihmYXN0RGl2aWRlQnkyNTUociAqIGEgKyAyNTQpLCBmYXN0RGl2
aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyAyNTQpLCBhKTsK
K30KKworc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11bHRpcGxpZWRDb21wb25lbnRCeXRl
KHVpbnQ4X3QgYywgdWludDhfdCBhKQoreworICAgIHJldHVybiAoZmFzdE11bHRpcGx5QnkyNTUo
YykgKyBhIC0gMSkgLyBhOworfQorCitTUkdCQTx1aW50OF90PiB1bnByZW11bHRpcGxpZWQoU1JH
QkE8dWludDhfdD4gY29sb3IpCit7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvcjsKKyAg
ICBpZiAoIWEgfHwgYSA9PSAyNTUpCisgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICByZXR1cm4g
Y29udmVydFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5
dGUociwgYSksIHVucHJlbXVsdGlwbGllZENvbXBvbmVudEJ5dGUoZywgYSksIHVucHJlbXVsdGlw
bGllZENvbXBvbmVudEJ5dGUoYiwgYSksIGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRp
bGl0aWVzLmgJKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDExIEBA
IGZsb2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZsb2F0IGNvbnRyYXN0UmF0
aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNSR0JBPGZs
b2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOworU1JHQkE8ZmxvYXQ+IHVu
cHJlbXVsdGlwbGllZChjb25zdCBTUkdCQTxmbG9hdD4mKTsKKworU1JHQkE8dWludDhfdD4gcHJl
bXVsdGlwbGllZEZsb29yaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHByZW11
bHRpcGxpZWRDZWlsaW5nKFNSR0JBPHVpbnQ4X3Q+KTsKK1NSR0JBPHVpbnQ4X3Q+IHVucHJlbXVs
dGlwbGllZChTUkdCQTx1aW50OF90Pik7CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRQcmVzY2Fs
ZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKQEAgLTU0LDYgKzU5LDI4IEBAIGNvbnN0ZXhw
ciBmbG9hdCBjb252ZXJ0VG9Db21wb25lbnRGbG9hdCgKICAgICByZXR1cm4gYnl0ZSAvIDI1NS4w
ZjsKIH0KIAordGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIENvbG9yVHlwZT4g
aW5saW5lIENvbG9yVHlwZTx1aW50OF90PiBjb252ZXJ0VG9Db21wb25lbnRCeXRlcyhjb25zdCBD
b2xvclR5cGU8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBhc0NvbG9y
Q29tcG9uZW50cyhjb2xvcik7CisgICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0ZShj
b21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzFdKSwgY29u
dmVydFRvQ29tcG9uZW50Qnl0ZShjb21wb25lbnRzWzJdKSwgY29udmVydFRvQ29tcG9uZW50Qnl0
ZShjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gdHlw
ZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBlPHVpbnQ4X3Q+IGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGVzKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiB7
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAociwgMCwgMHhGRikpLCBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdGQ6OmNsYW1wKGcsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4o
c3RkOjpjbGFtcChiLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAo
YSwgMCwgMHhGRikpIH07Cit9CisKK3RlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPiB0eXBlbmFt
ZSBDb2xvclR5cGU+IGNvbnN0ZXhwciBDb2xvclR5cGU8ZmxvYXQ+IGNvbnZlcnRUb0NvbXBvbmVu
dEZsb2F0cyhjb25zdCBDb2xvclR5cGU8dWludDhfdD4mIGNvbG9yKQoreworICAgIGF1dG8gY29t
cG9uZW50cyA9IGFzQ29sb3JDb21wb25lbnRzKGNvbG9yKTsKKyAgICByZXR1cm4geyBjb252ZXJ0
VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzBdKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQo
Y29tcG9uZW50c1sxXSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGNvbXBvbmVudHNbMl0pLCBj
b252ZXJ0VG9Db21wb25lbnRGbG9hdChjb21wb25lbnRzWzNdKSB9OworfQorCit0ZW1wbGF0ZTx0
ZW1wbGF0ZTx0eXBlbmFtZT4gdHlwZW5hbWUgQ29sb3JUeXBlPiBjb25zdGV4cHIgQ29sb3JUeXBl
PGZsb2F0PiBjb252ZXJ0VG9Db21wb25lbnRGbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQg
YiwgZmxvYXQgYSkKK3sKKyAgICByZXR1cm4geyBzdGQ6OmNsYW1wKHIsIDAuMGYsIDEuMGYpLCBz
dGQ6OmNsYW1wKGcsIDAuMGYsIDEuMGYpLCBzdGQ6OmNsYW1wKGIsIDAuMGYsIDEuMGYpLCBzdGQ6
OmNsYW1wKGEsIDAuMGYsIDEuMGYpIH07Cit9CisKIGNvbnN0ZXhwciB1aW50MTZfdCBmYXN0TXVs
dGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0g
dmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENv
bG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9F
eHRlbmRlZENvbG9yLmNwcAkocmV2aXNpb24gMjYzOTM3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDcgQEAgUmVmPEV4dGVuZGVkQ29sb3I+IEV4dGVuZGVkQ29sb3I6OmludmVydAogICAgIHJl
dHVybiBFeHRlbmRlZENvbG9yOjpjcmVhdGUoMS4wZiAtIGMxLCAxLjBmIC0gYzIsIDEuMGYgLSBj
Mywgb3ZlcnJpZGVBbHBoYSwgY29sb3JTcGFjZSgpKTsKIH0KIAotU1JHQkE8ZmxvYXQ+IEV4dGVu
ZGVkQ29sb3I6OnRvU1JHQkFMb3NzeSgpIGNvbnN0CitTUkdCQTxmbG9hdD4gRXh0ZW5kZWRDb2xv
cjo6dG9TUkdCQUZsb2F0Q29tcG9uZW50c0xvc3N5KCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1f
Y29sb3JTcGFjZSkgewogICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgJKHJldmlzaW9u
IDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiAjaW5jbHVkZSAiQ29sb3JD
b21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkNvbG9yVHlw
ZXMuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00OSwxMSArNTEsMTggQEAgcHVibGlj
OgogICAgIFJlZjxFeHRlbmRlZENvbG9yPiBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7CiAg
ICAgUmVmPEV4dGVuZGVkQ29sb3I+IGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQpIGNvbnN0
OwogCi0gICAgU1JHQkE8ZmxvYXQ+IHRvU1JHQkFMb3NzeSgpIGNvbnN0OwotCiAgICAgYm9vbCBp
c1doaXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0JsYWNrKCkgY29uc3Q7CiAKKyAgICAvLyBUaGlz
IHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBpbnRvIHNSR0IuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+IHRvU1JHQkFMb3NzeSgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIGZsb2F0
PikKKyAgICAgICAgICAgIHJldHVybiB0b1NSR0JBRmxvYXRDb21wb25lbnRzTG9zc3koKTsKKyAg
ICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZV92PFQsIHVpbnQ4X3Q+KQorICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGVzKHRvU1JHQkFGbG9hdENvbXBv
bmVudHNMb3NzeSgpKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgRXh0ZW5kZWRDb2xvcihmbG9h
dCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQogICAgICAgICA6IG1fY29tcG9uZW50cyhjMSwgYzIsIGMzLCBhbHBoYSkKQEAgLTYxLDYg
KzcwLDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgU1JH
QkE8ZmxvYXQ+IHRvU1JHQkFGbG9hdENvbXBvbmVudHNMb3NzeSgpIGNvbnN0OworCiAgICAgQ29s
b3JDb21wb25lbnRzPGZsb2F0PiBtX2NvbXBvbmVudHM7CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9y
U3BhY2U7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
YWNraW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNyArMTAyLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0ICZyZWN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYiwgdWludDhfdCBhKQogICAgIHsK
ICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhyZWN0KSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTEzNiw0NSArMTM2LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKICAgICB9CiAKLSAgICB2b2lk
IHNldFBpeGVsKHVpbnQzMl90KiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgIHZvaWQgc2V0UGl4ZWwodWludDMyX3QqIGRlc3QsIHVpbnQ4
X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIsIHVpbnQ4X3QgYSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChkZXN0KTsKICAgICAgICAgKmRlc3QgPSBwaXhlbFZhbHVlKHIsIGcsIGIsIGEpOwogICAg
IH0KIAotICAgIHZvaWQgc2V0UGl4ZWwoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25l
ZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHZvaWQgc2V0UGl4ZWwoaW50IHgsIGlu
dCB5LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpCiAgICAgewog
ICAgICAgICBzZXRQaXhlbChwaXhlbEF0KHgsIHkpLCByLCBnLCBiLCBhKTsKICAgICB9CiAKLSAg
ICB2b2lkIGJsZW5kUGl4ZWwodWludDMyX3QqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcs
IHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgdm9pZCBibGVuZFBpeGVsKHVpbnQzMl90KiBk
ZXN0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpCiAgICAgewog
ICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgU2ltcGxlQ29s
b3IgcGl4ZWwgeyAqZGVzdCB9OworICAgICAgICBhdXRvIHBpeGVsID0gYXNTUkdCQShBUkdCIHsg
KmRlc3QgfSk7CiAKLSAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFwaXhlbC5pc1Zpc2libGUoKSkg
eworICAgICAgICBpZiAoYSA+PSAyNTUgfHwgIXBpeGVsLmFscGhhKSB7CiAgICAgICAgICAgICBz
ZXRQaXhlbChkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgcGl4ZWwg
PSBwcmVtdWx0aXBseUZsb29yaW5nKHBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsID0gcHJlbXVs
dGlwbGllZEZsb29yaW5nKHBpeGVsKTsKIAotICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsK
KyAgICAgICAgdWludDhfdCBkID0gMjU1IC0gYTsKIAotICAgICAgICByID0gZmFzdERpdmlkZUJ5
MjU1KHIgKiBhICsgcGl4ZWwucmVkQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAgZyA9IGZhc3RE
aXZpZGVCeTI1NShnICogYSArIHBpeGVsLmdyZWVuQ29tcG9uZW50KCkgKiBkKTsKLSAgICAgICAg
YiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIHBpeGVsLmJsdWVDb21wb25lbnQoKSAqIGQpOwot
ICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogcGl4ZWwuYWxwaGFDb21wb25lbnQoKSk7
CisgICAgICAgIHIgPSBmYXN0RGl2aWRlQnkyNTUociAqIGEgKyBwaXhlbC5yZWQgKiBkKTsKKyAg
ICAgICAgZyA9IGZhc3REaXZpZGVCeTI1NShnICogYSArIHBpeGVsLmdyZWVuICogZCk7CisgICAg
ICAgIGIgPSBmYXN0RGl2aWRlQnkyNTUoYiAqIGEgKyBwaXhlbC5ibHVlICogZCk7CisgICAgICAg
IGEgKz0gZmFzdERpdmlkZUJ5MjU1KGQgKiBwaXhlbC5hbHBoYSk7CiAKLSAgICAgICAgYXV0byBy
ZXN1bHQgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gU1JHQkEgeyByLCBnLCBiLCBhIH07CiAKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxw
aGEpCi0gICAgICAgICAgICByZXN1bHQgPSB1bnByZW11bHRpcGx5KHJlc3VsdCk7CisgICAgICAg
ICAgICByZXN1bHQgPSB1bnByZW11bHRpcGxpZWQocmVzdWx0KTsKIAotICAgICAgICAqZGVzdCA9
IHJlc3VsdC52YWx1ZUFzQVJHQigpOworICAgICAgICAqZGVzdCA9IGFzQVJHQihyZXN1bHQpLnZh
bHVlOwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKQEAgLTIyMSwxNyArMjIxLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBJbnRS
ZWN0KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCk7CiAgICAgfQogCi0gICAgdWlu
dDMyX3QgcGl4ZWxWYWx1ZSh1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNp
Z25lZCBhKSBjb25zdAorICAgIHVpbnQzMl90IHBpeGVsVmFsdWUodWludDhfdCByLCB1aW50OF90
IGcsIHVpbnQ4X3QgYiwgdWludDhfdCBhKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcHJl
bXVsdGlwbHlBbHBoYSAmJiAhYSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGF1
dG8gcmVzdWx0ID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpOworICAgICAgICBhdXRvIHJl
c3VsdCA9IFNSR0JBIHsgciwgZywgYiwgYSB9OwogCiAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5
QWxwaGEgJiYgYSA8IDI1NSkKLSAgICAgICAgICAgIHJlc3VsdCA9IHByZW11bHRpcGx5Rmxvb3Jp
bmcocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZW11bHRpcGxpZWRGbG9vcmluZyhy
ZXN1bHQpOwogCi0gICAgICAgIHJldHVybiByZXN1bHQudmFsdWVBc0FSR0IoKTsKKyAgICAgICAg
cmV0dXJuIGFzQVJHQihyZXN1bHQpLnZhbHVlOwogICAgIH0KIAogICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI6OkRhdGFTZWdtZW50PiBtX3BpeGVsczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MzkzNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxl
Q29sb3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TaW1wbGVDb2xvciBwcmVtdWx0aXBs
eUZsb29yaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQotewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
Y29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0gMjU1KQotICAgICAgICByZXR1cm4gY29sb3I7Ci0g
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUociAqIGEpLCBmYXN0RGl2
aWRlQnkyNTUoZyAqIGEpLCBmYXN0RGl2aWRlQnkyNTUoYiAqIGEpLCBhKTsKLX0KLQotU2ltcGxl
Q29sb3IgcHJlbXVsdGlwbHlDZWlsaW5nKFNpbXBsZUNvbG9yIGNvbG9yKQotewotICAgIGF1dG8g
W3IsIGcsIGIsIGFdID0gY29sb3I7Ci0gICAgaWYgKCFhIHx8IGEgPT0gMjU1KQotICAgICAgICBy
ZXR1cm4gY29sb3I7Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihmYXN0RGl2aWRlQnkyNTUo
ciAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnkyNTUoZyAqIGEgKyAyNTQpLCBmYXN0RGl2aWRlQnky
NTUoYiAqIGEgKyAyNTQpLCBhKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50MTZfdCB1bnByZW11
bHRpcGx5Q2hhbm5lbCh1aW50OF90IGMsIHVpbnQ4X3QgYSkKLXsKLSAgICByZXR1cm4gKGZhc3RN
dWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKLX0KLQotU2ltcGxlQ29sb3IgdW5wcmVtdWx0
aXBseShTaW1wbGVDb2xvciBjb2xvcikKLXsKLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9y
OwotICAgIGlmICghYSB8fCBhID09IDI1NSkKLSAgICAgICAgcmV0dXJuIGNvbG9yOwotICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IodW5wcmVtdWx0aXBseUNoYW5uZWwociwgYSksIHVucHJlbXVs
dGlwbHlDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGx5Q2hhbm5lbChiLCBhKSwgYSk7Ci19Ci0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwxMSArNDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3RleHByIHVpbnQzMl90IHZhbHVlQXNB
UkdCKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGNvbnN0ZXhwciB1aW50MzJfdCB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAotICAgIGNvbnN0ZXhwciB1aW50OF90
IHJlZENvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gMTY7IH0KLSAgICBjb25z
dGV4cHIgdWludDhfdCBncmVlbkNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4g
ODsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CiAgICAgY29uc3RleHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlID4+IDI0OyB9Ci0KICAgICBjb25zdGV4cHIgZmxvYXQgYWxwaGFD
b21wb25lbnRBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gY29udmVydFRvQ29tcG9uZW50RmxvYXQo
YWxwaGFDb21wb25lbnQoKSk7IH0KIAogICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29u
c3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CkBAIC02Miw3ICs1OCwxMyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBy
ZWRDb21wb25lbnQoKSksIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYgLSBncmVlbkNvbXBvbmVu
dCgpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRiAtIGJsdWVDb21wb25lbnQoKSksIGFscGhh
IH07CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JBPFQ+
IGFzU1JHQkEoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JH
QkE8VD4gYXNTUkdCQSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZV92PFQsIGZsb2F0PikKKyAgICAgICAgICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBv
bmVudEZsb2F0KHJlZENvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoZ3JlZW5D
b21wb25lbnQoKSksIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGJsdWVDb21wb25lbnQoKSksICBj
b252ZXJ0VG9Db21wb25lbnRGbG9hdChhbHBoYUNvbXBvbmVudCgpKSB9OworICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8VCwgdWludDhfdD4pCisgICAgICAgICAgICBy
ZXR1cm4geyByZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25lbnQoKSwgYmx1ZUNvbXBvbmVudCgp
LCBhbHBoYUNvbXBvbmVudCgpIH07CisgICAgfQogCiAgICAgdGVtcGxhdGU8c3RkOjpzaXplX3Qg
Tj4KICAgICBjb25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25zdApAQCAtNzksNiArODEsMTAgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBjb25zdGV4cHIgdWludDhfdCByZWRDb21w
b25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9CisgICAgY29uc3RleHByIHVp
bnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDg7IH0KKyAg
ICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQorCiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CiAKQEAgLTkwLDEwICs5Niw2
IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW4KIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JHQkE8dWludDhfdD4mKTsKIFNpbXBs
ZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAotU2ltcGxlQ29s
b3IgcHJlbXVsdGlwbHlGbG9vcmluZyhTaW1wbGVDb2xvcik7Ci1TaW1wbGVDb2xvciBwcmVtdWx0
aXBseUNlaWxpbmcoU2ltcGxlQ29sb3IpOwotU2ltcGxlQ29sb3IgdW5wcmVtdWx0aXBseShTaW1w
bGVDb2xvcik7Ci0KIGlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxl
Q29sb3IgYikKIHsKICAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUoKTsKQEAgLTExNiwy
NSArMTE4LDE0IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW4KIAog
Y29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTx1aW50OF90
PiYgc1JHQkEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQTsKLSAgICByZXR1cm4g
eyByLCBnLCBiLCBhIH07CisgICAgcmV0dXJuIHsgc1JHQkEucmVkLCBzUkdCQS5ncmVlbiwgc1JH
QkEuYmx1ZSwgc1JHQkEuYWxwaGEgfTsKIH0KIAogaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1w
bGVDb2xvcihjb25zdCBTUkdCQTxmbG9hdD4mIHNSR0JBKQogewotICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gc1JHQkE7Ci0gICAgcmV0dXJuIHsgY29udmVydFRvQ29tcG9uZW50Qnl0ZShyKSwgY29u
dmVydFRvQ29tcG9uZW50Qnl0ZShnKSwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShiKSwgY29udmVy
dFRvQ29tcG9uZW50Qnl0ZShhKSB9OworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoY29udmVy
dFRvQ29tcG9uZW50Qnl0ZXMoc1JHQkEpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIFNSR0JBPFQ+IFNpbXBsZUNvbG9yOjphc1NSR0JBKCkgY29uc3QKLXsKLSAgICBpZiBj
b25zdGV4cHIgKHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnRfdjxUPikKLSAgICAgICAgcmV0dXJuIHsg
Y29udmVydFRvQ29tcG9uZW50RmxvYXQocmVkQ29tcG9uZW50KCkpLCBjb252ZXJ0VG9Db21wb25l
bnRGbG9hdChncmVlbkNvbXBvbmVudCgpKSwgY29udmVydFRvQ29tcG9uZW50RmxvYXQoYmx1ZUNv
bXBvbmVudCgpKSwgIGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KGFscGhhQ29tcG9uZW50KCkpIH07
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4geyByZWRDb21wb25lbnQoKSwgZ3JlZW5Db21wb25l
bnQoKSwgYmx1ZUNvbXBvbmVudCgpLCBhbHBoYUNvbXBvbmVudCgpIH07Ci19Ci0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiBuYW1lc3BhY2Ugc3RkIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9Q
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0JKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hOjpzZXRGcm9tVmEKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFM
b3NzeTx1aW50OF90PigpOwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9h
bmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsK
IH0KIApAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpz
ZXRUb1ZhbHUKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdmFsdWUudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3ko
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OwogICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkp
IHNldFRvVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07CiB9CiAKQEAgLTQ5Niw3ICs0
OTYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzCiAgICAgICAg
IHJldHVybjsKIAogICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29s
b3IpIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpOworICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRlbXBsYXRlIHRv
U1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAgICByZXR1cm4gQFtAKHIpLCBAKGcpLCBAKGIp
LCBAKGEpXTsKICAgICB9KS5nZXQoKV07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmlt
YXRpb25XaW4uY3BwCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw4ICszNjcsOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OnNldEZy
b21WYWx1CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBCYXNpYykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBzaW1wbGVDb2xvciA9IHZhbHVlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7Ci0gICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2lt
cGxlQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBz
aW1wbGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CisgICAgYXV0byBjb21wb25lbnRzID0gdmFs
dWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgQ0dGbG9hdCBhWzRdID0geyBjb21wb25l
bnRzLnJlZCwgY29tcG9uZW50cy5ncmVlbiwgY29tcG9uZW50cy5ibHVlLCBjb21wb25lbnRzLmFs
cGhhIH07CiAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9wdENGKENBQ0ZWZWN0
b3JDcmVhdGUoNCwgYSkpOwogICAgIENBQ0ZBbmltYXRpb25TZXRGcm9tVmFsdWUobV9hbmltYXRp
b24uZ2V0KCksIHYuZ2V0KCkpOwogfQpAQCAtNDE5LDggKzQxOSw4IEBAIHZvaWQgUGxhdGZvcm1D
QUFuaW1hdGlvbldpbjo6c2V0VG9WYWx1ZSgKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEJh
c2ljKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHNpbXBsZUNvbG9yID0gdmFsdWUudG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAgICBDR0Zsb2F0IGFbNF0gPSB7IHNpbXBsZUNvbG9y
LnJlZENvbXBvbmVudCgpLCBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBzaW1wbGVDb2xv
ci5ibHVlQ29tcG9uZW50KCksIHNpbXBsZUNvbG9yLmFscGhhQ29tcG9uZW50KCkgfTsKKyAgICBh
dXRvIGNvbXBvbmVudHMgPSB2YWx1ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICBDR0Zs
b2F0IGFbNF0gPSB7IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRz
LmJsdWUsIGNvbXBvbmVudHMuYWxwaGEgfTsKICAgICBSZXRhaW5QdHI8Q0FDRlZlY3RvclJlZj4g
diA9IGFkb3B0Q0YoQ0FDRlZlY3RvckNyZWF0ZSg0LCBhKSk7CiAgICAgQ0FDRkFuaW1hdGlvblNl
dFRvVmFsdWUobV9hbmltYXRpb24uZ2V0KCksIHYuZ2V0KCkpOwogfQpAQCAtNDg5LDggKzQ4OSw4
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0VmFsdWVzKGMKICAgICAgICAgCiAg
ICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNy
ZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICBh
dXRvIHNpbXBsZUNvbG9yID0gdmFsdWVbaV0udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKLSAg
ICAgICAgQ0dGbG9hdCBhWzRdID0geyBzaW1wbGVDb2xvci5yZWRDb21wb25lbnQoKSwgc2ltcGxl
Q29sb3IuZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVDb2xvci5hbHBoYUNvbXBvbmVudCgpIH07CisgICAgICAgIGF1dG8gY29tcG9uZW50cyA9IHZh
bHVlW2ldLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBDR0Zsb2F0IGFbNF0gPSB7
IGNvbXBvbmVudHMucmVkLCBjb21wb25lbnRzLmdyZWVuLCBjb21wb25lbnRzLmJsdWUsIGNvbXBv
bmVudHMuYWxwaGEgfTsKICAgICAgICAgUmV0YWluUHRyPENBQ0ZWZWN0b3JSZWY+IHYgPSBhZG9w
dENGKENBQ0ZWZWN0b3JDcmVhdGUoNCwgYSkpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUo
YXJyYXkuZ2V0KCksIHYuZ2V0KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAJKHJl
dmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCB2b2lk
IGNvcHlDb250ZXh0UHJvcGVydGllcyhjYWlyb190KiBzcmNDCiAKIHZvaWQgc2V0U291cmNlUkdC
QUZyb21Db2xvcihjYWlyb190KiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19zZXRfc291
cmNlX3JnYmEoY29udGV4dCwgciwgZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3Bw
CShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2
b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQogCiBzdGF0aWMgdm9pZCBhZGRDb2xvclN0
b3BSR0JBKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIEdyYWRpZW50OjpDb2xvclN0b3Agc3Rv
cCwgZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBzdG9wLmNv
bG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gc3RvcC5jb2xvci50
b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9y
Z2JhKGdyYWRpZW50LCBzdG9wLm9mZnNldCwgciwgZywgYiwgYSAqIGdsb2JhbEFscGhhKTsKIH0K
IApAQCAtNTUsNyArNTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBwb2ludF90IHsKIAogc3RhdGljIHZv
aWQgc2V0Q29ybmVyQ29sb3JSR0JBKGNhaXJvX3BhdHRlcm5fdCogZ3JhZGllbnQsIGludCBpZCwg
R3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9wLCBmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjYWlyb19t
ZXNoX3BhdHRlcm5fc2V0X2Nvcm5lcl9jb2xvcl9yZ2JhKGdyYWRpZW50LCBpZCwgciwgZywgYiwg
YSAqIGdsb2JhbEFscGhhKTsKIH0KIApAQCAtMTM1LDggKzEzNSw4IEBAIHN0YXRpYyB2b2lkIGFk
ZENvbmljU2VjdG9yKGNhaXJvX3BhdHRlcm4KIAogc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3Ag
aW50ZXJwb2xhdGVDb2xvclN0b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6
Q29sb3JTdG9wIHRvKQogewotICAgIGF1dG8gW3IxLCBnMSwgYjEsIGExXSA9IGZyb20uY29sb3Iu
dG9TUkdCQUxvc3N5KCk7Ci0gICAgYXV0byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9T
UkdCQUxvc3N5KCk7CisgICAgYXV0byBbcjEsIGcxLCBiMSwgYTFdID0gZnJvbS5jb2xvci50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCk7CisgICAgYXV0byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3Iu
dG9TUkdCQUxvc3N5PGZsb2F0PigpOwogCiAgICAgZmxvYXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQg
KyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZzZXQpICogMC41ZjsKICAgICBmbG9hdCByID0gcjEgKyAo
cjIgLSByMSkgKiAwLjVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAkocmV2aXNpb24gMjYzOTM3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4MCw5IEBAIHZvaWQgSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQKICAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwogICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OwotICAgICAgICAgICAgYXV0byBw
aXhlbENvbG9yID0gdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciB7ICpwaXhlbCB9KTsKLSAgICAg
ICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xv
ci5yZWRDb21wb25lbnQoKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW5Db21wb25lbnQo
KV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpXSwgcGl4ZWxDb2xvci5h
bHBoYUNvbXBvbmVudCgpKTsKLSAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGx5Q2VpbGlu
ZyhwaXhlbENvbG9yKS52YWx1ZUFzQVJHQigpOworICAgICAgICAgICAgYXV0byBwaXhlbENvbXBv
bmVudHMgPSB1bnByZW11bHRpcGxpZWQoYXNTUkdCQShBUkdCIHsgKnBpeGVsIH0pKTsKKyAgICAg
ICAgICAgIHBpeGVsQ29tcG9uZW50cyA9IHsgbG9va1VwVGFibGVbcGl4ZWxDb21wb25lbnRzLnJl
ZF0sIGxvb2tVcFRhYmxlW3BpeGVsQ29tcG9uZW50cy5ncmVlbl0sIGxvb2tVcFRhYmxlW3BpeGVs
Q29tcG9uZW50cy5ibHVlXSwgcGl4ZWxDb21wb25lbnRzLmFscGhhIH07CisgICAgICAgICAgICAq
cGl4ZWwgPSBhc0FSR0IocHJlbXVsdGlwbGllZENlaWxpbmcocGl4ZWxDb21wb25lbnRzKSkudmFs
dWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3Rh
bmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dp
Y2FsU2l6ZS5oZWlnaHQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAkocmV2aXNpb24g
MjYzOTM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZl
SW1hZ2VDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgQ29sb3IgbmF0
aXZlSW1hZ2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IoYwogICAgICAgICByZXR1cm4gQ29sb3IoKTsK
IAogICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4o
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiB1
bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIHsgKnBpeGVsIH0pOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IodW5wcmVtdWx0aXBsaWVkKGFzU1JHQkEoQVJHQiB7ICpwaXhlbCB9KSkpOwogfQog
CiB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdO
RU9OLmgJKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsMTEgKzExMSwxMSBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5TmVv
CiAgICAgLy8gU2V0IGxpZ2h0IHNvdXJjZSBhcmd1bWVudHMuCiAgICAgZmxvYXRBcmd1bWVudHMu
Y29uc3RPbmUgPSAxOwogCi0gICAgYXV0byBzaW1wbGVDb2xvciA9IG1fbGlnaHRpbmdDb2xvci50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gY29sb3IgPSBtX2xpZ2h0aW5nQ29s
b3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKLSAgICBmbG9hdEFyZ3VtZW50cy5jb2xvclJl
ZCA9IHNpbXBsZUNvbG9yLnJlZENvbXBvbmVudCgpOwotICAgIGZsb2F0QXJndW1lbnRzLmNvbG9y
R3JlZW4gPSBzaW1wbGVDb2xvci5ncmVlbkNvbXBvbmVudCgpOwotICAgIGZsb2F0QXJndW1lbnRz
LmNvbG9yQmx1ZSA9IHNpbXBsZUNvbG9yLmJsdWVDb21wb25lbnQoKTsKKyAgICBmbG9hdEFyZ3Vt
ZW50cy5jb2xvclJlZCA9IGNvbG9yLnJlZDsKKyAgICBmbG9hdEFyZ3VtZW50cy5jb2xvckdyZWVu
ID0gY29sb3IuZ3JlZW47CisgICAgZmxvYXRBcmd1bWVudHMuY29sb3JCbHVlID0gY29sb3IuYmx1
ZTsKICAgICBmbG9hdEFyZ3VtZW50cy5wYWRkaW5nNCA9IDA7CiAKICAgICBpZiAobV9saWdodFNv
dXJjZS0+dHlwZSgpID09IExTX1BPSU5UKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9u
IDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNSwxMCArNDA1LDEwIEBAIGJvb2wgRkVM
aWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXAKICAgICBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lID0gaGVpZ2h0IC0gMTsKICAgICAKICAgICBpZiAob3BlcmF0aW5nQ29sb3JTcGFjZSgp
ID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHRvTGluZWFyU1JHQkEobV9saWdodGluZ0NvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICAgICAg
YXV0byBbciwgZywgYiwgYV0gPSB0b0xpbmVhclNSR0JBKG1fbGlnaHRpbmdDb2xvci50b1NSR0JB
TG9zc3k8ZmxvYXQ+KCkpOwogICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0
YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b1NSR0JBTG9zc3koKTsK
KyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5
PGZsb2F0PigpOwogICAgICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xv
clZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKICAgICB9CiAgICAgbV9saWdodFNvdXJj
ZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYzOTM3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEwLDcgKzExMCw3IEBAIGJvb2wgRmlsdGVyT3BlcmF0aW9uczo6dHJhbnNmb3JtQ29s
b3IoQ28KICAgICBpZiAoY29sb3IuaXNTZW1hbnRpYygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvIHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRv
IHNSR0JBQ29sb3IgPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAKICAgICBmb3IgKGF1
dG8mIG9wZXJhdGlvbiA6IG1fb3BlcmF0aW9ucykgewogICAgICAgICBpZiAoIW9wZXJhdGlvbi0+
dHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xvcikpCkBAIC0xMjksNyArMTI5LDcgQEAgYm9vbCBGaWx0
ZXJPcGVyYXRpb25zOjppbnZlcnNlVHJhbnNmb3JtQwogICAgIGlmIChjb2xvci5pc1NlbWFudGlj
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9y
LnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JHQkFDb2xvciA9IGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKIAogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9vcGVyYXRpb25zKSB7
CiAgICAgICAgIGlmICghb3BlcmF0aW9uLT5pbnZlcnNlVHJhbnNmb3JtQ29sb3Ioc1JHQkFDb2xv
cikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHAJKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAgQ29sb3I6OkNvbG9yKGNvbnN0IEdka1JHQkEmIGNvbG9yKQogCiBDb2xvcjo6b3BlcmF0b3Ig
R2RrUkdCQSgpIGNvbnN0CiB7Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3ko
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBy
ZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCShy
ZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Qm9yZGVyKGNvbnN0IEMKICAgICBSZWY8VGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xvcik7CiAgICAgZ2xVc2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVs
dGlwbGllZChjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBw
cmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAgICAgZ2xVbmlmb3Jt
NGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICBnbExpbmVXaWR0
aCh3aWR0aCk7CiAKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d051bWJlcihpbnQgbnVtCiAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7
CiAKICAgICAvLyBTaW5jZSB3ZSB3b24ndCBzd2FwIFIrQiB3aGVuIHVwbG9hZGluZyBhIHRleHR1
cmUsIHBhaW50IHdpdGggdGhlIHN3YXBwZWQgUitCIGNvbG9yLgotICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNyLCBi
LCBnLCByLCBhKTsKIAogICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgd2lkdGgsIGhlaWdo
dCk7CkBAIC00MTQsNyArNDE0LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0o
VGV4dHVyZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAg
IC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50
IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBwcmVtdWx0aXBsaWVkKHNoYWRvdy5jb2xvcigpLnRvU1JHQkFMb3NzeSgpKTsKKyAgICAgICAg
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcHJlbXVsdGlwbGllZChzaGFkb3cuY29sb3IoKS50b1NS
R0JBTG9zc3k8ZmxvYXQ+KCkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS5jb2xv
ckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3Jh
bS5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQo
c2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICAgICAgZ2xVbmlmb3JtMmYocHJvZ3JhbS5zaGFkb3dP
ZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6ZHJhd1NvbGlkQ29sb3IoY29uCiAgICAgUmVmPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAgICAg
Z2xVc2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIs
IGFdID0gcHJlbXVsdGlwbGllZChjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBbciwg
ZywgYiwgYV0gPSBwcmVtdWx0aXBsaWVkKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAg
ICAgZ2xVbmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAg
ICBpZiAoYSA8IDEgJiYgaXNCbGVuZGluZ0FsbG93ZWQpCiAgICAgICAgIGZsYWdzIHw9IFNob3Vs
ZEJsZW5kOwpAQCAtNjg2LDcgKzY4Niw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3U29s
aWRDb2xvcihjb24KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmNsZWFyQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5
KCk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CiAgICAgZ2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVG
RkVSX0JJVCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Q29sb3JEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0NvbG9yRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29sb3JEaXJlY3QyRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEzICs0MCwxMyBAQCBDb2xvcjo6Q29sb3IoRDJEMV9DT0xPUl9GIGNv
bG9yKQogCiBDb2xvcjo6b3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkgY29uc3QKIHsKLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0g
dG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwg
YSk7CiB9CiAKIENvbG9yOjpvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0CiB7Ci0gICAg
YXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IHRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICByZXR1cm4gRDJEMTo6VmVjdG9yNEYociwg
ZywgYiwgYSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI2MzkzNykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCB2b2lkIEdyYWRpZW50OjpnZW5l
cmF0ZUdyYWRpZW50KElEMkQxUmVuCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3Jh
ZGllbnRTdG9wczsKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3Iu
CiAgICAgZm9yIChhdXRvIHN0b3AgOiBtX3N0b3BzKSB7Ci0gICAgICAgIGF1dG8gW3IsIGcsIGIs
IGFdIHN0b3AuY29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFd
IHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgICAgICBncmFkaWVudFN0b3Bz
LmFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBn
LCBiLCBhKSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCShyZXZp
c2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbgogICAgIHN0YXRpYyBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgZ3JhbW1hclBhdHRlcm5Db2xvciB7IG1ha2VTaW1wbGVDb2xvcigw
LCAxMjgsIDApIH07CiAKICAgICBjb25zdCBTaW1wbGVDb2xvciYgcGF0dGVybkNvbG9yID0gc3R5
bGUubW9kZSA9PSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hciA/IGdyYW1t
YXJQYXR0ZXJuQ29sb3IgOiBzcGVsbGluZ1BhdHRlcm5Db2xvcjsKLSAgICBDR0NvbnRleHRTZXRS
R0JTdHJva2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3IucmVkQ29tcG9uZW50KCksIHBhdHRl
cm5Db2xvci5ncmVlbkNvbXBvbmVudCgpLCBwYXR0ZXJuQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBw
YXR0ZXJuQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7CisgICAgYXV0byBwYXR0ZXJuQ29sb3JDb21w
b25lbnRzID0gcGF0dGVybkNvbG9yLmFzU1JHQkE8dWludDhfdD4oKTsKKyAgICBDR0NvbnRleHRT
ZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCBwYXR0ZXJuQ29sb3JDb21wb25lbnRzLnJlZCwgcGF0
dGVybkNvbG9yQ29tcG9uZW50cy5ncmVlbiwgcGF0dGVybkNvbG9yQ29tcG9uZW50cy5ibHVlLCBw
YXR0ZXJuQ29sb3JDb21wb25lbnRzLmFscGhhKTsKIAogICAgIENHQWZmaW5lVHJhbnNmb3JtIHVz
ZXJUb0Jhc2UgPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogICAgIENHUG9pbnQgcGhhc2Ug
PSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9pbnQsIHVzZXJUb0Jhc2UpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksNyArMzc5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OnJvdAogCiBEMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpj
b2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgYXV0
byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICByZXR1cm4gRDJEMTo6Q29s
b3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNjM5
MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDAyLDcgKzE0MDIsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6ZGlzYWJsZWRU
ZXh0Q29sb3IoY29uCiAgICAgLy8gSWYgdGhlcmUncyBub3QgdmVyeSBtdWNoIGNvbnRyYXN0IGJl
dHdlZW4gdGhlIGRpc2FibGVkIGNvbG9yIGFuZCB0aGUgYmFja2dyb3VuZCBjb2xvciwKICAgICAv
LyBqdXN0IGxlYXZlIHRoZSB0ZXh0IGNvbG9yIGFsb25lLiBXZSBkb24ndCB3YW50IHRvIGNoYW5n
ZSBhIGdvb2QgY29udHJhc3QgY29sb3Igc2NoZW1lIHNvIHRoYXQgaXQgaGFzIHJlYWxseSBiYWQg
Y29udHJhc3QuCiAgICAgLy8gSWYgdGhlIGNvbnRyYXN0IHdhcyBhbHJlYWR5IHBvb3IsIHRoZW4g
aXQgZG9lc24ndCBkbyBhbnkgZ29vZCB0byBjaGFuZ2UgaXQgdG8gYSBkaWZmZXJlbnQgcG9vciBj
b250cmFzdCBjb2xvciBzY2hlbWUuCi0gICAgaWYgKGNvbnRyYXN0UmF0aW8oZGlzYWJsZWRDb2xv
ci50b1NSR0JBTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3NzeSgpKSA8IG1pbkNv
bG9yQ29udHJhc3RWYWx1ZSkKKyAgICBpZiAoY29udHJhc3RSYXRpbyhkaXNhYmxlZENvbG9yLnRv
U1JHQkFMb3NzeTxmbG9hdD4oKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KSkgPCBtaW5Db2xvckNvbnRyYXN0VmFsdWUpCiAgICAgICAgIHJldHVybiB0ZXh0Q29sb3I7CiAK
ICAgICByZXR1cm4gZGlzYWJsZWRDb2xvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw3ICsx
MDU1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRCdXR0b25EZWNvcmF0aQogc3RhdGlj
IGJvb2wgc2hvdWxkVXNlQ29udmV4R3JhZGllbnQoY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdXNpbmcgbHVtaW5h
bmNlLgotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3Nz
eSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKICAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgo
eyByLCBnLCBiIH0pOwogICAgIHJldHVybiBhID4gMC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5u
ZWwgPCAwLjU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50U3R5
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRT
dHlsZS5jcHAJKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0UGFpbnRTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgYm9vbCB0
ZXh0Q29sb3JJc0xlZ2libGVBZ2FpbnN0QmFja2dyb3VuZAogewogICAgIC8vIFVzZXMgdGhlIFdD
QUcgMi4wIGRlZmluaXRpb24gb2YgbGVnaWJpbGl0eTogYSBjb250cmFzdCByYXRpbyBvZiA0LjU6
MSBvciBncmVhdGVyLgogICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3Zpc3Vh
bC1hdWRpby1jb250cmFzdC1jb250cmFzdAotICAgIHJldHVybiBjb250cmFzdFJhdGlvKHRleHRD
b2xvci50b1NSR0JBTG9zc3koKSwgYmFja2dyb3VuZENvbG9yLnRvU1JHQkFMb3NzeSgpKSA+IDQu
NTsKKyAgICByZXR1cm4gY29udHJhc3RSYXRpbyh0ZXh0Q29sb3IudG9TUkdCQUxvc3N5PGZsb2F0
PigpLCBiYWNrZ3JvdW5kQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKSA+IDQuNTsKIH0KIAog
c3RhdGljIENvbG9yIGFkanVzdENvbG9yRm9yVmlzaWJpbGl0eU9uQmFja2dyb3VuZChjb25zdCBD
b2xvciYgdGV4dENvbG9yLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0
aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkocmV2aXNpb24gMjYzOTM3KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1
ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxNSArODEsMTUgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBhbmltYXRlKFNWR0VsZW1lbnQqLCBmbG9hdCBwcm9ncmVzcywgdW5zaWdu
ZWQgcmVwZWF0Q291bnQsIENvbG9yJiBhbmltYXRlZCkKICAgICB7Ci0gICAgICAgIGF1dG8gc2lt
cGxlQW5pbWF0ZWQgPSBhbmltYXRlZC50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgICAg
ICBhdXRvIHNpbXBsZUZyb20gPSBtX2FuaW1hdGlvbk1vZGUgPT0gQW5pbWF0aW9uTW9kZTo6VG8g
PyBzaW1wbGVBbmltYXRlZCA6IG1fZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAg
ICAgICBhdXRvIHNpbXBsZVRvID0gbV90by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAg
ICAgICBhdXRvIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uID0gdG9BdEVuZE9mRHVyYXRpb24oKS50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBhdXRvIHNpbXBsZUFuaW1hdGVkID0g
YW5pbWF0ZWQudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJv
bSA9IG1fYW5pbWF0aW9uTW9kZSA9PSBBbmltYXRpb25Nb2RlOjpUbyA/IHNpbXBsZUFuaW1hdGVk
IDogbV9mcm9tLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgICAgICBhdXRvIHNpbXBsZVRv
ID0gbV90by50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVUb0F0
RW5kT2ZEdXJhdGlvbiA9IHRvQXRFbmRPZkR1cmF0aW9uKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CiAgICAgICAgIAotICAgICAgICBmbG9hdCByZWQgPSBCYXNlOjphbmltYXRlKHByb2dyZXNz
LCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5yZWRDb21wb25lbnQoKSwgc2ltcGxlVG8ucmVkQ29t
cG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLnJlZENvbXBvbmVudCgpLCBzaW1wbGVB
bmltYXRlZC5yZWRDb21wb25lbnQoKSk7Ci0gICAgICAgIGZsb2F0IGdyZWVuID0gQmFzZTo6YW5p
bWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uZ3JlZW5Db21wb25lbnQoKSwg
c2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uZ3JlZW5D
b21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuZ3JlZW5Db21wb25lbnQoKSk7Ci0gICAgICAgIGZs
b2F0IGJsdWUgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJv
bS5ibHVlQ29tcG9uZW50KCksIHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVu
ZE9mRHVyYXRpb24uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ibHVlQ29tcG9uZW50
KCkpOwotICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVh
dENvdW50LCBzaW1wbGVGcm9tLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZVRvLmFscGhhQ29tcG9u
ZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZUFu
aW1hdGVkLmFscGhhQ29tcG9uZW50KCkpOworICAgICAgICBmbG9hdCByZWQgPSBCYXNlOjphbmlt
YXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5yZWQsIHNpbXBsZVRvLnJlZCwg
c2ltcGxlVG9BdEVuZE9mRHVyYXRpb24ucmVkLCBzaW1wbGVBbmltYXRlZC5yZWQpOworICAgICAg
ICBmbG9hdCBncmVlbiA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1w
bGVGcm9tLmdyZWVuLCBzaW1wbGVUby5ncmVlbiwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uZ3Jl
ZW4sIHNpbXBsZUFuaW1hdGVkLmdyZWVuKTsKKyAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFu
aW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJsdWUsIHNpbXBsZVRvLmJs
dWUsIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWUsIHNpbXBsZUFuaW1hdGVkLmJsdWUpOwor
ICAgICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50
LCBzaW1wbGVGcm9tLmFscGhhLCBzaW1wbGVUby5hbHBoYSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRp
b24uYWxwaGEsIHNpbXBsZUFuaW1hdGVkLmFscGhhKTsKICAgICAgICAgCiAgICAgICAgIGFuaW1h
dGVkID0gbWFrZVNpbXBsZUNvbG9yKHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwocmVkKSwgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChncmVlbiksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
Ymx1ZSksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYWxwaGEpKTsKICAgICB9CkBAIC0xMDMs
MTIgKzEwMywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgCi0gICAgICAgIGF1dG8gc2ltcGxl
RnJvbSA9IGZyb21Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgICAgICBhdXRv
IHNpbXBsZVRvID0gdG9Db2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgICAgICBh
dXRvIHNpbXBsZUZyb20gPSBmcm9tQ29sb3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAg
ICAgIGF1dG8gc2ltcGxlVG8gPSB0b0NvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogCi0g
ICAgICAgIGZsb2F0IHJlZCA9IHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkgLSBzaW1wbGVUby5y
ZWRDb21wb25lbnQoKTsKLSAgICAgICAgZmxvYXQgZ3JlZW4gPSBzaW1wbGVGcm9tLmdyZWVuQ29t
cG9uZW50KCkgLSBzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpOwotICAgICAgICBmbG9hdCBibHVl
ID0gc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50KCkgLSBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCk7
CisgICAgICAgIGZsb2F0IHJlZCA9IHNpbXBsZUZyb20ucmVkIC0gc2ltcGxlVG8ucmVkOworICAg
ICAgICBmbG9hdCBncmVlbiA9IHNpbXBsZUZyb20uZ3JlZW4gLSBzaW1wbGVUby5ncmVlbjsKKyAg
ICAgICAgZmxvYXQgYmx1ZSA9IHNpbXBsZUZyb20uYmx1ZSAtIHNpbXBsZVRvLmJsdWU7CiAKICAg
ICAgICAgcmV0dXJuIHN0ZDo6aHlwb3QocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgfQpAQCAtMTI2
LDE0ICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRkRnJvbUFuZFRvVmFsdWVzKFNW
R0VsZW1lbnQqKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgYXV0byBzaW1wbGVGcm9tID0gbV9m
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgICAgIGF1dG8gc2ltcGxlVG8gPSBt
X3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgICAgIGF1dG8gc2ltcGxlRnJvbSA9
IG1fZnJvbS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKKyAgICAgICAgYXV0byBzaW1wbGVUbyA9
IG1fdG8udG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAKICAgICAgICAgLy8gSWdub3JlcyBhbnkg
YWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgogICAgICAgICBt
X3RvID0gbWFrZVNpbXBsZUNvbG9yKAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbChzaW1wbGVUby5yZWRDb21wb25lbnQoKSArIHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkp
LAotICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ncmVlbkNv
bXBvbmVudCgpICsgc2ltcGxlRnJvbS5ncmVlbkNvbXBvbmVudCgpKSwKLSAgICAgICAgICAgIHJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpICsgc2ltcGxl
RnJvbS5ibHVlQ29tcG9uZW50KCkpCisgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHNpbXBsZVRvLnJlZCArIHNpbXBsZUZyb20ucmVkKSwKKyAgICAgICAgICAgIHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8uZ3JlZW4gKyBzaW1wbGVGcm9tLmdyZWVuKSwKKyAg
ICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8uYmx1ZSArIHNpbXBs
ZUZyb20uYmx1ZSkKICAgICAgICAgKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NjM5MzcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDIwLTA3LTA0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBQYXJ0IDEgb2YgU2ltcGxlQ29sb3IgYW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3Nl
bnRpYWxseSB0aGUgc2FtZSAtIGxldCdzIGNvbnZlcmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzk0OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0
Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcik6Cisg
ICAgICAgICogVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGUubW06CisgICAgICAgIChXZWJLaXQ6OmFuaW1hdGlvblZhbHVlRnJvbUtl
eWZyYW1lVmFsdWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIEFkYXB0IHRvIHVzZSB0ZW1wbGF0aXplZCB0b1NSR0JBTG9zc3k8ZmxvYXQvdWlu
dDhfdD4uCisKIDIwMjAtMDctMDMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIE1ha2UgZ2VuZXJhdGUtdW5pZmllZC1zb3VyY2VzLnNoIG5vdCBkZXBlbmQgb24gZmVh
dHVyZXMgYmVpbmcgbGlzdGVkIGluIEZFQVRVUkVfREVGSU5FUyBlbnZpcm9ubWVudCB2YXJpYWJs
ZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xv
ci5jcHAJKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQg
d2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xvcihjb24KIHsKICAgICBSRUxFQVNFX0FTU0VS
VCh3ZWJDb3JlQ29sb3IuaXNWYWxpZCgpKTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2Vi
Q29yZUNvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gd2ViQ29y
ZUNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICBjb2xvci0+cmVkID0gcjsKICAgICBj
b2xvci0+Z3JlZW4gPSBnOwogICAgIGNvbG9yLT5ibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9WaWV3R2VzdHVyZUNvbnRyb2xsZXJHdGsu
Y3BwCShyZXZpc2lvbiAyNjM5MzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvVmll
d0dlc3R1cmVDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDcgKzMzOCw3
IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2UKICAgICAgICAgaWYg
KGNvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3JGb3JDdXJy
ZW50U25hcHNob3QgPSBjb2xvcjsKICAgICAgICAgICAgIGlmICghbV9jdXJyZW50U3dpcGVTbmFw
c2hvdFBhdHRlcm4pIHsKLSAgICAgICAgICAgICAgICBhdXRvIFtyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3koKTsKKyAgICAgICAgICAgICAgICBhdXRvIFtyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFBhdHRlcm4gPSBhZG9wdFJlZihjYWly
b19wYXR0ZXJuX2NyZWF0ZV9yZ2JhKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDI2MzkzNykKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU2LDcgKzY1
Niw3IEBAIGJvb2wgV2ViRnJhbWU6OmdldERvY3VtZW50QmFja2dyb3VuZENvbG8KICAgICBpZiAo
IWJnQ29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGJnQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAgYXV0byBbciwgZywgYiwg
YV0gPSBiZ0NvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICAqcmVkID0gcjsKICAgICAq
Z3JlZW4gPSBnOwogICAgICpibHVlID0gYjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCShyZXZpc2lvbiAyNjM5MzcpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjkzLDcgKzY5Myw3IEBAIHN0
YXRpYyBOU09iamVjdCogYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnIKICAgICAgICAgcmV0dXJuIEAo
a2V5ZnJhbWVWYWx1ZS5udW1iZXJWYWx1ZSgpKTsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6S2V5ZnJhbWVWYWx1ZTo6Q29sb3JLZXlUeXBlOiB7Ci0g
ICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0ga2V5ZnJhbWVWYWx1ZS5jb2xvclZhbHVlKCkudG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKyAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBrZXlm
cmFtZVZhbHVlLmNvbG9yVmFsdWUoKS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKICAgICAgICAg
cmV0dXJuIEBbIEAociksIEAoZyksIEAoYiksIEAoYSkgXTsKICAgICB9CiAKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Mzkz
NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDIwLTA3LTAzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBQYXJ0
IDEgb2YgU2ltcGxlQ29sb3IgYW5kIFNSR0JBPHVpbnQ4X3Q+IGFyZSBlc3NlbnRpYWxseSB0aGUg
c2FtZSAtIGxldCdzIGNvbnZlcmdlIHRoZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMzk0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVz
dHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgQWRhcHQgdGVzdHMgdG8gdXNlIHRlbXBsYXRp
emVkIHRvU1JHQkFMb3NzeTxmbG9hdC91aW50OF90Pi4KKwogMjAyMC0wNy0wNCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBnZW5lcmF0ZS11bmlmaWVkLXNv
dXJjZXMuc2ggbm90IGRlcGVuZCBvbiBmZWF0dXJlcyBiZWluZyBsaXN0ZWQgaW4gRkVBVFVSRV9E
RUZJTkVTIGVudmlyb25tZW50IHZhcmlhYmxlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjM5MzcpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfV2hpdGUpCiB7CiAg
ICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6d2hpdGU7CiAKLSAgICBhdXRvIGhzbGFDb2xvciA9IHRv
SFNMQShjb2xvci50b1NSR0JBTG9zc3koKSk7CisgICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEo
Y29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpKTsKIAogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBo
c2xhQ29sb3IuaHVlKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgaHNsYUNvbG9yLnNhdHVyYXRp
b24pOwpAQCAtNTQsNyArNTQsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIHsKICAg
ICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKIAotICAgIGF1dG8gaHNsYUNvbG9yID0gdG9I
U0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRvSFNMQShj
b2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhz
bGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0dXJhdGlv
bik7CkBAIC03MCw3ICs3MCw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKICAgICBD
b2xvciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogCi0gICAgYXV0byBoc2xh
Q29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9y
ID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xv
ci5zYXR1cmF0aW9uKTsKQEAgLTg2LDcgKzg2LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3Jl
ZW4pCiB7CiAgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKTsKIAot
ICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBh
dXRvIGhzbGFDb2xvciA9IHRvSFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAuMzMzMzMzMzQsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVD
VF9GTE9BVF9FUSgxLCBoc2xhQ29sb3Iuc2F0dXJhdGlvbik7CkBAIC0xMDIsNyArMTAyLDcgQEAg
VEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKICAgICBDb2xvciBjb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigwLCAwLCAyNTUpOwogCi0gICAgYXV0byBoc2xhQ29sb3IgPSB0b0hTTEEoY29sb3Iu
dG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9IU0xBKGNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC42NjY2NjY2OSwgaHNs
YUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGhzbGFDb2xvci5zYXR1cmF0aW9u
KTsKQEAgLTExOCw3ICsxMTgsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9EYXJrR3JheSkKIHsK
ICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpkYXJrR3JheTsKIAotICAgIGF1dG8gaHNsYUNvbG9y
ID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeSgpKTsKKyAgICBhdXRvIGhzbGFDb2xvciA9IHRv
SFNMQShjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCkpOwogCiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDAsIGhzbGFDb2xvci5odWUpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBoc2xhQ29sb3Iuc2F0
dXJhdGlvbik7CkBAIC0xMzQsNyArMTM0LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JheSkK
IHsKICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpncmF5OwogCi0gICAgYXV0byBoc2xhQ29sb3Ig
PSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNvbG9yID0gdG9I
U0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1RfRkxPQVRfRVEo
MCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFDb2xvci5zYXR1
cmF0aW9uKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9MaWdodEdy
YXkpCiB7CiAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6bGlnaHRHcmF5OwogCi0gICAgYXV0byBo
c2xhQ29sb3IgPSB0b0hTTEEoY29sb3IudG9TUkdCQUxvc3N5KCkpOworICAgIGF1dG8gaHNsYUNv
bG9yID0gdG9IU0xBKGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKSk7CiAKICAgICBFWFBFQ1Rf
RkxPQVRfRVEoMCwgaHNsYUNvbG9yLmh1ZSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGhzbGFD
b2xvci5zYXR1cmF0aW9uKTsKQEAgLTE4MywyOSArMTgzLDI5IEBAIFRFU1QoQ29sb3IsIFZhbGlk
aXR5KQogICAgIHZhbGlkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMSwgMiwgMywgNCk7CiAgICAg
RVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxp
ZENvbG9yLmlzRXh0ZW5kZWQoKSk7Ci0gICAgYXV0byBzaW1wbGVWYWxpZENvbG9yID0gdmFsaWRD
b2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxp
ZENvbG9yLnJlZENvbXBvbmVudCgpLCAxKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xv
ci5ncmVlbkNvbXBvbmVudCgpLCAyKTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlVmFsaWRDb2xvci5i
bHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1wbGVWYWxpZENvbG9yLmFscGhh
Q29tcG9uZW50KCksIDQpOworICAgIGF1dG8gdmFsaWRDb2xvckNvbXBvbmVudHMgPSB2YWxpZENv
bG9yLnRvU1JHQkFMb3NzeTx1aW50OF90PigpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29t
cG9uZW50cy5yZWQsIDEpOworICAgIEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5ncmVl
biwgMik7CisgICAgRVhQRUNUX0VRKHZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMpOworICAg
IEVYUEVDVF9FUSh2YWxpZENvbG9yQ29tcG9uZW50cy5hbHBoYSwgNCk7CiAKICAgICBDb2xvciB5
ZXRBbm90aGVyVmFsaWRDb2xvcihXVEZNb3ZlKHZhbGlkQ29sb3IpKTsKICAgICBFWFBFQ1RfVFJV
RSh5ZXRBbm90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRSh5ZXRB
bm90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc2ltcGxlWWV0QW5vdGhl
clZhbGlkQ29sb3IgPSB5ZXRBbm90aGVyVmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3Nz
eSgpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xvci5yZWRDb21wb25l
bnQoKSwgMSk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZVlldEFub3RoZXJWYWxpZENvbG9yLmdyZWVu
Q29tcG9uZW50KCksIDIpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFsaWRDb2xv
ci5ibHVlQ29tcG9uZW50KCksIDMpOwotICAgIEVYUEVDVF9FUShzaW1wbGVZZXRBbm90aGVyVmFs
aWRDb2xvci5hbHBoYUNvbXBvbmVudCgpLCA0KTsKKyAgICBhdXRvIHlldEFub3RoZXJWYWxpZENv
bG9yQ29tcG9uZW50cyA9IHlldEFub3RoZXJWYWxpZENvbG9yLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMucmVkLCAx
KTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmdyZWVuLCAy
KTsKKyAgICBFWFBFQ1RfRVEoeWV0QW5vdGhlclZhbGlkQ29sb3JDb21wb25lbnRzLmJsdWUsIDMp
OworICAgIEVYUEVDVF9FUSh5ZXRBbm90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuYWxwaGEsIDQp
OwogCiAgICAgb3RoZXJWYWxpZENvbG9yID0gV1RGTW92ZSh5ZXRBbm90aGVyVmFsaWRDb2xvcik7
CiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNU
X0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwotICAgIGF1dG8gc2ltcGxlT3Ro
ZXJWYWxpZENvbG9yID0gb3RoZXJWYWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5yZWRDb21wb25lbnQoKSwgMSk7
Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5ncmVlbkNvbXBvbmVudCgpLCAy
KTsKLSAgICBFWFBFQ1RfRVEoc2ltcGxlT3RoZXJWYWxpZENvbG9yLmJsdWVDb21wb25lbnQoKSwg
Myk7Ci0gICAgRVhQRUNUX0VRKHNpbXBsZU90aGVyVmFsaWRDb2xvci5hbHBoYUNvbXBvbmVudCgp
LCA0KTsKKyAgICBhdXRvIG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMgPSBvdGhlclZhbGlkQ29s
b3IudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xv
ckNvbXBvbmVudHMucmVkLCAxKTsKKyAgICBFWFBFQ1RfRVEob3RoZXJWYWxpZENvbG9yQ29tcG9u
ZW50cy5ncmVlbiwgMik7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMu
Ymx1ZSwgMyk7CisgICAgRVhQRUNUX0VRKG90aGVyVmFsaWRDb2xvckNvbXBvbmVudHMuYWxwaGEs
IDQpOwogfQogCiBURVNUKENvbG9yLCBMdW1pbmFuY2UpCkBAIC0yMTYsMjEgKzIxNiwyMiBAQCBU
RVNUKENvbG9yLCBMdW1pbmFuY2UpCiAgICAgYXV0byBjID0gbWFrZVNpbXBsZUNvbG9yKDg1LCA5
MCwgMTYwKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoQ29sb3IoYykubHVtaW5hbmNlKCksIDAuMTE3
ODE2OTIpOwogCi0gICAgRVhQRUNUX0VRKGMucmVkQ29tcG9uZW50KCksIDg1KTsKLSAgICBFWFBF
Q1RfRVEoYy5ncmVlbkNvbXBvbmVudCgpLCA5MCk7Ci0gICAgRVhQRUNUX0VRKGMuYmx1ZUNvbXBv
bmVudCgpLCAxNjApOwotCi0gICAgYXV0byBjTGlndGVuZWQgPSBDb2xvcihjKS5saWdodGVuZWQo
KS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihj
TGlndGVuZWQpLmx1bWluYW5jZSgpLCAwLjI5MTY4ODA4KTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3Rl
bmVkLnJlZENvbXBvbmVudCgpLCAxMzApOwotICAgIEVYUEVDVF9FUShjTGlndGVuZWQuZ3JlZW5D
b21wb25lbnQoKSwgMTM3KTsKLSAgICBFWFBFQ1RfRVEoY0xpZ3RlbmVkLmJsdWVDb21wb25lbnQo
KSwgMjQ0KTsKLQotICAgIGF1dG8gY0RhcmtlbmVkID0gQ29sb3IoYykuZGFya2VuZWQoKS50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotICAgIEVYUEVDVF9GTE9BVF9FUShDb2xvcihjRGFya2Vu
ZWQpLmx1bWluYW5jZSgpLCAwLjAyNzAwNjcyNyk7Ci0gICAgRVhQRUNUX0VRKGNEYXJrZW5lZC5y
ZWRDb21wb25lbnQoKSwgNDApOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQuZ3JlZW5Db21wb25l
bnQoKSwgNDMpOwotICAgIEVYUEVDVF9FUShjRGFya2VuZWQuYmx1ZUNvbXBvbmVudCgpLCA3Nik7
CisgICAgYXV0byBjQ29tcG9uZW50cyA9IGMuYXNTUkdCQTx1aW50OF90PigpOworICAgIEVYUEVD
VF9FUShjQ29tcG9uZW50cy5yZWQsIDg1KTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuZ3Jl
ZW4sIDkwKTsKKyAgICBFWFBFQ1RfRVEoY0NvbXBvbmVudHMuYmx1ZSwgMTYwKTsKKworICAgIGF1
dG8gY0xpZ3RlbmVkID0gQ29sb3IoYykubGlnaHRlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+
KCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKENvbG9yKG1ha2VTaW1wbGVDb2xvcihjTGlndGVuZWQp
KS5sdW1pbmFuY2UoKSwgMC4yOTE2ODgwOCk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5yZWQs
IDEzMCk7CisgICAgRVhQRUNUX0VRKGNMaWd0ZW5lZC5ncmVlbiwgMTM3KTsKKyAgICBFWFBFQ1Rf
RVEoY0xpZ3RlbmVkLmJsdWUsIDI0NCk7CisKKyAgICBhdXRvIGNEYXJrZW5lZCA9IENvbG9yKGMp
LmRhcmtlbmVkKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KENvbG9yKG1ha2VTaW1wbGVDb2xvcihjRGFya2VuZWQpKS5sdW1pbmFuY2UoKSwgMC4wMjcwMDY3
MjcpOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQucmVkLCA0MCk7CisgICAgRVhQRUNUX0VRKGNE
YXJrZW5lZC5ncmVlbiwgNDMpOworICAgIEVYUEVDVF9FUShjRGFya2VuZWQuYmx1ZSwgNzYpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAko
cmV2aXNpb24gMjYzOTM3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4
dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCBU
RVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKICAgICBDb2xvciBwM0NvbG9y
IHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRp
c3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKLSAg
ICBhdXRvIHNSR0JBQ29sb3IgPSBwM0NvbG9yLnRvU1JHQkFMb3NzeSgpOworICAgIGF1dG8gc1JH
QkFDb2xvciA9IHAzQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIEVYUEVDVF9UUlVF
KFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwgMS4wZikpOwogICAgIEVY
UEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLmdyZWVuLCAwLjQ2
MjUzNzg4NWYpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JH
QkFDb2xvci5ibHVlLCAwLjE0OTE0NzgzOGYpKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCBURVNUKEV4
dGVuZGVkQ29sb3IsIExpbmVhclNSR0JDb252ZXJzaW9uCiB7CiAgICAgQ29sb3IgbGluZWFyQ29s
b3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6
TGluZWFyUkdCKSB9OwogICAgIEVYUEVDVF9UUlVFKGxpbmVhckNvbG9yLmlzRXh0ZW5kZWQoKSk7
Ci0gICAgYXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUxvc3N5KCk7CisgICAg
YXV0byBzUkdCQUNvbG9yID0gbGluZWFyQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAg
IEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9yLnJlZCwgMS4w
ZikpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQUNvbG9y
LmdyZWVuLCAwLjczNTM1NjkyN2YpKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmFyZUVzc2VudGlh
bGx5RXF1YWwoc1JHQkFDb2xvci5ibHVlLCAwLjUzNzA5ODcwNmYpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>