<?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>209207</bug_id>
          
          <creation_ts>2020-03-17 18:13:59 -0700</creation_ts>
          <short_desc>Change TextIterator::rangeLength to not require a live range</short_desc>
          <delta_ts>2020-03-24 02:12:00 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>209408</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>dpino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1630979</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-17 18:13:59 -0700</bug_when>
    <thetext>Change TextIterator::rangeLength to not require a live range</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630982</commentid>
    <comment_count>1</comment_count>
      <attachid>393808</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-17 18:49:28 -0700</bug_when>
    <thetext>Created attachment 393808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631477</commentid>
    <comment_count>2</comment_count>
      <attachid>393931</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-18 18:31:03 -0700</bug_when>
    <thetext>Created attachment 393931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632529</commentid>
    <comment_count>3</comment_count>
      <attachid>394179</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-21 14:47:25 -0700</bug_when>
    <thetext>Created attachment 394179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632534</commentid>
    <comment_count>4</comment_count>
      <attachid>394182</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-21 15:57:04 -0700</bug_when>
    <thetext>Created attachment 394182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632675</commentid>
    <comment_count>5</comment_count>
      <attachid>394226</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-22 12:46:33 -0700</bug_when>
    <thetext>Created attachment 394226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632684</commentid>
    <comment_count>6</comment_count>
      <attachid>394226</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-22 13:59:57 -0700</bug_when>
    <thetext>Comment on attachment 394226
Patch

WPE build still failing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632687</commentid>
    <comment_count>7</comment_count>
      <attachid>394230</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-22 14:14:27 -0700</bug_when>
    <thetext>Created attachment 394230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632688</commentid>
    <comment_count>8</comment_count>
      <attachid>394231</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-22 14:18:14 -0700</bug_when>
    <thetext>Created attachment 394231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632707</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-22 17:06:36 -0700</bug_when>
    <thetext>OK, all tests passing. Ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632708</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-22 17:07:08 -0700</bug_when>
    <thetext>Next step on moving off of live ranges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632804</commentid>
    <comment_count>11</comment_count>
      <attachid>394231</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-03-23 05:27:19 -0700</bug_when>
    <thetext>Comment on attachment 394231
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1946
&gt; -    auto searchRange = Range::create(m_document, startPosition, endPosition);
&gt; -    if (searchRange-&gt;collapsed())
&gt; +    SimpleRange searchRange { *makeBoundaryPoint(startPosition), *makeBoundaryPoint(endPosition) };

I sort of like 

auto searchRange = SimpleRange { *makeBoundaryPoint(startPosition), *makeBoundaryPoint(endPosition) };

for these. It is longer but I feel it reads better. It is also allows replacing constructor call with a function call (or opposite, like here) with minimal changes.

&gt; Source/WebCore/editing/TextIterator.h:299
&gt; +WEBCORE_EXPORT CharacterCount characterCount(const SimpleRange&amp;, bool spacesForReplacedElements = false);

The boolean is rather magical in the call sites. Please add enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632858</commentid>
    <comment_count>12</comment_count>
      <attachid>394231</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-23 09:03:49 -0700</bug_when>
    <thetext>Comment on attachment 394231
Patch

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

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1946
&gt;&gt; +    SimpleRange searchRange { *makeBoundaryPoint(startPosition), *makeBoundaryPoint(endPosition) };
&gt; 
&gt; I sort of like 
&gt; 
&gt; auto searchRange = SimpleRange { *makeBoundaryPoint(startPosition), *makeBoundaryPoint(endPosition) };
&gt; 
&gt; for these. It is longer but I feel it reads better. It is also allows replacing constructor call with a function call (or opposite, like here) with minimal changes.

OK. That does seem better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632860</commentid>
    <comment_count>13</comment_count>
      <attachid>394231</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-23 09:04:33 -0700</bug_when>
    <thetext>Comment on attachment 394231
Patch

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

&gt;&gt; Source/WebCore/editing/TextIterator.h:299
&gt;&gt; +WEBCORE_EXPORT CharacterCount characterCount(const SimpleRange&amp;, bool spacesForReplacedElements = false);
&gt; 
&gt; The boolean is rather magical in the call sites. Please add enum.

Will do. Might want to do an OptionSet later, but for now an enum class should do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632979</commentid>
    <comment_count>14</comment_count>
      <attachid>394289</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-23 12:43:29 -0700</bug_when>
    <thetext>Created attachment 394289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633004</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-23 13:50:22 -0700</bug_when>
    <thetext>Committed r258871: &lt;https://trac.webkit.org/changeset/258871&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633006</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-23 13:51:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/60790089&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633258</commentid>
    <comment_count>17</comment_count>
    <who name="Diego Pino">dpino</who>
    <bug_when>2020-03-24 02:12:00 -0700</bug_when>
    <thetext>GTK test bot is exiting early due to too many crashes after this patch https://bugs.webkit.org/show_bug.cgi?id=209467</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393808</attachid>
            <date>2020-03-17 18:49:28 -0700</date>
            <delta_ts>2020-03-18 18:31:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209207-20200317184927.patch</filename>
            <type>text/plain</type>
            <size>83865</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI2ZjQxMmEyMTI5NDQx
ODE3OGMxZTQwZTI0OTIwMDc0NjMyYTRhNy4uOTlmMjE0MjA1N2FjZGMwNzFlNTk0MzlkYTUzYTA3
Njk5ZDQxYTk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDIwLTAzLTE3ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVuYW1lZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoIHRvIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJh
bmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChX
ZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZl
cnRUb05TUmFuZ2U6XSk6IERpdHRvLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IEV4
cG9ydCBhbm90aGVyIGNvbnN0cnVjdG9yLgorCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSk6CisgICAgICAgIFVzZSBjaGFy
YWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUpOiBEaXR0
by4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6IERpdHRvLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbmRleEZv
clZpc2libGVQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6cmFu
Z2VMZW5ndGggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1Bh
cmFncmFwaDo6b2Zmc2V0VG8gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
aGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdTdGFydCBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0VuZCBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0xlbmd0
aCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBo
OjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRG
aXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCBjb25zdCk6IERpdHRvLgorCisgICAg
ICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0
ZXJDb3VudCk6IExpa2UgdGhlIGJhb3ZlIGJ1dCB0aGUgYXJndW1lbnQgaXMgU2ltcGxlUmFuZ2UK
KyAgICAgICAgYW5kIHJldHVybiBpcyBDaGFyYWN0ZXJDb3VudC4gRXZlbiB0aG91Z2ggZWFjaCBp
bmRpdmlkdWFsIG5vZGUgaXMgbGltaXRlZAorICAgICAgICB0byAzMi1iaXQgc2l6ZSwgcmFuZ2Vz
IGNvdmVyaW5nIG11bHRpcGxlIG5vZGVzIGNvdWxkIGhhdmUgYSBjb3VudCBvZgorICAgICAgICBj
aGFyYWN0ZXJzIHRoYXQgZXhjZWVkcyAzMiBiaXRzLCBzbyBDaGFyYWN0ZXJDb3VudCBpcyBzaXpl
X3QuCisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3Ro
RnJvbVJhbmdlKTogVXNlIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogZWRpdGluZy9UZXh0
SXRlcmF0b3IuaDogQWRkZWQgY2hhcmFjdGVyQ291bnQgZnVuY3Rpb24sCisgICAgICAgIENoYXJh
Y3RlckNvdW50IGFuZCBDaGFyYWN0ZXJSYW5nZSB0eXBlcy4gUmVtb3ZlZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoLgorICAgICAgICBBZGRlZCBGSVhNRSBjb21tZW50cyBhYm91dCB0aGUgbmV4
dCBzdGVwcy4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VCb3VuZGFyeVBvaW50KTogQWRkZWQuCisgICAgICAgICogZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaDogQWRkZWQgbWFrZUJvdW5kYXJ5UG9pbnQuIEFsc28gcmVtb3Zl
ZAorICAgICAgICBleHRyYW5lb3VzIGZvcndhcmQgZGVjbGFyYXRpb25zIGFuZCBtb3ZlZCBzb21l
IGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhlCisgICAgICAgIGNsYXNzIGRlZmluaXRpb24uCisK
KyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
aXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIHB0cmRpZmZf
dC4KKyAgICAgICAgVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJs
ZVVuaXRzLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVjdEl0ZW1BdFBvc2l0
aW9uV2l0aFJhbmdlKTogVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAqIGVkaXRpbmcvY29j
b2EvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29r
dXA6OnJhbmdlRm9yU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9u
YXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRp
bmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0
aW9uQ29tbWFuZElPUzo6ZG9BcHBseSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXBMZWdhY3kubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0RGlzdGFuY2UpOiBEaXR0
by4KKwogMjAyMC0wMy0xNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTW92ZSBtb3N0IG9mIFRleHRJdGVyYXRvciBvZmYgb2YgbGl2ZSByYW5nZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggZmQ3YmZjYmQxYjE1ZWRkMDMyNTFhNDg1NmE0YjZjZTc2MGFlM2ZkNC4uYzRhMjljMmU5ODM5
NjliODFiZjcxMTljNmI4ZGZlNDI4ZWYxMGQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAor
MjAyMC0wMy0xNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hh
bmdlIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVpcmUgYSBsaXZlIHJhbmdl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyMDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJl
ZC9FZGl0aW5nUmFuZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0aW5nUmFuZ2U6OnRvUmFu
Z2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjppbnNlcnRpb25Qb2lu
dEZyb21DdXJyZW50U2VsZWN0aW9uKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0bworICAgICAgICBD
aGFyYWN0ZXJDb3VudCBhbmQgdXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OnN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKTogVHdlYWtlZCAjaWYuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
Ojp0YXJnZXRGcmFtZUZvckVkaXRpbmcpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0Ojpy
YW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
bGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogRGl0dG8uCisKIDIwMjAtMDMtMTUgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9zdCBvZiBUZXh0SXRlcmF0
b3Igb2ZmIG9mIGxpdmUgcmFuZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNDA5
Zjk0NGUwYWQzNWMyZTcyODU2MTU3NDM3ZGQxNjkzYTBmYTJhOS4uNzY5ZDMwMjA4MjAyZmMwOTVk
M2VkYTU1MDg1NDQ0ZmMyYTNkYmMzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE2IEBACisyMDIwLTAzLTE3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
KworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWly
ZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoaW5z
ZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAg
ICAgICAgKFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24pOiBE
aXR0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFt
ZSBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2VJc1JlbGF0aXZlVG86XSk6IERpdHRvLgorCiAyMDIw
LTAzLTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIG1v
c3Qgb2YgVGV4dEl0ZXJhdG9yIG9mZiBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggZDRlNWM5ODdkNThiNjI1MjE4
NjdlMDIwZjNhOGE3YWFkZTg4YzAxZi4uZGIzNDMyNDRlMDZmYzNhZDhlNWE2NGFhYTJlOTUxNzY1
MTRmMjJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwCkBAIC0xOTM5LDE4ICsxOTM5LDE2IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBWE9i
amVjdENhY2hlOjpyYW5nZU1hdGNoZXNUZXh0TmVhclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlCiAg
ICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IG1hdGNoVGV4dC5sZW5ndGgoKTsKICAgICBhdXRvIHN0
YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZzZXQoY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpLCAtdGV4dExlbmd0aCk7
CiAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvc2l0aW9uV2l0aE9m
ZnNldChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ob3JpZ2luYWxSYW5nZS5zdGFydCksIDIg
KiB0ZXh0TGVuZ3RoKTsKLQogICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICBzdGFydFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG9yaWdpbmFsUmFu
Z2Uuc3RhcnQuY29udGFpbmVyLnB0cigpKTsKICAgICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkp
CiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShvcmlnaW5h
bFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwogCi0gICAgYXV0byBzZWFyY2hSYW5nZSA9IFJh
bmdlOjpjcmVhdGUobV9kb2N1bWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotICAg
IGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgU2ltcGxlUmFuZ2Ugc2VhcmNoUmFu
Z2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRQb3NpdGlvbiksICptYWtlQm91bmRhcnlQb2lu
dChlbmRQb3NpdGlvbikgfTsKKyAgICBpZiAoc2VhcmNoUmFuZ2UuY29sbGFwc2VkKCkpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShtX2RvY3VtZW50LCBzdGFydFBvc2l0aW9uLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
b3JpZ2luYWxSYW5nZS5zdGFydCkpOwotICAgIHVuc2lnbmVkIHRhcmdldE9mZnNldCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIHRydWUpOworICAgIGF1dG8gdGFyZ2V0
T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS5zdGFydCwgb3JpZ2luYWxSYW5n
ZS5zdGFydCB9LCB0cnVlKTsKICAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFpblRleHQoc2VhcmNo
UmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCkBAIC0xOTkzLDEyICsx
OTkxLDExIEBAIHN0YXRpYyBib29sIGNoYXJhY3Rlck9mZnNldHNJbk9yZGVyKGNvbnN0IENoYXJh
Y3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0MSwgY29uCiBzdGF0aWMgTm9kZSogcmVzZXROb2Rl
QW5kT2Zmc2V0Rm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSwgaW50JiBvZmZzZXQs
IGludCBjaGFyYWN0ZXJDb3VudCkKIHsKICAgICAvLyBVc2UgdGhpcyBmdW5jdGlvbiB0byBpbmNs
dWRlIHRoZSByZXBsYWNlZCBub2RlIGl0c2VsZiBpbiB0aGUgcmFuZ2Ugd2UgYXJlIGNyZWF0aW5n
LgotICAgIGlmICghcmVwbGFjZWROb2RlKQorICAgIGF1dG8gbm9kZVJhbmdlID0gQVhPYmplY3RD
YWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMocmVwbGFjZWROb2RlKTsKKyAgICBpZiAoIW5vZGVS
YW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiBu
b2RlUmFuZ2UgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50cyhyZXBsYWNlZE5v
ZGUpOwotICAgIGludCBub2RlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChub2Rl
UmFuZ2UuZ2V0KCkpOwotICAgIG9mZnNldCA9IGNoYXJhY3RlckNvdW50IDw9IG5vZGVMZW5ndGgg
PyByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSA6IHJlcGxhY2VkTm9kZS0+Y29tcHV0
ZU5vZGVJbmRleCgpICsgMTsKKyAgICBib29sIGlzSW5Ob2RlID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNoYXJhY3RlckNvdW50KSA8PSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCgqbm9kZVJhbmdl
KTsKKyAgICBvZmZzZXQgPSByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIChpc0lu
Tm9kZSA/IDAgOiAxKTsKICAgICByZXR1cm4gcmVwbGFjZWROb2RlLT5wYXJlbnROb2RlKCk7CiB9
CiAKQEAgLTI0MTQsMTQgKzI0MTEsMTYgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6
Om5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWMKICAgICAg
ICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAogICAgIC8vIFdlIGRvbid0IGFsd2F5
cyBtb3ZlIG9uZSAnY2hhcmFjdGVyJyBhdCBhIHRpbWUgc2luY2UgdGhlcmUgbWlnaHQgYmUgY29t
cG9zZWQgY2hhcmFjdGVycy4KLSAgICBpbnQgbmV4dE9mZnNldCA9IFBvc2l0aW9uOjp1bmNoZWNr
ZWROZXh0T2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0
KTsKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gUG9zaXRpb246OnVuY2hlY2tlZE5leHRPZmZz
ZXQoY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQpOwogICAgIENo
YXJhY3Rlck9mZnNldCBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqY2hh
cmFjdGVyT2Zmc2V0Lm5vZGUsIG5leHRPZmZzZXQpOwogICAgIAogICAgIC8vIFRvIGJlIGNvbnNp
c3RlbnQgd2l0aCBWaXNpYmxlUG9zaXRpb24sIHdlIHNob3VsZCBjb25zaWRlciB0aGUgY2FzZSB0
aGF0IGN1cnJlbnQgbm9kZSBlbmQgdG8gbmV4dCBub2RlIHN0YXJ0IGNvdW50cyAxIG9mZnNldC4K
ICAgICBpZiAoIWlnbm9yZU5leHROb2RlU3RhcnQgJiYgIW5leHQuaXNOdWxsKCkgJiYgIWlzUmVw
bGFjZWROb2RlT3JCUihuZXh0Lm5vZGUpICYmIG5leHQubm9kZSAhPSBjaGFyYWN0ZXJPZmZzZXQu
bm9kZSkgewotICAgICAgICBpbnQgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChy
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBuZXh0KS5n
ZXQoKSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiBuZXh0T2Zmc2V0IC0gY2hhcmFjdGVyT2Zmc2V0
Lm9mZnNldCkKLSAgICAgICAgICAgIG5leHQgPSBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zm
c2V0KCpuZXh0Lm5vZGUsIDAsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKKyAgICAgICAg
aWYgKGF1dG8gcmFuZ2UgPSByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFj
dGVyT2Zmc2V0LCBuZXh0KSkgeworICAgICAgICAgICAgYXV0byBsZW5ndGggPSBjaGFyYWN0ZXJD
b3VudCgqcmFuZ2UpOworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IG5leHRPZmZzZXQgLSBjaGFy
YWN0ZXJPZmZzZXQub2Zmc2V0KQorICAgICAgICAgICAgICAgIG5leHQgPSBjaGFyYWN0ZXJPZmZz
ZXRGb3JOb2RlQW5kT2Zmc2V0KCpuZXh0Lm5vZGUsIDAsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0
YXJ0KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICByZXR1cm4gbmV4dDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KaW5kZXggMTAxZWIyZDgyNzk3OTRkYTkxMzRk
MjgxMTgwZGVhNWNhYjgwZGM1ZC4uMWZhZTVhZmM5YjkyNjFhZDdhZjVhMThhNTNmZmYzNDQ4YWM2
ZDI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTIzMTAs
MzAgKzIzMTAsMzAgQEAgLSAoTlNBcnJheSAqKWFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6KE5T
QXJyYXkgKiltYXJrZXJzIGF0dHJpYnV0ZWQ6KEJPT0wpYXR0cmkKICAgICByZXR1cm4gW2FycmF5
IGF1dG9yZWxlYXNlXTsKIH0KIAotLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2Ug
KilyYW5nZQorLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UgKilsaXZlUmFuZ2UK
IHsKLSAgICBpZiAoIXJhbmdlKQorICAgIGlmICghbGl2ZVJhbmdlKQogICAgICAgICByZXR1cm4g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBFbGVtZW50KiBzZWxlY3Rpb25S
b290ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxl
Y3Rpb25Sb290IDogZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIFNpbXBsZVJhbmdl
IHJhbmdlIHsgKmxpdmVSYW5nZSB9OworCisgICAgYXV0byYgZG9jdW1lbnQgPSByYW5nZS5zdGFy
dC5kb2N1bWVudCgpOworICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisK
KyAgICBhdXRvKiByb290RWRpdGFibGVFbGVtZW50ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBhdXRvKiBzY29wZSA9IHJvb3RFZGl0
YWJsZUVsZW1lbnQgPyByb290RWRpdGFibGVFbGVtZW50IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50KCk7CisgICAgaWYgKCFzY29wZSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90
Rm91bmQsIDApOwogCiAgICAgLy8gTW91c2UgZXZlbnRzIG1heSBjYXVzZSBUU00gdG8gYXR0ZW1w
dCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0aW9uIG9mIHRoZSB2aWV3Ci0gICAgLy8g
dGhhdCBpcyBub3QgaW5zaWRlIHRoZSBjdXJyZW50IGVkaXRhYmxlIHJlZ2lvbi4gIFRoZXNlIGNo
ZWNrcyBlbnN1cmUgd2UgZG9uJ3QgcHJvZHVjZQorICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0
aGUgY3VycmVudCBlZGl0YWJsZSByZWdpb24uIFRoZXNlIGNoZWNrcyBlbnN1cmUgd2UgZG9uJ3Qg
cHJvZHVjZQogICAgIC8vIHBvdGVudGlhbGx5IGludmFsaWQgZGF0YSB3aGVuIHJlc3BvbmRpbmcg
dG8gc3VjaCByZXF1ZXN0cy4KLSAgICBpZiAoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNj
b3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0g
ICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICBpZiAoJnJhbmdl
LT5lbmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLmlzRGVz
Y2VuZGFudE9mKHNjb3BlKSkKKyAgICBpZiAoIXNjb3BlLT5jb250YWlucyhyYW5nZS5zdGFydC5j
b250YWluZXIucHRyKCkpIHx8ICFzY29wZS0+Y29udGFpbnMocmFuZ2UuZW5kLmNvbnRhaW5lci5w
dHIoKSkpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAg
IGF1dG8gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUs
IDAsICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwotICAg
IEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBpbnQg
c3RhcnRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigp
KTsKLSAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5l
bmRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCZ0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0g
c2NvcGUpOwotICAgIGludCBlbmRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
dGVzdFJhbmdlLnB0cigpKTsKLSAgICByZXR1cm4gTlNNYWtlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwg
ZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKKyAgICByZXR1cm4gTlNNYWtlUmFuZ2UoY2hh
cmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCByYW5nZS5zdGFydCB9KSwgY2hhcmFjdGVyQ291
bnQocmFuZ2UpKTsKIH0KIAogLSAoUmVmUHRyPFJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5T
UmFuZ2UpbnNyYW5nZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCAxMjdmMmYxODk0NjRj
MTBjNDlhNTU0NDg2NmVhYzQ5NGQ0ZTg4YjIzLi5hY2Q5ODU1YTg5MTljMzc2ZTE1N2QxY2VkOWM1
ZGVlZDdhMTk1NzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNDIsNyArNDIsNyBA
QCBzdHJ1Y3QgU2ltcGxlUmFuZ2UgewogCiAgICAgYm9vbCBjb2xsYXBzZWQoKSBjb25zdCB7IHJl
dHVybiBzdGFydCA9PSBlbmQ7IH0KIAotICAgIFNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9p
bnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFu
Z2UoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5UG9pbnQmJik7
CiAKICAgICAvLyBDb252ZW5pZW5jZSBvdmVybG9hZHMgdG8gaGVscCB3aXRoIHRyYW5zaXRpb24g
ZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZlIHJhbmdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGVjMjIxNmQ3YWQ5
ZjJjMzkxMDg2ZThlZTA3MTU3ZDJlY2JhMDk1ZDIuLmI3YTA4ODFlNmY0Y2UzNmY2NTk1NTZmYzRh
YmNhMzYxNmQxMTNhMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtNTgwLDUyICs1ODAsMzggQEAgU3RyaW5nIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVy
bmF0aXZlVGV4dChBbHQKIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFs
dGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGFs
dGVybmF0aXZlLCBBbHRlcm5hdGl2ZVRleHRUeXBlIGFsdGVybmF0aXZlVHlwZSwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc1RvQWRkKQogewotICAgIGF1
dG8gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IHJhbmdlLmNsb25lUmFuZ2Uo
KTsKLQotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24ucHRy
KCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2Uuc3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5k
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24ucHRyKCksIGVuZE9mUGFyYWdyYXBo
KHJhbmdlLmVuZFBvc2l0aW9uKCkpKTsKLQogICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdv
cmQgYXQgcmFuZ2UgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMg
dG8gdGhhdCByYW5nZS4KLSAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29r
IHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgaXMgbm90IHZhbGlkIGFu
eW1vcmUuCi0gICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdl
IG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlV2l0aEFsdGVybmF0aXZl
Ci0gICAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5n
IHBhcmFncmFwaC4gV2UgdXNlIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCi0gICAg
Ly8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4gSW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3
ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBhIHJhbmdlCi0gICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0
aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhB
bHRlcm5hdGl2ZS4KLSAgICBhdXRvIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNS
YW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24tPnN0YXJ0UG9zaXRpb24oKSk7Ci0KLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5n
ZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLnN0YXJ0UG9zaXRpb24oKTsKLSAgICBpZiAoIXN0YXJ0
UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gc2V0RW5kUmVzdWx0ID0gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQoKnN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0
aXZlLmNvbnRhaW5lck5vZGUoKSwgc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUu
Y29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLSAgICBpZiAoc2V0RW5kUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47CisgICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5
IG91dCB0aGUgcmVwbGFjZW1lbnQsc3RvcmUgdGhlIHN0YXJ0IHBvc2l0aW9uIHJlbGF0aXZlIHRv
IHRoZSBzdGFydCBwb3NpdGlvbgorICAgIC8vIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4K
IAogICAgIC8vIFRha2Ugbm90ZSBvZiB0aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28g
dGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBhZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4K
LSAgICBpbnQgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5wdHIo
KSk7CisgICAgYXV0byBjb3JyZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHJhbmdlLnN0YXJ0UG9zaXRp
b24oKTsKKyAgICBhdXRvIGNvcnJlY3Rpb25TdGFydCB7IG1ha2VCb3VuZGFyeVBvaW50KGNvcnJl
Y3Rpb25TdGFydFBvc2l0aW9uKSB9OworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgeyBtYWtlQm91
bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKGNvcnJlY3Rpb25TdGFydFBvc2l0aW9uKSkgfTsK
KyAgICBpZiAoIWNvcnJlY3Rpb25TdGFydCB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIHRyZWVTY29wZVJvb3QgPSBtYWtlUmVmKGNvcnJlY3Rpb25TdGFydC0+
Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKTsKKyAgICBCb3VuZGFyeVBvaW50IHRy
ZWVTY29wZVN0YXJ0IHsgdHJlZVNjb3BlUm9vdC5nZXQoKSwgMCB9OworICAgIGF1dG8gY29ycmVj
dGlvbk9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQs
ICpjb3JyZWN0aW9uU3RhcnQgfSk7CisgICAgYXV0byBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29w
ZSA9IGNoYXJhY3RlckNvdW50KHsgdHJlZVNjb3BlU3RhcnQsICpwYXJhZ3JhcGhTdGFydCB9KTsK
IAotICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhv
ZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgYXV0byBy
YW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKKyAgICAvLyBDbG9uZSB0
aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgbWF5IGtlZXAgYSByZWZlcm5lY2UgdG8gdGhl
IG9yaWdpbmFsIHJhbmdlIGFuZCBtb2RpZnkgaXQuCisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlLmNsb25lUmFuZ2UoKSwgYWx0ZXJuYXRpdmUpLT5hcHBseSgpOwog
Ci0gICAgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0gICAg
aW50IHBhcmFncmFwaFN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKFJhbmdl
OjpjcmVhdGUocm9vdE5vZGUuZG9jdW1lbnQoKSwgJnJvb3ROb2RlLCAwLCAmcGFyYWdyYXBoUmFu
Z2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2VD
b250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRPZmZzZXQoKSkucHRyKCkpOwotICAgIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgYWx0ZXJuYXRp
dmUpLT5hcHBseSgpOwogICAgIC8vIFJlY2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbiwgc2luY2UgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0aGUg
RE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlkLiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5NTI2
Ci0gICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3Jh
cGhTdGFydEluZGV4LCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCArIGFsdGVybmF0
aXZlLmxlbmd0aCgpKTsKKyAgICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCh0cmVl
U2NvcGVSb290LnB0cigpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSwgY29ycmVjdGlvbk9m
ZnNldEluUGFyYWdyYXBoICsgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOwogICAgIGlmICghdXBkYXRl
ZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKLQog
ICAgIHNldEVuZCh1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQo
KSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQdHI8
UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCp1cGRhdGVk
UGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0
SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4dCA9
IHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKTsKKyAgICBhdXRvIHJlcGxhY2VtZW50
UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCp1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbiwgY29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBoLCBhbHRlcm5hdGl2
ZS5sZW5ndGgoKSk7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2Vl
ZGVkLgotICAgIGlmIChuZXdUZXh0ICE9IGFsdGVybmF0aXZlKQorICAgIGlmIChwbGFpblRleHQo
cmVwbGFjZW1lbnRSYW5nZS5nZXQoKSkgIT0gYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VycyA9IHJlcGxhY2VtZW50UmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0KKyAgICBhdXRvJiBt
YXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKTsKICAg
ICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6IG1hcmtlclR5cGVzVG9BZGQpCi0gICAgICAgIG1hcmtl
cnMuYWRkTWFya2VyKCpyZXBsYWNlbWVudFJhbmdlLCBtYXJrZXJUeXBlLCBtYXJrZXJEZXNjcmlw
dGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJrZXJUeXBl
KSk7CisgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKHJlcGxhY2VtZW50UmFuZ2UsIG1hcmtlclR5
cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChhbHRlcm5hdGl2
ZVR5cGUsIG1hcmtlclR5cGUpKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IGZlMDdmNTYxNjA5NzFiMzBjYjgzZTEwYjMy
YzI1ZDcwNmQwMWJjMGIuLmRmN2IxNTU1NWUwMzRjMjA3NjdlMDE5MDdkYzBhMjE0NDU0YWMyYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0y
MjMsMTkgKzIyMywxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpkb0FwcGx5KCkKIAogdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUp
CiB7Ci0gICAgLy8gdXBkYXRlIGRvY3VtZW50IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBz
dHlsZXMKLSAgICAvLyBzbyB0aGF0IHdlIGF2b2lkIHRoZSBleHBlbnNlIG9mIHVwZGF0aW5nIGJl
Zm9yZSBlYWNoIGFuZCBldmVyeSBjYWxsCi0gICAgLy8gdG8gY2hlY2sgYSBjb21wdXRlZCBzdHls
ZQorICAgIC8vIFVwZGF0ZSBkb2N1bWVudCBsYXlvdXQgb25jZSBiZWZvcmUgcmVtb3Zpbmcgc3R5
bGVzIHNvIHRoYXQgd2UgYXZvaWQgdGhlIGV4cGVuc2Ugb2YKKyAgICAvLyB1cGRhdGluZyBiZWZv
cmUgZWFjaCBhbmQgZXZlcnkgY2FsbCB0byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlLgogICAgIGRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICAv
LyBnZXQgcG9zaXRpb25zIHdlIHdhbnQgdG8gdXNlIGZvciBhcHBseWluZyBzdHlsZQogICAgIFBv
c2l0aW9uIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIGVuZCA9IGVuZFBv
c2l0aW9uKCk7Ci0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBzdGFydCkgPCAwKSB7Ci0g
ICAgICAgIFBvc2l0aW9uIHN3YXAgPSBzdGFydDsKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0gICAg
ICAgIGVuZCA9IHN3YXA7Ci0gICAgfQorICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGVuZCwgc3Rh
cnQpIDwgMCkKKyAgICAgICAgc3RkOjpzd2FwKHN0YXJ0LCBlbmQpOwogCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVTdGFydChzdGFydCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVF
bmQoZW5kKTsKQEAgLTI0NiwxNCArMjQxLDE4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgIC8vIFNhdmUgYW5kIHJlc3Rv
cmUgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgdXNpbmcgdGhlaXIgaW5kaWNlcyBpbiB0aGUgZWRp
dGFibGUgcm9vdCwgc2luY2UKICAgICAvLyBhZGRCbG9ja1N0eWxlSWZOZWVkZWQgbWF5IG1vdmVQ
YXJhZ3JhcGhzLCB3aGljaCBjYW4gcmVtb3ZlIHRoZXNlIGVuZHBvaW50cy4KICAgICAvLyBDYWxj
dWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRo
YXQgdGhleSdyZSBpbi4KLSAgICBhdXRvKiBzY29wZSA9IGhpZ2hlc3RFZGl0YWJsZVJvb3Qodmlz
aWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOworICAgIGF1dG8gc2NvcGUgPSBtYWtlUmVmUHRy
KGhpZ2hlc3RFZGl0YWJsZVJvb3QodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKTsKICAg
ICBpZiAoIXNjb3BlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHN0YXJ0UmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUpLCB2aXNp
YmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0g
ICAgYXV0byBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlv
bkluTm9kZShzY29wZSksIHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKSk7Ci0gICAgaW50IHN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHN0YXJ0UmFuZ2UucHRyKCksIHRydWUpOwotICAgIGludCBlbmRJbmRleCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgoZW5kUmFuZ2UucHRyKCksIHRydWUpOworICAgIEJvdW5kYXJ5
UG9pbnQgc2NvcGVTdGFydCB7ICpzY29wZSwgMCB9OworICAgIGF1dG8gc3RhcnRCb3VuZGFyeVBv
aW50ID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGF1dG8gZW5kQm91bmRhcnlQb2ludCA9IG1h
a2VCb3VuZGFyeVBvaW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91
bmRhcnlQb2ludCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzdGFydEluZGV4ID0gY2hh
cmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0LCAqc3RhcnRCb3VuZGFyeVBvaW50IH0sIHRydWUpOwor
ICAgIGF1dG8gZW5kSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHNjb3BlU3RhcnQsICplbmRCb3Vu
ZGFyeVBvaW50IH0sIHRydWUpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0
KHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVN0YXJ0KSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5l
eHRQYXJhZ3JhcGhTdGFydChlbmRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdGFydCkubmV4dCgpKTsK
QEAgLTI4NSw4ICsyODQsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5
bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKICAgICB9CiAgICAgCiAgICAgewotICAgICAgICBhdXRv
IHN0YXJ0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNj
b3BlLCBzdGFydEluZGV4LCAwLCB0cnVlKTsKLSAgICAgICAgYXV0byBlbmRSYW5nZSA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUsIGVuZEluZGV4LCAwLCB0
cnVlKTsKKyAgICAgICAgYXV0byBzdGFydFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aChzY29wZS5nZXQoKSwgc3RhcnRJbmRleCwgMCwgdHJ1ZSk7CisgICAg
ICAgIGF1dG8gZW5kUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVu
Z3RoKHNjb3BlLmdldCgpLCBlbmRJbmRleCwgMCwgdHJ1ZSk7CiAgICAgICAgIGlmIChzdGFydFJh
bmdlICYmIGVuZFJhbmdlKQogICAgICAgICAgICAgdXBkYXRlU3RhcnRFbmQoc3RhcnRSYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBlbmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDdk
ZGIwYWIyNTIxOTQ5MzIwNTU4ZWQ0MTE4NGI1MTBjYTk2MGVlNTYuLjBlZjM5Mjc5ZTQ3MjA4NjUw
OGJmZjU3YTJiYmIzNjMxMGQ5ZTg2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0xNDE3LDcgKzE0MTcsNiBAQCB2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0
YXJ0T2ZQYXJhZ3JhcAogICAgIAogICAgIGludCBzdGFydEluZGV4ID0gLTE7CiAgICAgaW50IGVu
ZEluZGV4ID0gLTE7Ci0gICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSAtMTsKICAgICBib29sIG9y
aWdpbmFsSXNEaXJlY3Rpb25hbCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKTsK
ICAgICBpZiAocHJlc2VydmVTZWxlY3Rpb24gJiYgIWVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgp
KSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBlbmRpbmdTZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTE0MzIsMTggKzE0MzEsMjIgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFy
dE9mUGFyYWdyYXAKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7CiAg
ICAgICAgICAgICBpZiAoc3RhcnRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIGF1dG8g
c3RhcnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRv
TW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxl
U3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAg
ICAgICAgICAgICAgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRS
YW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9
IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBzZWxl
Y3Rpb25TdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICAgICAgICAgICAgICBpZiAocGFy
YWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0
IH0sIHRydWUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBlbmRJbmRleCA9IDA7CiAg
ICAgICAgICAgICBpZiAoZW5kSW5QYXJhZ3JhcGgpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGVu
ZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mUGFyYWdyYXBoVG9Nb3Zl
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIHZpc2libGVFbmQu
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAg
ICAgICAgZW5kSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZFJhbmdlLnB0cigp
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5k
YXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9
IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYm
IHNlbGVjdGlvbkVuZCkKKyAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBjaGFyYWN0ZXJD
b3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvbkVuZCB9LCB0cnVlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBiZWZv
cmVQYXJhZ3JhcGggPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLnByZXZpb3VzKENhbm5vdENyb3Nz
RWRpdGluZ0JvdW5kYXJ5KTsKICAgICBWaXNpYmxlUG9zaXRpb24gYWZ0ZXJQYXJhZ3JhcGgoZW5k
T2ZQYXJhZ3JhcGhUb01vdmUubmV4dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkpOwogCkBA
IC0xNDc4LDkgKzE0ODEsOSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICAvLyBU
aGUgbW92ZWQgcGFyYWdyYXBoIHNob3VsZCBhc3N1bWUgdGhlIGJsb2NrIHN0eWxlIG9mIHRoZSBk
ZXN0aW5hdGlvbi4KICAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdyYXBoLT5yZW1vdmVCbG9ja1By
b3BlcnRpZXMoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNo
b3VsZCBhZGQgYSBuZXcgaW5zZXJ0IGFjdGlvbiAiV2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBh
bmQgY2FsbCBzaG91bGRJbnNlcnRGcmFnbWVudCBoZXJlLgotICAgIAorCiAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwogICAg
IGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1Nl
bGVjdGlvbigpKTsKICAgICBkZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UpOwpAQCAtMTUwOSw4ICsxNTEyLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92
ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICBp
ZiAoIWVkaXRhYmxlUm9vdCkKICAgICAgICAgZWRpdGFibGVSb290ID0gJmRvY3VtZW50KCk7CiAK
LSAgICBhdXRvIHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVu
dCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKGVkaXRhYmxlUm9vdC5nZXQoKSksIGRlc3RpbmF0aW9u
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGRlc3Rp
bmF0aW9uSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0VG9EZXN0aW5hdGlv
blJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0
ZXJDb3VudCh7IHsgKmVkaXRhYmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGlu
YXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkgfSwgdHJ1
ZSk7CiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihkZXN0aW5hdGlv
biwgb3JpZ2luYWxJc0RpcmVjdGlvbmFsKSk7CiAgICAgQVNTRVJUKGVuZGluZ1NlbGVjdGlvbigp
LmlzQ2FyZXRPclJhbmdlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggOGQ2
YmRmNDc4YWJmN2E4OWVlMDZkMWYwYzVjNzI5YzBlYTVhNzQwZC4uNzU4MmE4OWQzYmMyYmY0N2Uy
ZDQzNDhjYTYyZGY4OGUwZDg5OTUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBA
IC0xMDgzLDE1ICsxMDgzLDIzIEBAIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgUmVmUHRyPENvbnRhCiAgICAgICAgICAg
ICBzY29wZSA9ICZkb2N1bWVudDsKICAgICB9CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShkb2N1bWVudCwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZS5nZXQoKSksIHBvc2l0aW9u
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChyYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpKTsKKyAgICBhdXRvIGVu
ZCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIHRydWUpOwogfQogCiAvLyBGSVhN
RTogTWVyZ2UgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBvbmUgYWJvdmUuCiBpbnQgaW5kZXhGb3JW
aXNpYmxlUG9zaXRpb24oTm9kZSYgbm9kZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxl
UG9zaXRpb24sIGJvb2wgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uKQogewotICAgIGF1dG8gcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZSgm
bm9kZSksIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5w
dHIoKSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJv
dW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSkpOworICAgIGF1dG8gZW5kID0g
bWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSwg
Zm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNldChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0
aW9uLCBpbnQgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuY3BwCmluZGV4IDhjMjM0YTRkOTE5NDA4ZGRhYTdkNzE1MTA4Yjg0YzFmYzMwMmY2ZmEu
Ljk4YzBhYTI5NjBlODI5ZjMxMTdiYzU3NjY4MGI0YTc2YmIzZmMyYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTE0OCw3ICsxNDgsNyBA
QCB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFs
dWVzKCkKIAogaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6cmFuZ2VMZW5ndGgoKSBjb25zdAog
ewotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKCZwYXJhZ3JhcGhSYW5nZSgp
KTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UoKSk7CiB9CiAKIFJh
bmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnBhcmFncmFwaFJhbmdlKCkgY29uc3QKQEAgLTE2
NSwxNCArMTY1LDExIEBAIFJlZjxSYW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5n
ZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291CiAKIEV4Y2VwdGlvbk9yPGlu
dD4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRp
b24pIGNvbnN0CiB7Ci0gICAgaWYgKCFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpCisgICAgYXV0
byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlv
bigpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICBp
ZiAoIXN0YXJ0IHx8ICFlbmQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3Ig
fTsKLQotICAgIGF1dG8gcmFuZ2UgPSBvZmZzZXRBc1JhbmdlKCkuY2xvbmVSYW5nZSgpOwotICAg
IGF1dG8gcmVzdWx0ID0gcmFuZ2UtPnNldEVuZCgqcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLCBw
b3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotICAgIGlmIChyZXN1bHQu
aGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
OwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpKTsKKyAg
ICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7CiB9CiAKIGJvb2wgVGV4
dENoZWNraW5nUGFyYWdyYXBoOjppc0VtcHR5KCkgY29uc3QKQEAgLTIwMCwyMSArMTk3LDIxIEBA
IGNvbnN0IFN0cmluZyYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0KCkgY29uc3QKIGludCBU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQoKSBjb25zdAogewogICAgIGlmICgh
bV9jaGVja2luZ1N0YXJ0KQotICAgICAgICBtX2NoZWNraW5nU3RhcnQgPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKCZvZmZzZXRBc1JhbmdlKCkpOworICAgICAgICBtX2NoZWNraW5nU3RhcnQg
PSBjaGFyYWN0ZXJDb3VudChvZmZzZXRBc1JhbmdlKCkpOwogICAgIHJldHVybiAqbV9jaGVja2lu
Z1N0YXJ0OwogfQogCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0VuZCgpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2NoZWNraW5nRW5kKQotICAgICAgICBtX2NoZWNraW5nRW5kID0g
Y2hlY2tpbmdTdGFydCgpICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX2NoZWNraW5nUmFu
Z2UucHRyKCkpOworICAgICAgICBtX2NoZWNraW5nRW5kID0gY2hlY2tpbmdTdGFydCgpICsgY2hh
cmFjdGVyQ291bnQobV9jaGVja2luZ1JhbmdlKTsKICAgICByZXR1cm4gKm1fY2hlY2tpbmdFbmQ7
CiB9CiAKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nTGVuZ3RoKCkgY29uc3QK
IHsKICAgICBpZiAoIW1fY2hlY2tpbmdMZW5ndGgpCi0gICAgICAgIG1fY2hlY2tpbmdMZW5ndGgg
PSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fY2hlY2tpbmdSYW5nZS5wdHIoKSk7CisgICAg
ICAgIG1fY2hlY2tpbmdMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2NoZWNraW5nUmFuZ2UpOwog
ICAgIHJldHVybiAqbV9jaGVja2luZ0xlbmd0aDsKIH0KIApAQCAtMjIzLDggKzIyMCwxMiBAQCBp
bnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KCkgY29u
c3QKICAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KQogICAgICAgICByZXR1cm4g
Km1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKIAotICAgIGF1dG8gc3RhcnRPZmZzZXRSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCksIHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgbV9hdXRvbWF0aWNSZXBsYWNlbWVu
dFN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydE9mZnNldFJhbmdlLnB0cigp
KTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UoKS5z
dGFydFBvc2l0aW9uKCkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9hdXRv
bWF0aWNSZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGlmICghc3RhcnQg
fHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50
U3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKICAgICByZXR1cm4gKm1f
YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKIH0KIApAQCAtMjMzLDggKzIzNCw3IEBAIGludCBU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKCkgY29uc3QK
ICAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCkKICAgICAgICAgcmV0dXJuICpt
X2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwogCi0gICAgYXV0byBlbmRPZmZzZXRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCksIHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1JlcGxhY2Vt
ZW50UmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5n
dGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldFJhbmdlLnB0cigpKSAtIGF1
dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQoKTsKKyAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVu
Z3RoID0gY2hhcmFjdGVyQ291bnQobV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKTsKICAgICBy
ZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7CiB9CiAKQEAgLTMyMywyNSArMzIz
LDIzIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JC
YWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50
IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KICAgICBSZWY8UmFuZ2U+IHBhcmFncmFw
aFJhbmdlID0gbV9yYW5nZS0+Y2xvbmVSYW5nZSgpOwogICAgIHNldFN0YXJ0KHBhcmFncmFwaFJh
bmdlLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwot
ICAgIGludCB0b3RhbFJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJh
Z3JhcGhSYW5nZS5wdHIoKSk7CisgICAgYXV0byB0b3RhbFJhbmdlTGVuZ3RoID0gY2hhcmFjdGVy
Q291bnQocGFyYWdyYXBoUmFuZ2UpOwogICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwg
ZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CiAgICAgCi0gICAgUmVm
PFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigp
LCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGludCByYW5nZVN0YXJ0T2Zmc2V0ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLnB0cigpKTsKLSAgICBpbnQg
dG90YWxMZW5ndGhQcm9jZXNzZWQgPSAwOworICAgIGF1dG8gcmFuZ2VTdGFydE9mZnNldCA9IGNo
YXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBv
c2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9
KTsKKyAgICBDaGFyYWN0ZXJDb3VudCB0b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7CiAgICAgCiAg
ICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CiAgICAgYm9vbCBsYXN0SXRlcmF0aW9uID0g
ZmFsc2U7CiAgICAgd2hpbGUgKHRvdGFsTGVuZ3RoUHJvY2Vzc2VkIDwgdG90YWxSYW5nZUxlbmd0
aCkgewogICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNlYXJjaCByYW5nZSBieSBwYXJh
Z3JhcGhzLCBjaGVja2luZyBlYWNoIG9uZSBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIuCi0gICAg
ICAgIGludCBjdXJyZW50TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3Jh
cGhSYW5nZS5wdHIoKSk7CisgICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IGNoYXJhY3RlckNv
dW50KHBhcmFncmFwaFJhbmdlKTsKICAgICAgICAgaW50IGN1cnJlbnRTdGFydE9mZnNldCA9IGZp
cnN0SXRlcmF0aW9uID8gcmFuZ2VTdGFydE9mZnNldCA6IDA7CiAgICAgICAgIGludCBjdXJyZW50
RW5kT2Zmc2V0ID0gY3VycmVudExlbmd0aDsKICAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChw
YXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSkg
ewogICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhl
IGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFn
cmFwaCwKICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0
cyBpbiB0aGlzIGFyZWEuCi0gICAgICAgICAgICBhdXRvIGVuZE9mZnNldEFzUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwot
ICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
ZW5kT2Zmc2V0QXNSYW5nZS5wdHIoKSk7CisgICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0g
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSB9
KTsKICAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5kT2Zmc2V0KSB7CkBAIC0zOTksMTAg
KzM5Nyw4IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5n
T3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAKICAgICAgICAgICAgICAgICBpZiAo
IW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFy
UGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2Nh
dGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxp
bmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBwYXJhZ3Jh
cGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdP
ZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZzZXRBc1Jhbmdl
LnB0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
IWZpcnN0SXRlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQg
Kz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3Np
dGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9u
KCkpIH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zmc2V0OwogICAg
ICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxsZWRXb3JkOwpAQCAtNDEw
LDEwICs0MDYsOCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVs
bGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhyYXNlLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNldCA9
IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCks
IHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFn
cmFwaE9mZnNldEFzUmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAg
ICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBv
aW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3Jh
cGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0SXNT
cGVsbGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0
ID0gZ3JhbW1hclBocmFzZU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0
ZW0gPSBiYWRHcmFtbWFyUGhyYXNlOwpAQCAtNTU2LDcgKzU1MCw3IEBAIGJvb2wgVGV4dENoZWNr
aW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCiAgICAgLy8gQmFkIGdyYW1tYXIgYXQgc3RhcnQgb2YgcmFuZ2UsIGJ1dCBlbmQgb2Yg
YmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVuZCBvZiByYW5nZQotICAgIGlmIChncmFt
bWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fcmFuZ2UucHRy
KCkpKQorICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3JhbW1hckRldGFpbC5sZW5ndGgp
ICE9IGNoYXJhY3RlckNvdW50KG1fcmFuZ2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgLy8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMg
ZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGU4NDQxMmIyNzY4MzU2
NmYzMDNhNmQxYjkyZTY3ZjMyMTJkOGQyZmQuLmU4NmViZjE5MTkwMmViNTMxYjg3NDVjZDc1Zjll
NzhmNTQ0OTlmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAg
LTIzNDMsMTIgKzIzNDMsMTAgQEAgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6bGVuZ3RoKCkgY29uc3QK
IAogLy8gLS0tLS0tLS0KIAotaW50IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29uc3QgUmFu
Z2UqIHJhbmdlLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKK0NoYXJhY3RlckNvdW50
IGNoYXJhY3RlckNvdW50KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBzcGFjZXNGb3JS
ZXBsYWNlZEVsZW1lbnRzKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdl
LCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNC
ZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7
ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpCisgICAgQ2hhcmFjdGVyQ291bnQgbGVuZ3RoID0g
MDsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZSwgc3BhY2VzRm9yUmVwbGFjZWRFbGVt
ZW50cyA/IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zIDogVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFu
Y2UoKSkKICAgICAgICAgbGVuZ3RoICs9IGl0LnRleHQoKS5sZW5ndGgoKTsKICAgICByZXR1cm4g
bGVuZ3RoOwogfQpAQCAtMjQ1NiwyMSArMjQ1NCwxNiBAQCBib29sIFRleHRJdGVyYXRvcjo6Z2V0
TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5n
ZQogCiAgICAgLy8gVGhlIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIG9ubHkgZ2V0
cyBjYWxsZWQgd2l0aCByYW5nZXMgdGhhdAogICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2ZW4g
YXJlYSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gcm9vdC4gVGhpcyBpcyBkb25lCi0gICAgLy8g
YmVjYXVzZSBvZiB0ZXh0IGZpZWxkcyBhbmQgdGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBp
cyBub3QKLSAgICAvLyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUgdGhh
dCB0aGUgcmFuZ2UgZG9lcyBub3QgY3Jvc3MgYQotICAgIC8vIGJvdW5kYXJ5IG9mIG9uZSBvZiB0
aG9zZS4KKyAgICAvLyBiZWNhdXNlIG9mIHRleHQgZmllbGRzIGFuZCB0ZXh0YXJlYXMuIFRoZSBE
T00gZm9yIHRob3NlIGlzIG5vdCBkaXJlY3RseQorICAgIC8vIGluIHRoZSBkb2N1bWVudCBET00s
IHNvIGVuc3VyZSB0aGF0IHRoZSByYW5nZSBkb2VzIG5vdCBjcm9zcyBhIGJvdW5kYXJ5CisgICAg
Ly8gb2Ygb25lIG9mIHRob3NlLgogICAgIGlmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0g
c2NvcGUgJiYgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzRGVzY2VuZGFudE9mKHNjb3BlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgmcmFuZ2UtPmVuZENvbnRhaW5lcigpICE9
IHNjb3BlICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKCkuaXNEZXNjZW5kYW50T2Yoc2NvcGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWY8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCAmcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3Rh
cnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgbG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSk7Ci0KLSAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5n
ZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCZ0ZXN0
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxlbmd0aCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKSAtIGxvY2F0aW9uOworICAgIGxvY2F0
aW9uID0gY2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJhbmdlLT5zdGFydENvbnRh
aW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSB9IH0pOworICAgIGxlbmd0aCA9IGNoYXJhY3Rl
ckNvdW50KHsgeyAqc2NvcGUsIDAgfSwgeyByYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5l
bmRPZmZzZXQoKSB9IH0pIC0gbG9jYXRpb247CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDE1N2YxZGExZDBlNmM5NTNkOWRlZGM0
ZWZhY2UxM2U5ODBlMzEzNGUuLjk2ZWNhZWU0OTNjZDczNGRiZTk4OWQ5Y2VhY2Y1ZDk5ZjY5Zjg4
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtMzYsNyArMzYsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlclRleHRGcmFn
bWVudDsKIAorLy8gRklYTUU6IERlbGV0ZSB0aGlzIG92ZXJsb2FkIGFmdGVyIG1vdmluZyBhbGwg
dGhlIGNhbGxlcnMgdG8gdGhlIFNpbXBsZVJhbmdlIHZlcnNpb24uCiBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgcGxhaW5UZXh0KGNvbnN0IFJhbmdlKiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0
SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwor
CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4
dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNE
aXNwbGF5U3RyaW5nID0gZmFsc2UpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dFJl
cGxhY2luZ05vQnJlYWtTcGFjZShjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2
aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9
IGZhbHNlKTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHRVc2luZ0JhY2t3YXJkc1Rl
eHRJdGVyYXRvckZvclRlc3RpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKTsKQEAgLTEwMCw3ICsxMDIs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVGV4dEl0ZXJhdG9yQ29weWFibGVUZXh0JiBjb3B5YWJs
ZVRleHQoKSBjb25zdCB7IEFTU0VSVCghYXRFbmQoKSk7IHJldHVybiBtX2NvcHlhYmxlVGV4dDsg
fQogICAgIHZvaWQgYXBwZW5kVGV4dFRvU3RyaW5nQnVpbGRlcihTdHJpbmdCdWlsZGVyJiBidWls
ZGVyKSBjb25zdCB7IGNvcHlhYmxlVGV4dCgpLmFwcGVuZFRvU3RyaW5nQnVpbGRlcihidWlsZGVy
KTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGludCByYW5nZUxlbmd0aChjb25zdCBS
YW5nZSosIGJvb2wgc3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cyA9IGZhbHNlKTsKKyAgICAvLyBG
SVhNRTogTW92ZSB0aGVzZSB0byBTaW1wbGVSYW5nZSwgQ2hhcmFjdGVyUmFuZ2UsIGFuZCBDaGFy
YWN0ZXJDb3VudCBhbmQgbW92ZSBvdXQgb2YgdGhpcyBjbGFzcyB0byB0aGUgdG9wIGxldmVsIChi
b3R0b20gb2YgdGhpcyBmaWxlKS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFJh
bmdlPiByYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50
IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0aCwgYm9vbCBzcGFjZXNGb3JSZXBsYWNlZEVs
ZW1lbnRzID0gZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdldExvY2F0
aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNjb3BlLCBjb25zdCBSYW5nZSosIHNpemVfdCYg
bG9jYXRpb24sIHNpemVfdCYgbGVuZ3RoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PFJhbmdlPiBzdWJyYW5nZShSYW5nZSYgZW50aXJlUmFuZ2UsIGludCBjaGFyYWN0ZXJPZmZzZXQs
IGludCBjaGFyYWN0ZXJDb3VudCk7CkBAIC0yODcsNCArMjg5LDEzIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2RpZExvb2tBaGVhZCB7IHRydWUgfTsKIH07CiAKK3VzaW5nIENoYXJhY3RlckNvdW50
ID0gc2l6ZV90OworCitzdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2UgeworICAgIENoYXJhY3RlckNvdW50
IGxvY2F0aW9uIHsgMCB9OworICAgIENoYXJhY3RlckNvdW50IGxlbmd0aCB7IDAgfTsKK307CisK
K1dFQkNPUkVfRVhQT1JUIENoYXJhY3RlckNvdW50IGNoYXJhY3RlckNvdW50KGNvbnN0IFNpbXBs
ZVJhbmdlJiwgYm9vbCBzcGFjZXNGb3JSZXBsYWNlZEVsZW1lbnRzID0gZmFsc2UpOworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKaW5kZXggNmI5MGZmZGJlNTRhZWNlODYzMzUxMzEyYTI1YjEyYWU4ZDJjZTFhMC4uOTcz
MDJjZjUyYTQzOWUwN2FkZjBjOGVjOWI4YTFkY2ViYWNjMTFmOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtODE5LDYgKzgxOSwxMSBAQCBib29sIFZpc2libGVQb3NpdGlvbjo6ZXF1YWxzKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIG1fYWZmaW5pdHkg
PT0gb3RoZXIubV9hZmZpbml0eSAmJiBtX2RlZXBQb3NpdGlvbi5lcXVhbHMob3RoZXIubV9kZWVw
UG9zaXRpb24pOwogfQogCitPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2lu
dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIHJldHVybiBtYWtlQm91
bmRhcnlQb2ludChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKK30KKwogVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKICAg
ICBzd2l0Y2ggKGFmZmluaXR5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRp
b24uaAppbmRleCA0ODU2NjgyNGVkNzNmZGFjZDI1NzA4ZGUzMTkzMTRlNjE5MmMwMmYwLi5mODRi
Y2RmZDcyZjViYzQ1NzYzM2RhNDgzMjcyMWU1Mjc3YTI0ODUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDYgQEAKICNpbmNsdWRlICJF
ZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogCi1uYW1lc3BhY2UgV1RG
IHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UmFuZ2U7CkBAIC00OSw5ICs0NSw2IEBAIGNsYXNzIFJhbmdlOwogLy8gcG9zaXRpb24gaXMgbm90
IGF0IGEgbGluZSBicmVhay4KICNkZWZpbmUgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgVVBTVFJF
QU0KIAotY2xhc3MgSW5saW5lQm94OwotY2xhc3MgTm9kZTsKLQogY2xhc3MgVmlzaWJsZVBvc2l0
aW9uIHsKIHB1YmxpYzoKICAgICAvLyBOT1RFOiBVUFNUUkVBTSBhZmZpbml0eSB3aWxsIGJlIHVz
ZWQgb25seSBpZiBwb3MgaXMgYXQgZW5kIG9mIGEgd3JhcHBlZCBsaW5lLApAQCAtODUsMjEgKzc4
LDE2IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBbdGFi
bGUsIDBdIGNvcnJlY3RseS4KICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkgPyBtX2RlZXBQb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwOyB9Ci0gICAgCi0gICAg
dm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQmIGNh
cmV0T2Zmc2V0KSBjb25zdAotICAgIHsKLSAgICAgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5l
Qm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOwotICAgIH0K
IAotICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURp
cmVjdGlvbiwgSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAot
ICAgIHsKLSAgICAgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZm
aW5pdHksIHByaW1hcnlEaXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOwotICAgIH0K
KyAgICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9m
ZnNldCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoVGV4dERpcmVjdGlv
biBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7
CiAKICAgICAvLyBSZWN0IGlzIGxvY2FsIHRvIHRoZSByZXR1cm5lZCByZW5kZXJlcgogICAgIFdF
QkNPUkVfRVhQT1JUIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoUmVuZGVyT2JqZWN0KiYpIGNv
bnN0OworCiAgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgY2FyZXQgaW4g
YWJzb2x1dGUgY29vcmRzCiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUNhcmV0
Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3Q7CisKICAgICAvLyBBYnMg
eC95IHBvc2l0aW9uIG9mIHRoZSBjYXJldCBpZ25vcmluZyB0cmFuc2Zvcm1zLgogICAgIC8vIEZJ
WE1FOiBuYXZpZ2F0aW9uIHdpdGggdHJhbnNmb3JtcyBzaG91bGQgYmUgc21hcnRlci4KICAgICBX
RUJDT1JFX0VYUE9SVCBpbnQgbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZp
Z2F0aW9uKCkgY29uc3Q7CkBAIC0xMDcsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgRmxvYXRSZWN0IGFic29sdXRlU2VsZWN0aW9uQm91bmRzRm9yTGluZSgpIGNvbnN0Owog
CiAgICAgLy8gVGhpcyBpcyBhIHRlbnRhdGl2ZSBlbmhhbmNlbWVudCBvZiBvcGVyYXRvcj09IHRv
IGFjY291bnQgZm9yIGFmZmluaXR5LgotICAgIC8vIEZJWE1FOiBDb21iaW5lIHRoaXMgZnVuY3Rp
b24gd2l0aCBvcGVyYXRvcj09CisgICAgLy8gRklYTUU6IENvbWJpbmUgdGhpcyBmdW5jdGlvbiB3
aXRoIG9wZXJhdG9yPT0uCiAgICAgYm9vbCBlcXVhbHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCkBAIC0xMTUsNyArMTAzLDcgQEAg
cHVibGljOgogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBsZW5ndGgpIGNvbnN0OwogICAgIHZvaWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CiAjZW5k
aWYKLSAgICAKKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXQoY29uc3QgUG9zaXRpb24mLCBFQWZm
aW5pdHkpOwogICAgIFBvc2l0aW9uIGNhbm9uaWNhbFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7
CkBAIC0xMjcsMjMgKzExNSw1MCBAQCBwcml2YXRlOgogICAgIEVBZmZpbml0eSBtX2FmZmluaXR5
OwogfTsKIAorYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBvcGVyYXRvcjwoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIG9wZXJhdG9yPihjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0b3I8
PShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wg
b3BlcmF0b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKKworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5kYXJ5
UG9pbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisKK1dFQkNPUkVfRVhQT1JUIFJlZlB0cjxS
YW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOworYm9vbCBzZXRTdGFydChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwor
Ym9vbCBzZXRFbmQoUmFuZ2UqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1Zpc2libGVQb3Np
dGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVBZmZpbml0eSk7CitWaXNp
YmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsK
KworV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKKworYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2Rl
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKK2Jvb2wgaXNMYXN0VmlzaWJs
ZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKKwor
Ym9vbCBhcmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKKworLy8gaW5saW5lcworCiAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgaWdub3Jl
IGFmZmluaXR5LgogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1aXZh
bGVudCgpID09IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikK
IHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQotICAgIAorCiBpbmxpbmUgYm9vbCBvcGVyYXRv
cjwoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7
CiAgICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA8IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0K
IAotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBiKSAKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5k
ZWVwRXF1aXZhbGVudCgpID4gYi5kZWVwRXF1aXZhbGVudCgpOwogfQpAQCAtMTUzLDI2ICsxNjgs
MjAgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYikKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgpIDw9
IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikgCitpbmxpbmUgYm9v
bCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBiKQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPj0gYi5kZWVwRXF1aXZh
bGVudCgpOwotfSAgICAKLQotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2Uo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIHNl
dFN0YXJ0KFJhbmdlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIHNldEVuZChSYW5n
ZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJs
ZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKLVZpc2libGVQb3NpdGlvbiBlbmRW
aXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UqLCBFQWZmaW5pdHkpOwotCi1XRUJDT1JFX0VYUE9S
VCBFbGVtZW50KiBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwotCi1ib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgY29uc3QgTm9kZSopOwotYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOworfQogCi1ib29sIGFyZVZpc2li
bGVQb3NpdGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CitpbmxpbmUgdm9pZCBWaXNpYmxlUG9zaXRpb246OmdldElubGlu
ZUJveEFuZE9mZnNldChJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNv
bnN0Cit7CisgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5p
dHksIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOworfQogCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKK2lubGluZSB2b2lkIFZpc2libGVQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zm
c2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYgaW5saW5lQm94
LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAoreworICAgIG1fZGVlcFBvc2l0aW9uLmdldElubGlu
ZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNh
cmV0T2Zmc2V0KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggOTEwOWFiOTU0OTA2OWYzNjA0ZjA5ODZhYzk4
ZThiOTk0NDlhMTRhZS4uYWZmMzZkNDgxODg3MjZmMjhiMGJjMzc5OTkxOWFlN2MwZWYyZTcwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtMTkwMSwyMCArMTkw
MSwxMyBAQCBSZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUZXh0R3JhbgogICAgIHJldHVybiBSYW5nZTo6Y3JlYXRl
KHByZXZCb3VuZGFyeS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50
KCksIHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKIH0KIAotaW50IGRpc3RhbmNlQmV0d2Vl
blBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mIG90aGVyKQorcHRyZGlmZl90IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKLSAgICBpZiAodnAu
aXNOdWxsKCkgfHwgb3RoZXIuaXNOdWxsKCkpCisgICAgaWYgKGEuaXNOdWxsKCkgfHwgYi5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHRoaXNJc1N0YXJ0ID0gKHZwIDwg
b3RoZXIpOwotCi0gICAgLy8gU3RhcnQgbXVzdCBjb21lIGZpcnN0IGluIHRoZSBSYW5nZSBjb25z
dHJ1Y3Rvci4KLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSh2cC5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHRoaXNJc1N0YXJ0ID8gdnAgOiBvdGhlciksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNJc1N0YXJ0ID8gb3RoZXIgOiB2cCkp
OwotICAgIGludCBkaXN0YW5jZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRy
KCkpOwotCi0gICAgcmV0dXJuICh0aGlzSXNTdGFydCA/IC1kaXN0YW5jZSA6IGRpc3RhbmNlKTsK
KyAgICByZXR1cm4gYSA8IGIKKyAgICAgICAgPyAtY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5k
YXJ5UG9pbnQoYSksICptYWtlQm91bmRhcnlQb2ludChiKSB9KQorICAgICAgICA6IGNoYXJhY3Rl
ckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGIpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoYSkgfSk7
CiB9CiAKIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgcG9zaXRpb24sIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZvcmUsIFVDaGFy
MzImIHR3b0JlZm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCmluZGV4IDY3
MTdlYjExZGRkYmQ4NjhlNDQxNGMzOTgwMzM1MmEwMzE2YWZlM2UuLmNlOGM1MGY1NzkzNjBlMDFj
ZmRjODUyZmVhNTgxZjllNDI1YTQ4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5p
dHMuaApAQCAtMTAyLDcgKzEwMiw3IEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXRCb3VuZGFyeU9m
R3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyCiBXRUJDT1JF
X0VYUE9SVCBib29sIHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VY
UE9SVCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b24pOwogV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3Jh
bnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb24pOwotV0VCQ09SRV9FWFBPUlQgaW50IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9u
cyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1dFQkNP
UkVfRVhQT1JUIHB0cmRpZmZfdCBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8UmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
IFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbik7CiBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNoYXJhY3RlcnNBcm91bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBVQ2hh
cjMyJiBvbmVBZnRlciwgVUNoYXIzMiYgb25lQmVmb3JlLCBVQ2hhcjMyJiB0d29CZWZvcmUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDEw
M2U1NTNiMjM3YTkxOTdiYzM4ZDI0MjE2MDI0NmM2ZDIzMjI2MzUuLjJiOTMxN2IxNzEzZjI2MGEy
ZGFmMzhjNWIxZmJhNGUwODRhYjdjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTcxLDE1ICs3MSwxOCBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1B
dFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVmUHRyPFJhbmdl
PiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0
cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQogewogICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0
U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7Ci0gICAgaW50IGhpdExvY2F0
aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoY29udGV4dFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgYXV0byBzdGFydCA9IGNvbnRl
eHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBwb3Np
dGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBDRkluZGV4IGhpdExvY2F0
aW9uID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJv
dW5kYXJ5UG9pbnQocG9zaXRpb24pIH0pOwogCi0gICAgUmV0YWluUHRyPEREU2Nhbm5lclJlZj4g
c2Nhbm5lciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwg
MCwgbnVsbHB0cikpOwotICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJlZj4gc2NhblF1ZXJ5ID0g
YWRvcHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
ZnVsbFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBDRlJhbmdlTWFrZSgw
LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOworICAgIGF1dG8gc2Nhbm5lciA9IGFk
b3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikp
OworICAgIGF1dG8gc2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkp
OwogCiAgICAgaWYgKCFERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29w
eVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0c09w
dGlvbnNOb092ZXJsYXApKTsKKyAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdENGKEREU2Nhbm5lckNv
cHlSZXN1bHRzV2l0aE9wdGlvbnMoc2Nhbm5lci5nZXQoKSwgRERTY2FubmVyQ29weVJlc3VsdHNP
cHRpb25zTm9PdmVybGFwKSk7CiAKICAgICAvLyBGaW5kIHRoZSBERFJlc3VsdFJlZiB0aGF0IGlu
dGVyc2VjdHMgdGhlIGhpdFRlc3RSZXN1bHQncyBWaXNpYmxlUG9zaXRpb24uCiAgICAgRERSZXN1
bHRSZWYgbWFpblJlc3VsdCA9IG51bGxwdHI7CkBAIC0xMDAsNyArMTAzLDcgQEAgc3RhdGljIFJl
dGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZp
c2libGVQb3NpdGlvbgogICAgIH0KIAogICAgIGlmICghbWFpblJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBSZXRhaW5QdHI8RERBY3Rp
b25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlvbkNvbnRleHRJ
bnN0YW5jZSgpIGluaXRdKTsKICAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1bHRzOkBbIChf
X2JyaWRnZSBpZCltYWluUmVzdWx0IF1dOwpAQCAtMTEyLDkgKzExNSw5IEBAIHN0YXRpYyBSZXRh
aW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNp
YmxlUG9zaXRpb24KICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1haW5SZXN1bHRSYW5nZS0+
b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBxdWFk
cykKICAgICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gudW5pdGUoZnJhbWVWaWV3LT5jb250
ZW50c1RvV2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSkpOwotICAgIAorCiAgICAg
ZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7Ci0gICAgCisKICAgICByZXR1cm4g
YWN0aW9uQ29udGV4dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
aWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IDg3OTcyMjAyODQ2OGYwM2UwMmVhZTU5YjU1YTI5YTIz
ZGVjZTkyZWUuLmQ2NDhmZDcwZmMzOGZjOTJjMjRlNTE3ODkwNDdjZWY2MjYzZmE1MDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNjQsMTIgKzI2NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGQ6OnR1cGxlPFJlZlB0
cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotICAgIAorCiAgICAgaWYgKCFSZXZlYWxMaWJyYXJ5KCkgfHwg
IVJldmVhbENvcmVMaWJyYXJ5KCkgfHwgIWdldFJWSXRlbUNsYXNzKCkpCiAgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKworICAg
IGlmICghc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OwogCiAgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3
ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KQEAgLTI3
OSwyMCArMjc4LDIyIEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+
IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAgICAgLy8gQXMgY29udGV4
dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0
LgogICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0
YXJ0KTsKICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVu
ZCk7CisgICAgaWYgKHBhcmFncmFwaFN0YXJ0LmlzTnVsbCgpIHx8IHBhcmFncmFwaEVuZC5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvIGxlbmd0
aFRvU2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChw
YXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7Cisg
ICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VC
b3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlv
bkVuZCkgfSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsKIAotICAgIGludCBsZW5n
dGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxlbmd0aFRv
U2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3Mg
PSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVu
ZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOwotICAgIAogICAgIFJlZlB0cjxSYW5nZT4gZnVs
bENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQp
OwogICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5n
ZXQoKSk7CiAgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVt
SW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9Q
YXNzXSk7CiAgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0
UmFuZ2U7Ci0gICAgCisKICAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxs
Q2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5s
ZW5ndGgpLCBuaWwgfTsKLSAgICAKKwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0g
ICAgCisKICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIH0KIApAQCAtMzIyLDQzICszMjMs
NDAgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQKIAogICAgIGF1dG8gc2VsZWN0aW9uID0gZnJh
bWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKLSAgICBpbnQg
aGl0SW5kZXg7CisgICAgTlNVSW50ZWdlciBoaXRJbmRleDsKICAgICBSZWZQdHI8UmFuZ2U+IGZ1
bGxDaGFyYWN0ZXJSYW5nZTsKICAgICAKICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUo
KSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikgewogICAgICAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgICAgICBhdXRvIHNl
bGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFn
cmFwaHMgb2YgdGV4dC4KICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9m
UGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CiAgICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlVG9T
ZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQp
OwotICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBo
U3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAogICAgICAgICBmdWxsQ2hhcmFjdGVyUmFu
Z2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CiAgICAgICAgIGlm
ICghZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmls
IH07CiAKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgp
KSk7Ci0gICAgICAgIAotICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOworICAgICAgICBz
ZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFy
eVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0
KSB9KSwKKyAgICAgICAgICAgIGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNl
bGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfSkpOworICAg
ICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFn
cmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVs
ZXMgeyBwb3NpdGlvbiB9OwogICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVz
LmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgcG9zaXRp
b24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7CisKICAgICAgICAg
Ly8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0
IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgogICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2Ug
PSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7
Ci0gICAgICAgIAogICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgICAgICAKKwogICAgICAgICBzZWxlY3Rpb25S
YW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOworICAgICAgICBoaXRJbmRleCA9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKICAgICB9Ci0gICAg
CisKICAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJl
dmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVl
V2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07Ci0g
ICAgCisKICAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJh
bmdlKTsKICAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1J
bnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRS
YW5nZV0pOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdo
dFJhbmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21t
YW5kSU9TLmNwcAppbmRleCA5YzFhZTg4ODk1MWZiM2JiMjU2ZWQ3ZTA5ZTI0MTc2YmM4ZDNjMzg5
Li5hMmI4MTgyODc3YjI4YWYyOWM4YTA2Mzk1NGQzNzRjZDVhYTVhNWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcApAQCAtNDgs
OSArNDgsNyBAQCBEaWN0YXRpb25Db21tYW5kSU9TOjpEaWN0YXRpb25Db21tYW5kSU9TKERvY3Vt
ZW50JiBkb2N1bWVudCwgVmVjdG9yPFZlY3RvcjxTdHJpbgogCiB2b2lkIERpY3RhdGlvbkNvbW1h
bmRJT1M6OmRvQXBwbHkoKQogewotICAgIFZpc2libGVQb3NpdGlvbiBpbnNlcnRpb25Qb3NpdGlv
bihzdGFydGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKLQotICAgIHVuc2lnbmVkIHJl
c3VsdExlbmd0aCA9IDA7CisgICAgQ2hhcmFjdGVyQ291bnQgcmVzdWx0TGVuZ3RoID0gMDsKICAg
ICBmb3IgKGF1dG8mIGludGVycHJldGF0aW9ucyA6IG1fZGljdGF0aW9uUGhyYXNlcykgewogICAg
ICAgICBjb25zdCBTdHJpbmcmIGZpcnN0SW50ZXJwcmV0YXRpb24gPSBpbnRlcnByZXRhdGlvbnNb
MF07CiAgICAgICAgIHJlc3VsdExlbmd0aCArPSBmaXJzdEludGVycHJldGF0aW9uLmxlbmd0aCgp
OwpAQCAtNjIsMjAgKzYwLDIzIEBAIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgp
CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVj
dGlvbigpLnZpc2libGVFbmQoKSkpOwogICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBhZnRl
clJlc3VsdHMoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKTsKKyAgICAvLyBGSVhNRTog
QWRkIHRoZSByZXN1bHQgbWFya2VyIHVzaW5nIGEgUG9zaXRpb24gY2FjaGVkIGJlZm9yZSByZXN1
bHRzIGFyZSBpbnNlcnRlZCwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGNoYXJhY3RlciBjb3VudHMu
CiAKLSAgICBFbGVtZW50KiByb290ID0gYWZ0ZXJSZXN1bHRzLnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKKyAgICBhdXRvIGVuZFBvc2l0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgp
OworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pOworICAgIGF1
dG8qIHJvb3QgPSBlbmRQb3NpdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgaWYgKCFl
bmQgfHwgIXJvb3QpCisgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBBZGQgdGhlIHJl
c3VsdCBtYXJrZXIgdXNpbmcgYSBQb3NpdGlvbiBjYWNoZWQgYmVmb3JlIHJlc3VsdHMgYXJlIGlu
c2VydGVkLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gVGV4dEl0ZXJhdG9ycy4KLSAgICBhdXRvIHJh
bmdlVG9FbmQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbigoTm9kZSAqKXJvb3QsIDApLCBhZnRlclJlc3VsdHMuZGVlcEVxdWl2YWxlbnQoKSk7
Ci0gICAgaW50IGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvRW5k
LnB0cigpLCB0cnVlKTsKLSAgICBpbnQgc3RhcnRJbmRleCA9IGVuZEluZGV4IC0gcmVzdWx0TGVu
Z3RoOworICAgIGF1dG8gZW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyB7ICpyb290LCAwIH0s
IFdURk1vdmUoKmVuZCkgfSk7CisgICAgaWYgKGVuZE9mZnNldCA8IHJlc3VsdExlbmd0aCkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0YXJ0SW5kZXggPj0gMCkgewotICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFu
ZExlbmd0aChkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLCBzdGFydEluZGV4LCBlbmRJbmRl
eCwgdHJ1ZSk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHRSYW5nZSk7IC8vIEZJWE1FOiBXaGF0IGd1
YXJhbnRlZXMgdGhpcz8KLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9u
UmVzdWx0TWFya2VyKCpyZXN1bHRSYW5nZSwgbV9tZXRhZGF0YSk7Ci0gICAgfQorICAgIGF1dG8g
cmVzdWx0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHJv
b3QsIGVuZE9mZnNldCAtIHJlc3VsdExlbmd0aCwgZW5kT2Zmc2V0KTsKKyAgICBpZiAoIXJlc3Vs
dFJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRE
aWN0YXRpb25SZXN1bHRNYXJrZXIoKnJlc3VsdFJhbmdlLCBtX21ldGFkYXRhKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggMTYxNTkwN2Q2OTExMGM2ODVmNzczMDcz
MThiYjJhNTU3MTk2OGE0ZS4uNTEzNWI5MDZkZWUxOGUwMTc3OWVjNjExNDc0MzFjNzk1ZTM4YTU4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9v
a3VwTGVnYWN5Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtODksMTAgKzg5LDEyIEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdl
PiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNv
CiAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcg
cGFyYWdyYXBocyBvZiB0ZXh0LgogICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFy
YWdyYXBoKHNlbGVjdGlvbkVuZCk7CisgICAgaWYgKHBhcmFncmFwaFN0YXJ0LmlzTnVsbCgpIHx8
IHBhcmFncmFwaEVuZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
CiAKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwot
ICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1Jh
bmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVu
Z3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIGxl
bmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2lu
dChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7
CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KHsgKm1h
a2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVj
dGlvbkVuZCkgfSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0
aFRvU2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsKIAogICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICB0b2tlblJhbmdlKHBsYWluVGV4dChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCkuZ2V0KCkpLCByYW5nZVRvUGFzcywgJm9w
dGlvbnMpOwpAQCAtMTMzLDcgKzEzNSwxMiBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdAogICAg
IGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKIAotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgcG9zaXRpb24pLmdldCgpKSwgMCk7CisgICAgYXV0byBmdWxsQ2hhcmFjdGVyU3RhcnQgPSBt
YWtlQm91bmRhcnlQb2ludChmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Cisg
ICAgYXV0byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOwor
ICAgIGlmICghZnVsbENoYXJhY3RlclN0YXJ0IHx8ICFwb3NpdGlvbkJvdW5kYXJ5KQorICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBO
U01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCh7ICpmdWxsQ2hhcmFjdGVyU3RhcnQsICpwb3NpdGlv
bkJvdW5kYXJ5IH0pLCAwKTsKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CiAgICAg
TlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IHRva2VuUmFuZ2UocGxhaW5UZXh0KGZ1bGxDaGFyYWN0
ZXJSYW5nZS5nZXQoKSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAppbmRleCBmYjYxYjZmZDI0YjM0YTkxZTcxYjAwNjQ2MTViNmEyMjY3
NWE1NTE1Li4wMDAwNjlkZDUzNjBlMGFmNmE5NTdmNzRmNTY0ZDU4YTFlNmUwNzMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02NTQsMTAgKzY1NCwxMyBAQCBib29sIEV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29uc3QgTW91c2VF
dmVudFdpdGhIaXRUZXN0UgogICAgIHJldHVybiB1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURvd25E
aXNwYXRjaGluZ1NlbGVjdFN0YXJ0KHRhcmdldE5vZGUsIGV4cGFuZFNlbGVjdGlvblRvUmVzcGVj
dFNlbGVjdE9uTW91c2VEb3duKCp0YXJnZXROb2RlLCBuZXdTZWxlY3Rpb24pLCBQYXJhZ3JhcGhH
cmFudWxhcml0eSk7CiB9CiAKLXN0YXRpYyBpbnQgdGV4dERpc3RhbmNlKGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKK3N0YXRpYyBDaGFyYWN0ZXJDb3VudCB0ZXh0
RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewot
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmFuY2hvck5vZGUoKS0+ZG9jdW1l
bnQoKSwgc3RhcnQsIGVuZCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
cmFuZ2UucHRyKCksIHRydWUpOworICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFy
eVBvaW50KHN0YXJ0KTsKKyAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
ZW5kKTsKKyAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnRCb3VuZGFyeSwgKmVu
ZEJvdW5kYXJ5IH0sIHRydWUpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQ
cmVzc0V2ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYg
ZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcAppbmRleCAxYWZhZTVlYmJm
NWU2M2Q5YmVkZjMwMzlkZjQ0NTFjOWI1NTNhNjM4Li5iODk5MzNmZmExYmYyODQzYzI2ZmRiZDY2
ZDI5MjZlZDAwYzVmNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5n
UmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKQEAg
LTU4LDE4ICs1OCwxNyBAQCBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IEVkaXRpbmdSYW5nZTo6dG9S
YW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IEVkaXRpbgogCiAgICAgQVNTRVJUKGVk
aXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9PSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OlBhcmFn
cmFwaCk7CiAKLSAgICBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24g
PSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBp
ZiAoIXNlbGVjdGVkUmFuZ2UpCisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHBh
cmFncmFwaFJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2li
bGVTdGFydCgpKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAgaWYgKCFwYXJhZ3JhcGhS
YW5nZSkKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRP
ZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpKTsKKyAgICBpZiAoIXBhcmFncmFw
aFN0YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvJiByb290Tm9kZSA9IHBh
cmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAKLSAgICBh
dXRvJiByb290Tm9kZSA9IHBhcmFncmFwaFJhbmdlLmdldCgpLT5zdGFydENvbnRhaW5lcigpLnRy
ZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0gICAgaW50IHBhcmFncmFwaFN0YXJ0SW5kZXggPSBXZWJD
b3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUocm9v
dE5vZGUuZG9jdW1lbnQoKSwgJnJvb3ROb2RlLCAwLCAmcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydE9mZnNldCgpKS5wdHIoKSk7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJv
b3ROb2RlLCBwYXJhZ3JhcGhTdGFydEluZGV4ICsgc3RhdGljX2Nhc3Q8aW50PihyYW5nZS5sb2Nh
dGlvbiksIGxlbmd0aCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydEluZGV4ID0gV2ViQ29yZTo6
Y2hhcmFjdGVyQ291bnQoeyB7IHJvb3ROb2RlLCAwIH0sICpwYXJhZ3JhcGhTdGFydCB9KTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0
aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXggKyByYW5nZS5sb2NhdGlvbiwgbGVuZ3Ro
KTsKIH0KIAogRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKFdlYkNvcmU6OkZy
YW1lJiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBFZGl0aW5nUmFuZ2VJc1Jl
bGF0aXZlVG8gZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApp
bmRleCA5ZTI0NzU4Y2Q5MmNmNzUwODZmY2MyMTgyNGIzNWM4ODA3MTIzMjczLi42Y2ZiYjMzYTI5
MmEyNjQ0NjZjYjg2YmUwYmJjODI2YjdkMzI5OTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApA
QCAtNjUsOCArNjUsNiBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgdWlu
dDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKQogewpAQCAtMzYxLDYgKzM1OSw3
IEBAIFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgV2ViRWRpdG9yQ2xpZW50OjpyZXF1
ZXN0RE9NUGFzdGVBY2Nlc3MoY29uc3QgU3RyCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYm
ICFVU0UoR0xJQikKKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKG1fcGFnZS0+aGFuZGxlRWRpdGluZ0tl
eWJvYXJkRXZlbnQoZXZlbnQpKQpAQCAtMzcxLDYgKzM3MCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCYpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KKwogI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShH
TElCKQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVs
ZW1lbnQqIGVsZW1lbnQpCkBAIC00MjAsNiArNDIwLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqIGVsZW1lbnQpCiB9CiAKICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6Om92ZXJmbG93U2Nyb2xs
UG9zaXRpb25DaGFuZ2VkKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNDI5LDYgKzQz
MCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzdWJGcmFtZVNjcm9sbFBvc2l0aW9uQ2hhbmdl
ZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKwogI2VuZGlmCiAKIHN0YXRpYyBib29s
IGdldEFjdGlvblR5cGVGb3JLZXlFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCwgV0tJbnB1dEZp
ZWxkQWN0aW9uVHlwZSYgdHlwZSkKQEAgLTU0OSwyMCArNTUxLDI1IEBAIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxXZWJD
b3JlOjpHcmFtCiAgICAgKmJhZEdyYW1tYXJMZW5ndGggPSByZXN1bHRMZW5ndGg7CiB9CiAKLXN0
YXRpYyBpbnQzMl90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3N0YXRpYyBDaGFyYWN0ZXJDb3VudCBp
bnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGN1cnJlbnRTZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0
ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
cGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBy
ZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IGN1cnJl
bnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydEJvdW5k
YXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8gcGFyYWdy
YXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0
YXJ0KSk7CisgICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IHx8ICFwYXJhZ3JhcGhTdGFy
dCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnNlbGVj
dGlvblN0YXJ0Qm91bmRhcnksICpwYXJhZ3JhcGhTdGFydCB9KTsKIH0KIAogI2lmIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCisKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRv
ckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBPcHRp
b25TZXQ8V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICAgICBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiByZXN1bHRzOwogICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3RyaW5nVmlldy50b1N0cmluZ1dpdGhvdXRD
b3B5aW5nKCksIGNoZWNraW5nVHlwZXMsIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24oY3VycmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1RleHRP
ZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOwogICAgIHJldHVybiByZXN1bHRzOwogfQorCiAj
ZW5kaWYKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRh
aWwmIGdyYW1tYXJEZXRhaWwpCkBAIC02MTYsMTUgKzYyMywxMyBAQCB2b2lkIFdlYkVkaXRvckNs
aWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZShFbGVtZW50KiBlbGVtZW50KQogCiBib29sIFdlYkVk
aXRvckNsaWVudDo6c3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKQogewotI2lmIFBMQVRGT1JNKEdU
SykKLSNpZiBQTEFURk9STShYMTEpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEp
CiAgICAgaWYgKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSA9PSBQbGF0
Zm9ybURpc3BsYXk6OlR5cGU6OlgxMSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSNp
ZiBQTEFURk9STShXQVlMQU5EKQorI2lmIFBMQVRGT1JNKEdUSykgJiYgUExBVEZPUk0oV0FZTEFO
RCkKICAgICBpZiAoUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBs
YXRmb3JtRGlzcGxheTo6VHlwZTo6V2F5bGFuZCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5k
aWYKICNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZDhkNThlNzc2NDRmN2IyYTBmZTQzZjM0NzUy
ZTlkNzIzMzMwZThjYy4uNjM0OTNhNjc0MzZhMDFhMGE5ZDE0ZDY4MzljY2Y2OWRkNTdkY2QwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTU0
MjUsNiArNTQyNSw3IEBAIHZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uQXN5bmMoKQog
I2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShXUEUpCisKIHN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKFdlYlBhZ2UmIHBh
Z2UpCiB7CiAgICAgRnJhbWUmIHRhcmdldEZyYW1lID0gcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTU0NjQsNyArNTQ2NSw3IEBAIHZv
aWQgV2ViUGFnZTo6ZGVsZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZzZXQsIHVuc2lnbmVkIGNo
YXJhY3RlckNvdW50KQogCiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKTsKICAgICBhdXRvIHN1cnJvdW5kaW5nUmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRP
ZkVkaXRhYmxlQ29udGVudChzZWxlY3Rpb25TdGFydCksIHNlbGVjdGlvblN0YXJ0KTsKLSAgICBh
dXRvIGN1cnNvclBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdXJyb3VuZGlu
Z1JhbmdlLmdldCgpKTsKKyAgICBhdXRvIGN1cnNvclBvc2l0aW9uID0gV2ViQ29yZTo6Y2hhcmFj
dGVyQ291bnQoKnN1cnJvdW5kaW5nUmFuZ2UpOwogICAgIGF1dG8mIHJvb3ROb2RlID0gc3Vycm91
bmRpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwogICAg
IGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoKCZyb290Tm9kZSwgY3Vyc29yUG9zaXRpb24gKyBvZmZzZXQsIGNoYXJhY3RlckNvdW50
KTsKICAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQpAQCAtNTQ3Niw2ICs1NDc3LDcgQEAgdm9pZCBX
ZWJQYWdlOjpkZWxldGVTdXJyb3VuZGluZyhpbnQ2NF90IG9mZnNldCwgdW5zaWduZWQgY2hhcmFj
dGVyQ291bnQpCiAgICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNo
YW5nZXMoZmFsc2UpOwogICAgIHNlbmRFZGl0b3JTdGF0ZVVwZGF0ZSgpOwogfQorCiAjZW5kaWYK
IAogdm9pZCBXZWJQYWdlOjpkaWRBcHBseVN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZTc0NTc2M2FmMTBmZmU1
OThiN2ZhZWJhNDEwNzI5NWQ0MWYwM2RjZC4uZjk4NzE1MTMzY2Y5YjcyYWE1MzI5YWU4NDI1MDdm
NjA3NGRjZTllNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0KQEAgLTE5ODksMTMgKzE5ODksMTYgQEAgdm9pZCBXZWJQYWdlOjpz
dG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRTdG9yZSkKICAgICB9CiB9
CiAKLXN0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVz
VGV4dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG1hdGNo
VGV4dCwgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSkKK3N0YXRpYyBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG1hdGNoVGV4dCwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQogewotICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCisgICAgYXV0byBs
aXZlUmFuZ2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgIGlmICghbGl2ZVJhbmdlKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCksIHNlbGVjdGlvblJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVp
dmFsZW50KCkpOwotICAgIHVuc2lnbmVkIHRhcmdldE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgocmFuZ2UucHRyKCksIHRydWUpOwotICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWlu
VGV4dCgqc2VsZWN0aW9uUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOworICAg
IFNpbXBsZVJhbmdlIHJhbmdlIHsgKmxpdmVSYW5nZSB9OworICAgIGF1dG8gYm91bmRhcnlQb2lu
dCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIWJvdW5kYXJ5UG9pbnQp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxh
aW5UZXh0KHJhbmdlLCBtYXRjaFRleHQsIHsgfSwgY2hhcmFjdGVyQ291bnQoeyByYW5nZS5zdGFy
dCwgKmJvdW5kYXJ5UG9pbnQgfSwgdHJ1ZSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0
ZXh0LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC0yMDIyLDcgKzIwMjUsNyBAQCB2b2lkIFdl
YlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwg
Y29uc3QgU3RyaW5nJiB0ZQogCiAgICAgaWYgKHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2UucHRy
KCkpICE9IHRleHQpIHsKICAgICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBmb3IgYSByYW5nZSB3aGlj
aCBpcyB0aGUgY2xvc2VzdCB0byB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBzZWxlY3Rpb24gcmFu
Z2UgdGhhdCBtYXRjaGVzIHRoZSBwYXNzZWQgaW4gdGV4dC4KLSAgICAgICAgaWYgKGF1dG8gd29y
ZFJhbmdlID0gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChzdGFydFBvc2l0aW9uLCB0ZXh0
LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8gd29y
ZFJhbmdlID0gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChzdGFydFBvc2l0aW9uLCB0ZXh0
LCBzZWxlY3Rpb24pKSB7CiAgICAgICAgICAgICBpZiAoIXdvcmRSYW5nZS0+Y29sbGFwc2VkKCkp
CiAgICAgICAgICAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoKndvcmRSYW5nZSk7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KaW5kZXggM2EwZGM0NTIwMTc2YzRjYjM5ZDE4Y2Q1MTAyMmEwNGViMDdjZDc4
Mi4uMmM1ODk2ZGY3ODU3NTg2NjEwZDJhM2E2NTU2ZDU4MTljZjZmZmU5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE0
MCwxOSArMTQwLDIyIEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYg
ZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQsIEluY2x1ZGVQb3N0CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHBvc3RMYXlvdXREYXRhID0gcmVzdWx0LnBvc3RM
YXlvdXREYXRhKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBz
ZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFy
dCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIFZpc2libGVQb3NpdGlv
biBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgIGF1dG8g
c2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0
KTsKKyAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbi52
aXNpYmxlRW5kKCkpOworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2lu
dChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7CisKKyAgICBpZiAoIXNlbGVjdGlv
blN0YXJ0Qm91bmRhcnkgfHwgIXNlbGVjdGlvbkVuZCB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAg
ICAgIHJldHVybjsKIAotICAgIHBvc3RMYXlvdXREYXRhLmNhbmRpZGF0ZVJlcXVlc3RTdGFydFBv
c2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRU
ZXh0TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBo
U3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpIC0gcG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVx
dWVzdFN0YXJ0UG9zaXRpb247CisgICAgcG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVxdWVzdFN0
YXJ0UG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlv
blN0YXJ0Qm91bmRhcnkgfSk7CisgICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3Ro
ID0gY2hhcmFjdGVyQ291bnQoeyAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSwgKnNlbGVjdGlvbkVu
ZCB9KTsKICAgICBwb3N0TGF5b3V0RGF0YS5wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVx
dWVzdCA9IHBsYWluVGV4dChmcmFtZS5lZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVS
ZXF1ZXN0KCkuZ2V0KCkpOwogICAgIHBvc3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRpZGF0ZVJl
cXVlc3QgPSBmcmFtZS5lZGl0b3IoKS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbQppbmRleCA3YzUwNmZjNmE3YTMxYmYzNzdjYTY1ZGM2NTEwNDRmNDFjZjlk
ZjEwLi5jYTQ3OTMxMDU0YjgwMjYyNjg3M2UzZjUzZmI1ZWUzMDU0ZTk4NTEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lm1tCkBAIC0xMDMxLDE2ICsxMDMxLDE5IEBAIHN0YXRpYyBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiBjb3JlKE5TQXJyYXkgKmluY29taW5nUmVzdWx0cywgT3B0aW9uU2V0PFRleHRD
CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKLXN0YXRpYyBpbnQgaW5zZXJ0aW9uUG9pbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9u
KQorc3RhdGljIE5TVUludGVnZXIgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
blN0YXJ0KTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7CisgICAgYXV0byBzZWxlY3Rp
b25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0
YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0
byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2Vs
ZWN0aW9uU3RhcnQpKTsKKyAgICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfHwgIXBhcmFn
cmFwaFN0YXJ0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQo
eyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IH0pOwogfQogCiBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY29yZUNo
ZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7
Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Q
b2ludEtleSA6ICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Q
b2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSB9OworICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiBA
KGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpIH07
CiAgICAgcmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGNo
ZWNrU3RyaW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCkgcmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBlczoobnNUZXh0Q2hlY2tpbmdU
eXBlcyhjb3JlQ2hlY2tpbmdUeXBlcykgfCBOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSkg
b3B0aW9uczpvcHRpb25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1l
bnRUYWcoKSBvcnRob2dyYXBoeTpOVUxMIHdvcmRDb3VudDpOVUxMXSwgY29yZUNoZWNraW5nVHlw
ZXMpOwogfQogCkBAIC0xMDgzLDcgKzEwODYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0
R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleAog
ICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9IG5pbDsKICAgICBOU09ydGhvZ3JhcGh5KiBvcnRob2dy
YXBoeSA9IG5pbDsKICAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tl
ciBzaGFyZWRTcGVsbENoZWNrZXJdOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5T
VGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNp
Z25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2Vs
ZWN0aW9uKV0gfTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2lu
Z0luc2VydGlvblBvaW50S2V5IDogQChpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9u
KGN1cnJlbnRTZWxlY3Rpb24pKSB9OwogICAgIGlmIChjb250ZXh0Lmxlbmd0aCgpKSB7CiAgICAg
ICAgIFtjaGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29u
dGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0aW9u
czpvcHRpb25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KSBvcnRob2dyYXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOwogICAgICAgICBsYW5ndWFn
ZSA9IFtjaGVja2VyIGxhbmd1YWdlRm9yV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQu
bGVuZ3RoKCkpIGluU3RyaW5nOmNvbnRleHQgb3J0aG9ncmFwaHk6b3J0aG9ncmFwaHldOwpAQCAt
MTExNiwyNCArMTExOSwyMCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENhbmRpZGF0
ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZQogICAgIGlmICghW21f
d2ViVmlldyBzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlc10pCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoIXNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0g
Y29yZShbbV93ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisKKyAgICBhdXRvKiBmcmFt
ZSA9IGNvcmUoW21fd2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbGFzdFNlbGVjdGlvbkZvclJlcXVlc3RlZENh
bmRpZGF0ZXMgPSBzZWxlY3Rpb247CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3Rh
cnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVj
dGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBh
cmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7
CisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAg
ICBhdXRvIHNlbGVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBjaGFyYWN0ZXJDb3VudCh7
ICptYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSksICpt
YWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7CisgICAgYXV0byBzZWxlY3Rpb25M
ZW5ndGggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFy
dCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSB9KTsKIAotICAg
IGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCht
YWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50
IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwotICAgIG1fcmFuZ2VGb3JD
YW5kaWRhdGVzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9T
ZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICBtX3JhbmdlRm9yQ2Fu
ZGlkYXRlcyA9IE5TTWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIHNl
bGVjdGlvbkxlbmd0aCk7CiAgICAgbV9wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVxdWVz
dCA9IHBsYWluVGV4dChmcmFtZS0+ZWRpdG9yKCkuY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVx
dWVzdCgpLmdldCgpKTsKIAogICAgIE5TVGV4dENoZWNraW5nVHlwZXMgY2hlY2tpbmdUeXBlcyA9
IE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgTlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1l
bnQgfCBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggYmMzYmViZGYyNjJmYTRlY2ZiMDE4NzhiM2My
YjBjNTVjM2VhOTAxNS4uZTRjNmFhMDA1YjlmOWQ4OTlmODE2YTNhZGMxNDlmNTE0ZmIxYTM0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC04MzUs
MjQgKzgzNSwxOSBAQCAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5n
ZTooTlNSYW5nZSluc3JhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOgogICAgICAgICAvLyBUaGF0IGZp
dHMgd2l0aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNvbnRleHQuCiAgICAgICAgIGF1dG8q
IGVsZW1lbnQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChl
bGVtZW50LCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7CiAgICAgfQogCiAgICAg
QVNTRVJUKHJhbmdlSXNSZWxhdGl2ZVRvID09IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpQYXJhZ3Jh
cGgpOwogCi0gICAgY29uc3QgYXV0byYgc2VsZWN0aW9uID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBzZWxl
Y3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxl
Y3RlZFJhbmdlKQorICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChz
dGFydE9mUGFyYWdyYXBoKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpKSk7CisgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhTdGFydC0+Y29u
dGFpbmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKSksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwotICAgIGlmICghcGFy
YWdyYXBoUmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgcm9vdE5v
ZGUgPSBwYXJhZ3JhcGhSYW5nZS5nZXQoKS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5y
b290Tm9kZSgpOwotICAgIGludCBwYXJhZ3JhcGhTdGFydEluZGV4ID0gV2ViQ29yZTo6VGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3Vt
ZW50KCksICZyb290Tm9kZSwgMCwgJnBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBw
YXJhZ3JhcGhSYW5nZS0+c3RhcnRPZmZzZXQoKSkucHRyKCkpOwotICAgIHJldHVybiBXZWJDb3Jl
OjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFy
YWdyYXBoU3RhcnRJbmRleCArIHN0YXRpY19jYXN0PGludD4obnNyYW5nZS5sb2NhdGlvbiksIG5z
cmFuZ2UubGVuZ3RoKTsKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0SW5kZXggPSBXZWJDb3JlOjpj
aGFyYWN0ZXJDb3VudCh7IHsgcm9vdE5vZGUsIDAgfSwgKnBhcmFncmFwaFN0YXJ0IH0pOworICAg
IHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3Ro
KCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCArIG5zcmFuZ2UubG9jYXRpb24sIG5zcmFu
Z2UubGVuZ3RoKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdl
OihOU1JhbmdlKW5zcmFuZ2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393931</attachid>
            <date>2020-03-18 18:31:03 -0700</date>
            <delta_ts>2020-03-21 14:47:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209207-20200318183102.patch</filename>
            <type>text/plain</type>
            <size>86139</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjEzMzhlMDk3YTUwZTdj
YzFhMTdhMGZhMWZhYmVkZjVkNDJiYWZhNC4uZGRjZmIzZDNkNzJhODIwNDAxODhkMmEyZmM2ZmNh
NmExNjkyZTFjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDIwLTAzLTE3ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVuYW1lZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoIHRvIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJh
bmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChX
ZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZl
cnRUb05TUmFuZ2U6XSk6IERpdHRvLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IEV4
cG9ydCBhbm90aGVyIGNvbnN0cnVjdG9yLgorCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSk6CisgICAgICAgIFVzZSBjaGFy
YWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUpOiBEaXR0
by4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6IERpdHRvLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbmRleEZv
clZpc2libGVQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6cmFu
Z2VMZW5ndGggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1Bh
cmFncmFwaDo6b2Zmc2V0VG8gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
aGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdTdGFydCBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0VuZCBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0xlbmd0
aCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBo
OjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRG
aXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCBjb25zdCk6IERpdHRvLgorCisgICAg
ICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0
ZXJDb3VudCk6IExpa2UgdGhlIGJhb3ZlIGJ1dCB0aGUgYXJndW1lbnQgaXMgU2ltcGxlUmFuZ2UK
KyAgICAgICAgYW5kIHJldHVybiBpcyBDaGFyYWN0ZXJDb3VudC4gRXZlbiB0aG91Z2ggZWFjaCBp
bmRpdmlkdWFsIG5vZGUgaXMgbGltaXRlZAorICAgICAgICB0byAzMi1iaXQgc2l6ZSwgcmFuZ2Vz
IGNvdmVyaW5nIG11bHRpcGxlIG5vZGVzIGNvdWxkIGhhdmUgYSBjb3VudCBvZgorICAgICAgICBj
aGFyYWN0ZXJzIHRoYXQgZXhjZWVkcyAzMiBiaXRzLCBzbyBDaGFyYWN0ZXJDb3VudCBpcyBzaXpl
X3QuCisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3Ro
RnJvbVJhbmdlKTogVXNlIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogZWRpdGluZy9UZXh0
SXRlcmF0b3IuaDogQWRkZWQgY2hhcmFjdGVyQ291bnQgZnVuY3Rpb24sCisgICAgICAgIENoYXJh
Y3RlckNvdW50IGFuZCBDaGFyYWN0ZXJSYW5nZSB0eXBlcy4gUmVtb3ZlZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoLgorICAgICAgICBBZGRlZCBGSVhNRSBjb21tZW50cyBhYm91dCB0aGUgbmV4
dCBzdGVwcy4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VCb3VuZGFyeVBvaW50KTogQWRkZWQuCisgICAgICAgICogZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaDogQWRkZWQgbWFrZUJvdW5kYXJ5UG9pbnQuIEFsc28gcmVtb3Zl
ZAorICAgICAgICBleHRyYW5lb3VzIGZvcndhcmQgZGVjbGFyYXRpb25zIGFuZCBtb3ZlZCBzb21l
IGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhlCisgICAgICAgIGNsYXNzIGRlZmluaXRpb24uCisK
KyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
aXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIHB0cmRpZmZf
dC4KKyAgICAgICAgVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJs
ZVVuaXRzLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVjdEl0ZW1BdFBvc2l0
aW9uV2l0aFJhbmdlKTogVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAqIGVkaXRpbmcvY29j
b2EvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29r
dXA6OnJhbmdlRm9yU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9u
YXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRp
bmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0
aW9uQ29tbWFuZElPUzo6ZG9BcHBseSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXBMZWdhY3kubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0RGlzdGFuY2UpOiBEaXR0
by4KKwogMjAyMC0wMy0xOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtNdWx0aUNvbHVtbl0gSWdub3JlIHNwYW5uZXIgYm94ZXMgaW5zaWRlIDxsZWdlbmQ+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDlhY2M5ZDJkMGM2OTVkYjgwOTc5YmEzMDk2Y2M1OTdiOTJjNjIwMDUuLmI5Yjk4
ODY4ZDU4ZWM0NzQzOTZiZTQxOTdlNmJiMjhhMTZmNzA5YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMjAtMDMtMTcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIENoYW5nZSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoIHRvIG5vdCByZXF1aXJlIGEgbGl2
ZSByYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA5MjA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTaGFyZWQvRWRpdGluZ1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RWRpdGluZ1Jhbmdl
Ojp0b1JhbmdlKTogVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6aW5zZXJ0
aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8KKyAg
ICAgICAgQ2hhcmFjdGVyQ291bnQgYW5kIHVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50OjpzdXBwb3J0c0dsb2JhbFNlbGVjdGlvbik6IFR3ZWFrZWQg
I2lmLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6dGFyZ2V0RnJhbWVGb3JFZGl0aW5nKTogVXNlIGNoYXJhY3RlckNvdW50LgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdl
YktpdDo6cmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dCk6IERpdHRvLgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZSBjb25zdCk6IERpdHRvLgorCiAyMDIwLTAzLTE4ICBK
b2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcigpIHNo
b3VsZCBjYWxsIGl0cyBlcGhlbWVyYWwgY291bnRlcnBhcnQgd2hlbiBhcHByb3ByaWF0ZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDQ3ZWJhODM0ODJkYzM4OTU4OTM0YWU2MDczODhl
MjI0MzMyNjY4ZTkuLjQ3MmUwZjc0NGZmZGQyZmMzN2M1MDdmYWI5OTkxMDY1ZmRlMjRlZTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wMy0xNyAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVpcmUgYSBsaXZlIHJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyMDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxl
Y3Rpb24pOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OnJl
cXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9X
ZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RPTVJhbmdlOnJhbmdl
SXNSZWxhdGl2ZVRvOl0pOiBEaXR0by4KKwogMjAyMC0wMy0xOCAgeW91ZW5uIGZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgRnJhbWVMb2FkZXIgc2hvdWxkIG93biBpdHMgRnJh
bWVMb2FkZXJDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCmluZGV4IGM2ODg1NzljN2I4Y2Y0NzI3MzllZjQ0MWQ5Njg2NjhmYjA5ODVjOTgu
LjYwMDgxNTVkZWMxYjM1NmUzZWYwZjc0MjI5NTdiNTMyZTI3MjYzM2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTkzOCwxOCArMTkz
OCwxNiBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VNYXRjaGVz
VGV4dE5lYXJSYW5nZShjb25zdCBTaW1wbGVSYW5nZQogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgg
PSBtYXRjaFRleHQubGVuZ3RoKCk7CiAgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBv
c2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihv
cmlnaW5hbFJhbmdlLnN0YXJ0KSwgLXRleHRMZW5ndGgpOwogICAgIGF1dG8gZW5kUG9zaXRpb24g
PSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZzZXQoY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpLCAyICogdGV4dExlbmd0aCk7Ci0KICAgICBp
ZiAoc3RhcnRQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShvcmlnaW5hbFJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIo
KSk7CiAgICAgaWYgKGVuZFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBlbmRQb3NpdGlvbiA9
IGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUob3JpZ2luYWxSYW5nZS5lbmQuY29udGFpbmVyLnB0
cigpKTsKIAotICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQs
IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKLSAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxh
cHNlZCgpKQorICAgIFNpbXBsZVJhbmdlIHNlYXJjaFJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH07CisgICAg
aWYgKHNlYXJjaFJhbmdlLmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgc3RhcnRQb3Np
dGlvbiwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpKTsK
LSAgICB1bnNpZ25lZCB0YXJnZXRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJh
bmdlLnB0cigpLCB0cnVlKTsKKyAgICBhdXRvIHRhcmdldE9mZnNldCA9IGNoYXJhY3RlckNvdW50
KHsgc2VhcmNoUmFuZ2Uuc3RhcnQsIG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwgdHJ1ZSk7CiAgICAg
cmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0KHNlYXJjaFJhbmdlLCBtYXRjaFRleHQsIHsgfSwg
dGFyZ2V0T2Zmc2V0KTsKIH0KIApAQCAtMTk5MiwxMiArMTk5MCwxMSBAQCBzdGF0aWMgYm9vbCBj
aGFyYWN0ZXJPZmZzZXRzSW5PcmRlcihjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9m
ZnNldDEsIGNvbgogc3RhdGljIE5vZGUqIHJlc2V0Tm9kZUFuZE9mZnNldEZvclJlcGxhY2VkTm9k
ZShOb2RlKiByZXBsYWNlZE5vZGUsIGludCYgb2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpCiB7
CiAgICAgLy8gVXNlIHRoaXMgZnVuY3Rpb24gdG8gaW5jbHVkZSB0aGUgcmVwbGFjZWQgbm9kZSBp
dHNlbGYgaW4gdGhlIHJhbmdlIHdlIGFyZSBjcmVhdGluZy4KLSAgICBpZiAoIXJlcGxhY2VkTm9k
ZSkKKyAgICBhdXRvIG5vZGVSYW5nZSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRl
bnRzKHJlcGxhY2VkTm9kZSk7CisgICAgaWYgKCFub2RlUmFuZ2UpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gbm9kZVJhbmdlID0gQVhPYmplY3RDYWNo
ZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMocmVwbGFjZWROb2RlKTsKLSAgICBpbnQgbm9kZUxlbmd0
aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobm9kZVJhbmdlLmdldCgpKTsKLSAgICBvZmZz
ZXQgPSBjaGFyYWN0ZXJDb3VudCA8PSBub2RlTGVuZ3RoID8gcmVwbGFjZWROb2RlLT5jb21wdXRl
Tm9kZUluZGV4KCkgOiByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7CisgICAg
Ym9vbCBpc0luTm9kZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFyYWN0ZXJDb3VudCkgPD0g
V2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQoKm5vZGVSYW5nZSk7CisgICAgb2Zmc2V0ID0gcmVwbGFj
ZWROb2RlLT5jb21wdXRlTm9kZUluZGV4KCkgKyAoaXNJbk5vZGUgPyAwIDogMSk7CiAgICAgcmV0
dXJuIHJlcGxhY2VkTm9kZS0+cGFyZW50Tm9kZSgpOwogfQogCkBAIC0yNDEzLDE0ICsyNDEwLDE2
IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNv
bnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZz
ZXQoKTsKICAgICAKICAgICAvLyBXZSBkb24ndCBhbHdheXMgbW92ZSBvbmUgJ2NoYXJhY3Rlcicg
YXQgYSB0aW1lIHNpbmNlIHRoZXJlIG1pZ2h0IGJlIGNvbXBvc2VkIGNoYXJhY3RlcnMuCi0gICAg
aW50IG5leHRPZmZzZXQgPSBQb3NpdGlvbjo6dW5jaGVja2VkTmV4dE9mZnNldChjaGFyYWN0ZXJP
ZmZzZXQubm9kZSwgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCk7CisgICAgdW5zaWduZWQgbmV4dE9m
ZnNldCA9IFBvc2l0aW9uOjp1bmNoZWNrZWROZXh0T2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2Rl
LCBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0KTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dCA9IGNo
YXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCBuZXh0
T2Zmc2V0KTsKICAgICAKICAgICAvLyBUbyBiZSBjb25zaXN0ZW50IHdpdGggVmlzaWJsZVBvc2l0
aW9uLCB3ZSBzaG91bGQgY29uc2lkZXIgdGhlIGNhc2UgdGhhdCBjdXJyZW50IG5vZGUgZW5kIHRv
IG5leHQgbm9kZSBzdGFydCBjb3VudHMgMSBvZmZzZXQuCiAgICAgaWYgKCFpZ25vcmVOZXh0Tm9k
ZVN0YXJ0ICYmICFuZXh0LmlzTnVsbCgpICYmICFpc1JlcGxhY2VkTm9kZU9yQlIobmV4dC5ub2Rl
KSAmJiBuZXh0Lm5vZGUgIT0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUpIHsKLSAgICAgICAgaW50IGxl
bmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0
ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgbmV4dCkuZ2V0KCkpOwotICAgICAgICBpZiAobGVu
Z3RoID4gbmV4dE9mZnNldCAtIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQpCi0gICAgICAgICAgICBu
ZXh0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqbmV4dC5ub2RlLCAwLCBUcmF2
ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcmFuZ2VG
b3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgbmV4dCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlKTsKKyAgICAgICAg
ICAgIGlmIChsZW5ndGggPiBuZXh0T2Zmc2V0IC0gY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCkKKyAg
ICAgICAgICAgICAgICBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqbmV4
dC5ub2RlLCAwLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCk7CisgICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgcmV0dXJuIG5leHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5j
cHAKaW5kZXggYjI3MTVjN2M1M2NhZTlkMDRhZjNlNGMwZjkzYWY5NzVmNjNkYjUyNS4uMTU0ZGMz
YzAyNzc2ZGE0ODgzNDdjMmJhMDFkZmY1ODI1NmI4NWEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUZXh0LmNwcApAQCAtNDEwLDkgKzQxMCw5IEBAIHN0YXRpYyB2b2lkIGdldFNlbGVj
dGlvbk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlz
aWJsCiAKICAgICAvLyBTZXQgdmFsdWVzIGZvciBzdGFydCBvZmZzZXRzIGFuZCBjYWxjdWxhdGUg
aW5pdGlhbCByYW5nZSBsZW5ndGguCiAgICAgLy8gVGhlc2UgdmFsdWVzIG1pZ2h0IGJlIGFkanVz
dGVkIGxhdGVyIHRvIGNvdmVyIHNwZWNpYWwgY2FzZXMuCi0gICAgc3RhcnRPZmZzZXQgPSB3ZWJD
b3JlT2Zmc2V0VG9BdGtPZmZzZXQoY29yZU9iamVjdCwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChyYW5nZUluUGFyZW50LnB0cigpLCB0cnVlKSk7CisgICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3Jl
T2Zmc2V0VG9BdGtPZmZzZXQoY29yZU9iamVjdCwgY2hhcmFjdGVyQ291bnQocmFuZ2VJblBhcmVu
dC5nZXQoKSwgdHJ1ZSkpOwogICAgIGF1dG8gbm9kZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2Rl
LT5kb2N1bWVudCgpLCBub2RlUmFuZ2VTdGFydCwgbm9kZVJhbmdlRW5kKTsKLSAgICBpbnQgcmFu
Z2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5nZS5wdHIoKSwgdHJ1
ZSk7CisgICAgaW50IHJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobm9kZVJhbmdlLmdldCgp
LCB0cnVlKTsKIAogICAgIC8vIFNwZWNpYWwgY2FzZXMgdGhhdCBhcmUgb25seSByZWxldmFudCB3
aGVuIHdvcmtpbmcgd2l0aCAqX0VORCBib3VuZGFyaWVzLgogICAgIGlmIChzZWxlY3Rpb24uYWZm
aW5pdHkoKSA9PSBVUFNUUkVBTSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCmluZGV4IDU2MzkyYzBiZDgz
ZDFhMmE3Y2I3NmE3NTRiOWViODgzZjIwY2ZmNWUuLjM5NGQ0ODYzZjAzYTJmOGE1NDMxNGZhYjA3
NzkyYjZhZTJmMDFmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKQEAgLTI0NywxMCArMjQ3LDEwIEBA
IEFYQ29yZU9iamVjdCogb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFYQ29y
ZU9iamVjdCogcmVmZXJlbmNlT2JqZWN0CiAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgZWxzZSBp
ZiAoIWlzU3RhcnRPZkxpbmUoZW5kUG9zaXRpb24pKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24ucHJldmlvdXMoKSk7
Ci0gICAgICAgIG9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCks
IHRydWUpICsgMTsKKyAgICAgICAgb2Zmc2V0ID0gKHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJh
bmdlLCB0cnVlKSA6IDApICsgMTsKICAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKLSAgICAgICAg
b2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSk7Cisg
ICAgICAgIG9mZnNldCA9IHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCB0cnVlKSA6IDA7
CiAgICAgfQogCiAgICAgcmV0dXJuIGZpcnN0VW5pZ25vcmVkUGFyZW50OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCAxMDFlYjJkODI3OTc5NGRhOTEzNGQyODEx
ODBkZWE1Y2FiODBkYzVkLi4xZmFlNWFmYzliOTI2MWFkN2FmNWExOGE1M2ZmZjM0NDhhYzZkMjY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMjMxMCwzMCAr
MjMxMCwzMCBAQCAtIChOU0FycmF5ICopYXJyYXlPZlRleHRGb3JUZXh0TWFya2VyczooTlNBcnJh
eSAqKW1hcmtlcnMgYXR0cmlidXRlZDooQk9PTClhdHRyaQogICAgIHJldHVybiBbYXJyYXkgYXV0
b3JlbGVhc2VdOwogfQogCi0tIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSAqKXJh
bmdlCistIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSAqKWxpdmVSYW5nZQogewot
ICAgIGlmICghcmFuZ2UpCisgICAgaWYgKCFsaXZlUmFuZ2UpCiAgICAgICAgIHJldHVybiBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpOwotICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3Qg
PSBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxl
RWxlbWVudCgpOwotICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlv
blJvb3QgOiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgU2ltcGxlUmFuZ2UgcmFu
Z2UgeyAqbGl2ZVJhbmdlIH07CisKKyAgICBhdXRvJiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0LmRv
Y3VtZW50KCk7CisgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAg
IGF1dG8qIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGF1dG8qIHNjb3BlID0gcm9vdEVkaXRhYmxl
RWxlbWVudCA/IHJvb3RFZGl0YWJsZUVsZW1lbnQgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQo
KTsKKyAgICBpZiAoIXNjb3BlKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7CiAKICAgICAvLyBNb3VzZSBldmVudHMgbWF5IGNhdXNlIFRTTSB0byBhdHRlbXB0IHRv
IGNyZWF0ZSBhbiBOU1JhbmdlIGZvciBhIHBvcnRpb24gb2YgdGhlIHZpZXcKLSAgICAvLyB0aGF0
IGlzIG5vdCBpbnNpZGUgdGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9uLiAgVGhlc2UgY2hlY2tz
IGVuc3VyZSB3ZSBkb24ndCBwcm9kdWNlCisgICAgLy8gdGhhdCBpcyBub3QgaW5zaWRlIHRoZSBj
dXJyZW50IGVkaXRhYmxlIHJlZ2lvbi4gVGhlc2UgY2hlY2tzIGVuc3VyZSB3ZSBkb24ndCBwcm9k
dWNlCiAgICAgLy8gcG90ZW50aWFsbHkgaW52YWxpZCBkYXRhIHdoZW4gcmVzcG9uZGluZyB0byBz
dWNoIHJlcXVlc3RzLgotICAgIGlmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gc2NvcGUg
JiYgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKLSAgICAg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgIGlmICgmcmFuZ2UtPmVu
ZENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKCkuaXNEZXNjZW5k
YW50T2Yoc2NvcGUpKQorICAgIGlmICghc2NvcGUtPmNvbnRhaW5zKHJhbmdlLnN0YXJ0LmNvbnRh
aW5lci5wdHIoKSkgfHwgIXNjb3BlLT5jb250YWlucyhyYW5nZS5lbmQuY29udGFpbmVyLnB0cigp
KSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCi0gICAgYXV0
byB0ZXN0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwg
JnJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0gICAgQVNT
RVJUKCZ0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGludCBzdGFy
dFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UucHRyKCkpOwot
ICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9m
ZnNldCgpKTsKLSAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29w
ZSk7Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0
UmFuZ2UucHRyKCkpOwotICAgIHJldHVybiBOU01ha2VSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOworICAgIHJldHVybiBOU01ha2VSYW5nZShjaGFyYWN0
ZXJDb3VudCh7IHsgKnNjb3BlLCAwIH0sIHJhbmdlLnN0YXJ0IH0pLCBjaGFyYWN0ZXJDb3VudChy
YW5nZSkpOwogfQogCiAtIChSZWZQdHI8UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5n
ZSluc3JhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDEyN2YyZjE4OTQ2NGMxMGM0
OWE1NTQ0ODY2ZWFjNDk0ZDRlODhiMjMuLmFjZDk4NTVhODkxOWMzNzZlMTU3ZDFjZWQ5YzVkZWVk
N2ExOTU3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC00Miw3ICs0Miw3IEBAIHN0
cnVjdCBTaW1wbGVSYW5nZSB7CiAKICAgICBib29sIGNvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXJ0ID09IGVuZDsgfQogCi0gICAgU2ltcGxlUmFuZ2UoY29uc3QgQm91bmRhcnlQb2ludCYs
IGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZShj
b25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIFNpbXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQmJiwgQm91bmRhcnlQb2ludCYmKTsKIAog
ICAgIC8vIENvbnZlbmllbmNlIG92ZXJsb2FkcyB0byBoZWxwIHdpdGggdHJhbnNpdGlvbiBmcm9t
IHVzaW5nIGEgbG90IG9mIGxpdmUgcmFuZ2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggZWMyMjE2ZDdhZDlmMmMz
OTEwODZlOGVlMDcxNTdkMmVjYmEwOTVkMi4uYjdhMDg4MWU2ZjRjZTM2ZjY1OTU1NmZjNGFiY2Ez
NjE2ZDExM2EzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC01ODAsNTIgKzU4MCwzOCBAQCBTdHJpbmcgQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRp
dmVUZXh0KEFsdAogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJu
YXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgYWx0ZXJu
YXRpdmUsIEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUeXBlLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzVG9BZGQpCiB7Ci0gICAgYXV0byBw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gcmFuZ2UuY2xvbmVSYW5nZSgpOwot
Ci0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5wdHIoKSwg
c3RhcnRPZlBhcmFncmFwaChyYW5nZS5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQocGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgocmFu
Z2UuZW5kUG9zaXRpb24oKSkpOwotCiAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBh
dCByYW5nZSByYW5nZVdpdGhBbHRlcm5hdGl2ZSwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0
aGF0IHJhbmdlLgotICAgIC8vIEhvd2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxh
Y2UsIHRoZSB2YWx1ZSBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZSBpcyBub3QgdmFsaWQgYW55bW9y
ZS4KLSAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVl
ZCB0byBzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUKLSAg
ICAvLyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFy
YWdyYXBoLiBXZSB1c2UgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKLSAgICAvLyB0
byBzdG9yZSB0aGlzIHZhbHVlLiBJbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5l
ZWQgdG8gZmlyc3QgY3JlYXRlIGEgcmFuZ2UKLSAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBz
dGFydCBvZiBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlV2l0aEFsdGVy
bmF0aXZlLgotICAgIGF1dG8gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24tPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+
c3RhcnRQb3NpdGlvbigpKTsKLQotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0
aEFsdGVybmF0aXZlID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOwotICAgIGlmICghc3RhcnRQb3Np
dGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgYXV0byBzZXRFbmRSZXN1bHQgPSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFn
cmFwaEFzUmFuZ2UtPnNldEVuZCgqc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUu
Y29udGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21w
dXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotICAgIGlmIChzZXRFbmRSZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0
IHRoZSByZXBsYWNlbWVudCxzdG9yZSB0aGUgc3RhcnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhl
IHN0YXJ0IHBvc2l0aW9uCisgICAgLy8gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLgogCiAg
ICAgLy8gVGFrZSBub3RlIG9mIHRoZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0
IHdlIGNhbiBhZGQgbWFya2VyIGFmdGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAg
IGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLnB0cigpKTsK
KyAgICBhdXRvIGNvcnJlY3Rpb25TdGFydFBvc2l0aW9uID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigp
OworICAgIGF1dG8gY29ycmVjdGlvblN0YXJ0IHsgbWFrZUJvdW5kYXJ5UG9pbnQoY29ycmVjdGlv
blN0YXJ0UG9zaXRpb24pIH07CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCB7IG1ha2VCb3VuZGFy
eVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoY29ycmVjdGlvblN0YXJ0UG9zaXRpb24pKSB9OworICAg
IGlmICghY29ycmVjdGlvblN0YXJ0IHx8ICFwYXJhZ3JhcGhTdGFydCkKKyAgICAgICAgcmV0dXJu
OworICAgIGF1dG8gdHJlZVNjb3BlUm9vdCA9IG1ha2VSZWYoY29ycmVjdGlvblN0YXJ0LT5jb250
YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpOworICAgIEJvdW5kYXJ5UG9pbnQgdHJlZVNj
b3BlU3RhcnQgeyB0cmVlU2NvcGVSb290LmdldCgpLCAwIH07CisgICAgYXV0byBjb3JyZWN0aW9u
T2Zmc2V0SW5QYXJhZ3JhcGggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKmNv
cnJlY3Rpb25TdGFydCB9KTsKKyAgICBhdXRvIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlID0g
Y2hhcmFjdGVyQ291bnQoeyB0cmVlU2NvcGVTdGFydCwgKnBhcmFncmFwaFN0YXJ0IH0pOwogCi0g
ICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1h
eSB3YW50IHRvIGtlZXAgdGhlIG9yaWdpbmFsIHJhbmdlIGFyb3VuZC4KLSAgICBhdXRvIHJhbmdl
V2l0aEFsdGVybmF0aXZlID0gcmFuZ2UuY2xvbmVSYW5nZSgpOworICAgIC8vIENsb25lIHRoZSBy
YW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiBtYXkga2VlcCBhIHJlZmVybmVjZSB0byB0aGUgb3Jp
Z2luYWwgcmFuZ2UgYW5kIG1vZGlmeSBpdC4KKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
OjpjcmVhdGUocmFuZ2UuY2xvbmVSYW5nZSgpLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CiAKLSAg
ICBDb250YWluZXJOb2RlJiByb290Tm9kZSA9IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBpbnQg
cGFyYWdyYXBoU3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoUmFuZ2U6OmNy
ZWF0ZShyb290Tm9kZS5kb2N1bWVudCgpLCAmcm9vdE5vZGUsIDAsICZwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uLT5zdGFydE9mZnNldCgpKS5wdHIoKSk7Ci0gICAgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBhbHRlcm5hdGl2ZSkt
PmFwcGx5KCk7CiAgICAgLy8gUmVjYWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLCBzaW5jZSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00s
IHN1Y2ggdGhhdCB0aGUgb3JpZ2luYWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlv
biBpcyBubyBsb25nZXIgdmFsaWQuIFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKLSAg
ICBhdXRvIHVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0
YXJ0SW5kZXgsIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoICsgYWx0ZXJuYXRpdmUu
bGVuZ3RoKCkpOworICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHRyZWVTY29w
ZVJvb3QucHRyKCksIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlLCBjb3JyZWN0aW9uT2Zmc2V0
SW5QYXJhZ3JhcGggKyBhbHRlcm5hdGl2ZS5sZW5ndGgoKSk7CiAgICAgaWYgKCF1cGRhdGVkUGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuOwotCiAgICAg
c2V0RW5kKHVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAgIFJlZlB0cjxSYW5n
ZT4gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKnVwZGF0ZWRQYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBh
cmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOwotICAgIFN0cmluZyBuZXdUZXh0ID0gcGxh
aW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5n
ZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKnVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uLCBjb3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxl
bmd0aCgpKTsKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQu
Ci0gICAgaWYgKG5ld1RleHQgIT0gYWx0ZXJuYXRpdmUpCisgICAgaWYgKHBsYWluVGV4dChyZXBs
YWNlbWVudFJhbmdlLmdldCgpKSAhPSBhbHRlcm5hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKLQorICAgIGF1dG8mIG1hcmtl
cnMgPSByZXBsYWNlbWVudFJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpOwogICAgIGZv
ciAoYXV0byBtYXJrZXJUeXBlIDogbWFya2VyVHlwZXNUb0FkZCkKLSAgICAgICAgbWFya2Vycy5h
ZGRNYXJrZXIoKnJlcGxhY2VtZW50UmFuZ2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9u
Rm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsK
KyAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwg
bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlw
ZSwgbWFya2VyVHlwZSkpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggZmUwN2Y1NjE2MDk3MWIzMGNiODNlMTBiMzJjMjVk
NzA2ZDAxYmMwYi4uMDlhMzc0OWVhMmI3YzNlNDZmOWU5NmIzNDBjYmU5NGYxM2I5NDkxYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTIyMywx
OSArMjIzLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmRvQXBwbHkoKQogCiB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKIHsK
LSAgICAvLyB1cGRhdGUgZG9jdW1lbnQgbGF5b3V0IG9uY2UgYmVmb3JlIHJlbW92aW5nIHN0eWxl
cwotICAgIC8vIHNvIHRoYXQgd2UgYXZvaWQgdGhlIGV4cGVuc2Ugb2YgdXBkYXRpbmcgYmVmb3Jl
IGVhY2ggYW5kIGV2ZXJ5IGNhbGwKLSAgICAvLyB0byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlCisg
ICAgLy8gVXBkYXRlIGRvY3VtZW50IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMg
c28gdGhhdCB3ZSBhdm9pZCB0aGUgZXhwZW5zZSBvZgorICAgIC8vIHVwZGF0aW5nIGJlZm9yZSBl
YWNoIGFuZCBldmVyeSBjYWxsIHRvIGNoZWNrIGEgY29tcHV0ZWQgc3R5bGUuCiAgICAgZG9jdW1l
bnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIC8vIGdl
dCBwb3NpdGlvbnMgd2Ugd2FudCB0byB1c2UgZm9yIGFwcGx5aW5nIHN0eWxlCiAgICAgUG9zaXRp
b24gc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgUG9zaXRpb24gZW5kID0gZW5kUG9zaXRp
b24oKTsKLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhlbmQsIHN0YXJ0KSA8IDApIHsKLSAgICAg
ICAgUG9zaXRpb24gc3dhcCA9IHN0YXJ0OwotICAgICAgICBzdGFydCA9IGVuZDsKLSAgICAgICAg
ZW5kID0gc3dhcDsKLSAgICB9CisgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBzdGFydCkg
PCAwKQorICAgICAgICBzdGQ6OnN3YXAoc3RhcnQsIGVuZCk7CiAKICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVN0YXJ0KHN0YXJ0KTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChl
bmQpOwpAQCAtMjQ2LDE0ICsyNDEsMTggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlC
bG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiAgICAgLy8gU2F2ZSBhbmQgcmVzdG9yZSB0
aGUgc2VsZWN0aW9uIGVuZHBvaW50cyB1c2luZyB0aGVpciBpbmRpY2VzIGluIHRoZSBlZGl0YWJs
ZSByb290LCBzaW5jZQogICAgIC8vIGFkZEJsb2NrU3R5bGVJZk5lZWRlZCBtYXkgbW92ZVBhcmFn
cmFwaHMsIHdoaWNoIGNhbiByZW1vdmUgdGhlc2UgZW5kcG9pbnRzLgogICAgIC8vIENhbGN1bGF0
ZSBzdGFydCBhbmQgZW5kIGluZGljZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHRyZWUgdGhhdCB0
aGV5J3JlIGluLgotICAgIGF1dG8qIHNjb3BlID0gaGlnaGVzdEVkaXRhYmxlUm9vdCh2aXNpYmxl
U3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgYXV0byBzY29wZSA9IG1ha2VSZWZQdHIoaGln
aGVzdEVkaXRhYmxlUm9vdCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpOwogICAgIGlm
ICghc2NvcGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gc3RhcnRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHZpc2libGVT
dGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBh
dXRvIGVuZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5O
b2RlKHNjb3BlKSwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpKTsKLSAgICBpbnQgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgoc3RhcnRSYW5nZS5wdHIoKSwgdHJ1ZSk7Ci0gICAgaW50IGVuZEluZGV4ID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChlbmRSYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgQm91bmRhcnlQb2lu
dCBzY29wZVN0YXJ0IHsgKnNjb3BlLCAwIH07CisgICAgYXV0byBzdGFydEJvdW5kYXJ5UG9pbnQg
PSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgYXV0byBlbmRCb3VuZGFyeVBvaW50ID0gbWFrZUJv
dW5kYXJ5UG9pbnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpKTsKKyAgICBpZiAoIXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91bmRhcnlQ
b2ludCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzdGFydEluZGV4ID0gY2hhcmFjdGVy
Q291bnQoeyBzY29wZVN0YXJ0LCAqc3RhcnRCb3VuZGFyeVBvaW50IH0sIHRydWUpOworICAgIGF1
dG8gZW5kSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHNjb3BlU3RhcnQsICplbmRCb3VuZGFyeVBv
aW50IH0sIHRydWUpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0KHN0YXJ0
T2ZQYXJhZ3JhcGgodmlzaWJsZVN0YXJ0KSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJh
Z3JhcGhTdGFydChlbmRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdGFydCkubmV4dCgpKTsKQEAgLTI4
NSw4ICsyODQsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoRWRp
dGluZ1N0eWxlJiBzdHlsZSkKICAgICB9CiAgICAgCiAgICAgewotICAgICAgICBhdXRvIHN0YXJ0
UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBz
dGFydEluZGV4LCAwLCB0cnVlKTsKLSAgICAgICAgYXV0byBlbmRSYW5nZSA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUsIGVuZEluZGV4LCAwLCB0cnVlKTsK
KyAgICAgICAgYXV0byBzdGFydFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlv
bkFuZExlbmd0aChzY29wZS5nZXQoKSwgc3RhcnRJbmRleCwgMCwgdHJ1ZSk7CisgICAgICAgIGF1
dG8gZW5kUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNj
b3BlLmdldCgpLCBlbmRJbmRleCwgMCwgdHJ1ZSk7CiAgICAgICAgIGlmIChzdGFydFJhbmdlICYm
IGVuZFJhbmdlKQogICAgICAgICAgICAgdXBkYXRlU3RhcnRFbmQoc3RhcnRSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBlbmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDdkZGIwYWIy
NTIxOTQ5MzIwNTU4ZWQ0MTE4NGI1MTBjYTk2MGVlNTYuLjBlZjM5Mjc5ZTQ3MjA4NjUwOGJmZjU3
YTJiYmIzNjMxMGQ5ZTg2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCkBAIC0xNDE3LDcgKzE0MTcsNiBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQ
YXJhZ3JhcAogICAgIAogICAgIGludCBzdGFydEluZGV4ID0gLTE7CiAgICAgaW50IGVuZEluZGV4
ID0gLTE7Ci0gICAgaW50IGRlc3RpbmF0aW9uSW5kZXggPSAtMTsKICAgICBib29sIG9yaWdpbmFs
SXNEaXJlY3Rpb25hbCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKTsKICAgICBp
ZiAocHJlc2VydmVTZWxlY3Rpb24gJiYgIWVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKSB7CiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBlbmRpbmdTZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKTsKQEAgLTE0MzIsMTggKzE0MzEsMjIgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFy
YWdyYXAKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7CiAgICAgICAg
ICAgICBpZiAoc3RhcnRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIGF1dG8gc3RhcnRS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5k
ZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAg
ICAgICAgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5w
dHIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VC
b3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25T
dGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBo
U3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXgg
PSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0IH0sIHRy
dWUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBlbmRJbmRleCA9IDA7CiAgICAgICAg
ICAgICBpZiAoZW5kSW5QYXJhZ3JhcGgpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGVuZFJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIHZpc2libGVFbmQuZGVlcEVx
dWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAgICAg
ZW5kSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZFJhbmdlLnB0cigpLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IG1ha2VC
b3VuZGFyeVBvaW50KHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVj
dGlvbkVuZCkKKyAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7
ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvbkVuZCB9LCB0cnVlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVQYXJh
Z3JhcGggPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGlu
Z0JvdW5kYXJ5KTsKICAgICBWaXNpYmxlUG9zaXRpb24gYWZ0ZXJQYXJhZ3JhcGgoZW5kT2ZQYXJh
Z3JhcGhUb01vdmUubmV4dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkpOwogCkBAIC0xNDc4
LDkgKzE0ODEsOSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICAvLyBUaGUgbW92
ZWQgcGFyYWdyYXBoIHNob3VsZCBhc3N1bWUgdGhlIGJsb2NrIHN0eWxlIG9mIHRoZSBkZXN0aW5h
dGlvbi4KICAgICAgICAgc3R5bGVJbkVtcHR5UGFyYWdyYXBoLT5yZW1vdmVCbG9ja1Byb3BlcnRp
ZXMoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBh
ZGQgYSBuZXcgaW5zZXJ0IGFjdGlvbiAiV2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2Fs
bCBzaG91bGRJbnNlcnRGcmFnbWVudCBoZXJlLgotICAgIAorCiAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwogICAgIGZyYW1l
KCkuZWRpdG9yKCkuY2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlv
bigpKTsKICAgICBkZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwpA
QCAtMTUwOSw4ICsxNTEyLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFn
cmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICBpZiAoIWVk
aXRhYmxlUm9vdCkKICAgICAgICAgZWRpdGFibGVSb290ID0gJmRvY3VtZW50KCk7CiAKLSAgICBh
dXRvIHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBm
aXJzdFBvc2l0aW9uSW5Ob2RlKGVkaXRhYmxlUm9vdC5nZXQoKSksIGRlc3RpbmF0aW9uLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGRlc3RpbmF0aW9u
SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdl
LnB0cigpLCB0cnVlKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0ZXJDb3Vu
dCh7IHsgKmVkaXRhYmxlUm9vdCwgMCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGluYXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSkgfSwgdHJ1ZSk7CiAK
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihkZXN0aW5hdGlvbiwgb3Jp
Z2luYWxJc0RpcmVjdGlvbmFsKSk7CiAgICAgQVNTRVJUKGVuZGluZ1NlbGVjdGlvbigpLmlzQ2Fy
ZXRPclJhbmdlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggOGQ2YmRmNDc4
YWJmN2E4OWVlMDZkMWYwYzVjNzI5YzBlYTVhNzQwZC4uNzU4MmE4OWQzYmMyYmY0N2UyZDQzNDhj
YTYyZGY4OGUwZDg5OTUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0xMDgz
LDE1ICsxMDgzLDIzIEBAIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgUmVmUHRyPENvbnRhCiAgICAgICAgICAgICBzY29w
ZSA9ICZkb2N1bWVudDsKICAgICB9CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZS5nZXQoKSksIHBvc2l0aW9uLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChyYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpKTsKKyAgICBhdXRvIGVuZCA9IG1h
a2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAg
ICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNo
YXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIHRydWUpOwogfQogCiAvLyBGSVhNRTogTWVy
Z2UgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBvbmUgYWJvdmUuCiBpbnQgaW5kZXhGb3JWaXNpYmxl
UG9zaXRpb24oTm9kZSYgbm9kZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRp
b24sIGJvb2wgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uKQogewotICAgIGF1dG8gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSks
IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSwg
Zm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5
UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSkpOworICAgIGF1dG8gZW5kID0gbWFrZUJv
dW5kYXJ5UG9pbnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSwgZm9yU2Vs
ZWN0aW9uUHJlc2VydmF0aW9uKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlv
bkZvclBvc2l0aW9uV2l0aE9mZnNldChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBp
bnQgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwCmluZGV4IDhjMjM0YTRkOTE5NDA4ZGRhYTdkNzE1MTA4Yjg0YzFmYzMwMmY2ZmEuLjk4YzBh
YTI5NjBlODI5ZjMxMTdiYzU3NjY4MGI0YTc2YmIzZmMyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lk
IFRleHRDaGVja2luZ1BhcmFncmFwaDo6aW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCkK
IAogaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6cmFuZ2VMZW5ndGgoKSBjb25zdAogewotICAg
IHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKCZwYXJhZ3JhcGhSYW5nZSgpKTsKKyAg
ICByZXR1cm4gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UoKSk7CiB9CiAKIFJhbmdlJiBU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnBhcmFncmFwaFJhbmdlKCkgY29uc3QKQEAgLTE2NSwxNCAr
MTY1LDExIEBAIFJlZjxSYW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5nZShpbnQg
Y2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291CiAKIEV4Y2VwdGlvbk9yPGludD4gVGV4
dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNv
bnN0CiB7Ci0gICAgaWYgKCFwb3NpdGlvbi5jb250YWluZXJOb2RlKCkpCisgICAgYXV0byBzdGFy
dCA9IG1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsK
KyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIXN0
YXJ0IHx8ICFlbmQpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKLQot
ICAgIGF1dG8gcmFuZ2UgPSBvZmZzZXRBc1JhbmdlKCkuY2xvbmVSYW5nZSgpOwotICAgIGF1dG8g
cmVzdWx0ID0gcmFuZ2UtPnNldEVuZCgqcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLCBwb3NpdGlv
bi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAg
IHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpKTsKKyAgICByZXR1
cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7CiB9CiAKIGJvb2wgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjppc0VtcHR5KCkgY29uc3QKQEAgLTIwMCwyMSArMTk3LDIxIEBAIGNvbnN0
IFN0cmluZyYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0KCkgY29uc3QKIGludCBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQoKSBjb25zdAogewogICAgIGlmICghbV9jaGVj
a2luZ1N0YXJ0KQotICAgICAgICBtX2NoZWNraW5nU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKCZvZmZzZXRBc1JhbmdlKCkpOworICAgICAgICBtX2NoZWNraW5nU3RhcnQgPSBjaGFy
YWN0ZXJDb3VudChvZmZzZXRBc1JhbmdlKCkpOwogICAgIHJldHVybiAqbV9jaGVja2luZ1N0YXJ0
OwogfQogCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0VuZCgpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2NoZWNraW5nRW5kKQotICAgICAgICBtX2NoZWNraW5nRW5kID0gY2hlY2tp
bmdTdGFydCgpICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX2NoZWNraW5nUmFuZ2UucHRy
KCkpOworICAgICAgICBtX2NoZWNraW5nRW5kID0gY2hlY2tpbmdTdGFydCgpICsgY2hhcmFjdGVy
Q291bnQobV9jaGVja2luZ1JhbmdlKTsKICAgICByZXR1cm4gKm1fY2hlY2tpbmdFbmQ7CiB9CiAK
IGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nTGVuZ3RoKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fY2hlY2tpbmdMZW5ndGgpCi0gICAgICAgIG1fY2hlY2tpbmdMZW5ndGggPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fY2hlY2tpbmdSYW5nZS5wdHIoKSk7CisgICAgICAgIG1f
Y2hlY2tpbmdMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2NoZWNraW5nUmFuZ2UpOwogICAgIHJl
dHVybiAqbV9jaGVja2luZ0xlbmd0aDsKIH0KIApAQCAtMjIzLDggKzIyMCwxMiBAQCBpbnQgVGV4
dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KCkgY29uc3QKICAg
ICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KQogICAgICAgICByZXR1cm4gKm1fYXV0
b21hdGljUmVwbGFjZW1lbnRTdGFydDsKIAotICAgIGF1dG8gc3RhcnRPZmZzZXRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCks
IHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1JlcGxhY2VtZW50
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydE9mZnNldFJhbmdlLnB0cigpKTsKKyAg
ICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBv
c2l0aW9uKCkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9hdXRvbWF0aWNS
ZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGlmICghc3RhcnQgfHwgIWVu
ZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQg
PSBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKICAgICByZXR1cm4gKm1fYXV0b21h
dGljUmVwbGFjZW1lbnRTdGFydDsKIH0KIApAQCAtMjMzLDggKzIzNCw3IEBAIGludCBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKCkgY29uc3QKICAgICBp
ZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCkKICAgICAgICAgcmV0dXJuICptX2F1dG9t
YXRpY1JlcGxhY2VtZW50TGVuZ3RoOwogCi0gICAgYXV0byBlbmRPZmZzZXRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBh
cmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFu
Z2UtPmVuZFBvc2l0aW9uKCkpOwotICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGggPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldFJhbmdlLnB0cigpKSAtIGF1dG9tYXRp
Y1JlcGxhY2VtZW50U3RhcnQoKTsKKyAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoID0g
Y2hhcmFjdGVyQ291bnQobV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKTsKICAgICByZXR1cm4g
Km1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7CiB9CiAKQEAgLTMyMywyNSArMzIzLDIzIEBA
IFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFt
bWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGln
bm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KICAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdl
ID0gbV9yYW5nZS0+Y2xvbmVSYW5nZSgpOwogICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0
cigpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIGlu
dCB0b3RhbFJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhS
YW5nZS5wdHIoKSk7CisgICAgYXV0byB0b3RhbFJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQo
cGFyYWdyYXBoUmFuZ2UpOwogICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQ
YXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CiAgICAgCi0gICAgUmVmPFJhbmdl
PiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3Jh
bmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGludCByYW5nZVN0YXJ0T2Zmc2V0ID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLnB0cigpKTsKLSAgICBpbnQgdG90YWxM
ZW5ndGhQcm9jZXNzZWQgPSAwOworICAgIGF1dG8gcmFuZ2VTdGFydE9mZnNldCA9IGNoYXJhY3Rl
ckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9u
KCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAg
ICBDaGFyYWN0ZXJDb3VudCB0b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7CiAgICAgCiAgICAgYm9v
bCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CiAgICAgYm9vbCBsYXN0SXRlcmF0aW9uID0gZmFsc2U7
CiAgICAgd2hpbGUgKHRvdGFsTGVuZ3RoUHJvY2Vzc2VkIDwgdG90YWxSYW5nZUxlbmd0aCkgewog
ICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNlYXJjaCByYW5nZSBieSBwYXJhZ3JhcGhz
LCBjaGVja2luZyBlYWNoIG9uZSBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIuCi0gICAgICAgIGlu
dCBjdXJyZW50TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhSYW5n
ZS5wdHIoKSk7CisgICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50KHBh
cmFncmFwaFJhbmdlKTsKICAgICAgICAgaW50IGN1cnJlbnRTdGFydE9mZnNldCA9IGZpcnN0SXRl
cmF0aW9uID8gcmFuZ2VTdGFydE9mZnNldCA6IDA7CiAgICAgICAgIGludCBjdXJyZW50RW5kT2Zm
c2V0ID0gY3VycmVudExlbmd0aDsKICAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3Jh
cGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSkgewogICAg
ICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBv
ZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwK
ICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0
aGlzIGFyZWEuCi0gICAgICAgICAgICBhdXRvIGVuZE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBhcmFncmFw
aFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAg
ICAgICAgY3VycmVudEVuZE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZW5kT2Zm
c2V0QXNSYW5nZS5wdHIoKSk7CisgICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gY2hhcmFj
dGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSksICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSB9KTsKICAg
ICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChj
dXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5kT2Zmc2V0KSB7CkBAIC0zOTksMTAgKzM5Nyw4
IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRH
cmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAKICAgICAgICAgICAgICAgICBpZiAoIW1pc3Nw
ZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFyUGhyYXNl
LmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikp
IHsKICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2Nh
dGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJz
dEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBwYXJhZ3JhcGhPZmZz
ZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIo
KS5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5z
dGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQg
Kz0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlLnB0cigp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0
SXRlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigp
KSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0p
OwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zmc2V0OwogICAgICAgICAg
ICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxsZWRXb3JkOwpAQCAtNDEwLDEwICs0
MDYsOCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09y
QmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNldCA9IGdyYW1t
YXJQaHJhc2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBw
YXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ3Jh
bW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaE9m
ZnNldEFzUmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBncmFt
bWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KG1f
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGlu
ZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gZ3Jh
bW1hclBocmFzZU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBi
YWRHcmFtbWFyUGhyYXNlOwpAQCAtNTU2LDcgKzU1MCw3IEBAIGJvb2wgVGV4dENoZWNraW5nSGVs
cGVyOjppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgLy8gQmFkIGdyYW1tYXIgYXQgc3RhcnQgb2YgcmFuZ2UsIGJ1dCBlbmQgb2YgYmFkIGdy
YW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVuZCBvZiByYW5nZQotICAgIGlmIChncmFtbWFyRGV0
YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fcmFuZ2UucHRyKCkpKQor
ICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3JhbW1hckRldGFpbC5sZW5ndGgpICE9IGNo
YXJhY3RlckNvdW50KG1fcmFuZ2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
Ly8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMgZXJyb3Ig
KHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGU4NDQxMmIyNzY4MzU2NmYzMDNh
NmQxYjkyZTY3ZjMyMTJkOGQyZmQuLmU4NmViZjE5MTkwMmViNTMxYjg3NDVjZDc1ZjllNzhmNTQ0
OTlmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTIzNDMs
MTIgKzIzNDMsMTAgQEAgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6bGVuZ3RoKCkgY29uc3QKIAogLy8g
LS0tLS0tLS0KIAotaW50IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29uc3QgUmFuZ2UqIHJh
bmdlLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKK0NoYXJhY3RlckNvdW50IGNoYXJh
Y3RlckNvdW50KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBzcGFjZXNGb3JSZXBsYWNl
ZEVsZW1lbnRzKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoKnJhbmdlLCBmb3JT
ZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7ICFpdC5h
dEVuZCgpOyBpdC5hZHZhbmNlKCkpCisgICAgQ2hhcmFjdGVyQ291bnQgbGVuZ3RoID0gMDsKKyAg
ICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZSwgc3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cyA/
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zIDog
VGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkK
ICAgICAgICAgbGVuZ3RoICs9IGl0LnRleHQoKS5sZW5ndGgoKTsKICAgICByZXR1cm4gbGVuZ3Ro
OwogfQpAQCAtMjQ1NiwyMSArMjQ1NCwxNiBAQCBib29sIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRp
b25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNvbnN0IFJhbmdlKiByYW5nZQogCiAg
ICAgLy8gVGhlIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIG9ubHkgZ2V0cyBjYWxs
ZWQgd2l0aCByYW5nZXMgdGhhdAogICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2ZW4gYXJlYSBj
b250YWluaW5nIHRoZSBzZWxlY3Rpb24gcm9vdC4gVGhpcyBpcyBkb25lCi0gICAgLy8gYmVjYXVz
ZSBvZiB0ZXh0IGZpZWxkcyBhbmQgdGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBpcyBub3QK
LSAgICAvLyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUgdGhhdCB0aGUg
cmFuZ2UgZG9lcyBub3QgY3Jvc3MgYQotICAgIC8vIGJvdW5kYXJ5IG9mIG9uZSBvZiB0aG9zZS4K
KyAgICAvLyBiZWNhdXNlIG9mIHRleHQgZmllbGRzIGFuZCB0ZXh0YXJlYXMuIFRoZSBET00gZm9y
IHRob3NlIGlzIG5vdCBkaXJlY3RseQorICAgIC8vIGluIHRoZSBkb2N1bWVudCBET00sIHNvIGVu
c3VyZSB0aGF0IHRoZSByYW5nZSBkb2VzIG5vdCBjcm9zcyBhIGJvdW5kYXJ5CisgICAgLy8gb2Yg
b25lIG9mIHRob3NlLgogICAgIGlmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gc2NvcGUg
JiYgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgmcmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IHNjb3Bl
ICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKCkuaXNEZXNjZW5kYW50T2Yoc2NvcGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWY8UmFuZ2U+IHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVh
dGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCAmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3RhcnRDb250
YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgbG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHRlc3RSYW5nZS5wdHIoKSk7Ci0KLSAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5k
Q29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCZ0ZXN0UmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxlbmd0aCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKSAtIGxvY2F0aW9uOworICAgIGxvY2F0aW9uID0g
Y2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJhbmdlLT5zdGFydENvbnRhaW5lcigp
LCByYW5nZS0+c3RhcnRPZmZzZXQoKSB9IH0pOworICAgIGxlbmd0aCA9IGNoYXJhY3RlckNvdW50
KHsgeyAqc2NvcGUsIDAgfSwgeyByYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZz
ZXQoKSB9IH0pIC0gbG9jYXRpb247CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDE1N2YxZGExZDBlNmM5NTNkOWRlZGM0ZWZhY2Ux
M2U5ODBlMzEzNGUuLjk2ZWNhZWU0OTNjZDczNGRiZTk4OWQ5Y2VhY2Y1ZDk5ZjY5Zjg4NGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtMzYsNyArMzYsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlclRleHRGcmFnbWVudDsK
IAorLy8gRklYTUU6IERlbGV0ZSB0aGlzIG92ZXJsb2FkIGFmdGVyIG1vdmluZyBhbGwgdGhlIGNh
bGxlcnMgdG8gdGhlIFNpbXBsZVJhbmdlIHZlcnNpb24uCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
cGxhaW5UZXh0KGNvbnN0IFJhbmdlKiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0
b3JEZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOworCiBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJh
dG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5
U3RyaW5nID0gZmFsc2UpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dFJlcGxhY2lu
Z05vQnJlYWtTcGFjZShjb25zdCBTaW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0g
VGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9IGZhbHNl
KTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVy
YXRvckZvclRlc3RpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKTsKQEAgLTEwMCw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAgICAgY29uc3QgVGV4dEl0ZXJhdG9yQ29weWFibGVUZXh0JiBjb3B5YWJsZVRleHQo
KSBjb25zdCB7IEFTU0VSVCghYXRFbmQoKSk7IHJldHVybiBtX2NvcHlhYmxlVGV4dDsgfQogICAg
IHZvaWQgYXBwZW5kVGV4dFRvU3RyaW5nQnVpbGRlcihTdHJpbmdCdWlsZGVyJiBidWlsZGVyKSBj
b25zdCB7IGNvcHlhYmxlVGV4dCgpLmFwcGVuZFRvU3RyaW5nQnVpbGRlcihidWlsZGVyKTsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGludCByYW5nZUxlbmd0aChjb25zdCBSYW5nZSos
IGJvb2wgc3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cyA9IGZhbHNlKTsKKyAgICAvLyBGSVhNRTog
TW92ZSB0aGVzZSB0byBTaW1wbGVSYW5nZSwgQ2hhcmFjdGVyUmFuZ2UsIGFuZCBDaGFyYWN0ZXJD
b3VudCBhbmQgbW92ZSBvdXQgb2YgdGhpcyBjbGFzcyB0byB0aGUgdG9wIGxldmVsIChib3R0b20g
b2YgdGhpcyBmaWxlKS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFJhbmdlPiBy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJOb2RlKiBzY29wZSwgaW50IHJhbmdl
TG9jYXRpb24sIGludCByYW5nZUxlbmd0aCwgYm9vbCBzcGFjZXNGb3JSZXBsYWNlZEVsZW1lbnRz
ID0gZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdldExvY2F0aW9uQW5k
TGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNjb3BlLCBjb25zdCBSYW5nZSosIHNpemVfdCYgbG9jYXRp
b24sIHNpemVfdCYgbGVuZ3RoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFJhbmdl
PiBzdWJyYW5nZShSYW5nZSYgZW50aXJlUmFuZ2UsIGludCBjaGFyYWN0ZXJPZmZzZXQsIGludCBj
aGFyYWN0ZXJDb3VudCk7CkBAIC0yODcsNCArMjg5LDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X2RpZExvb2tBaGVhZCB7IHRydWUgfTsKIH07CiAKK3VzaW5nIENoYXJhY3RlckNvdW50ID0gc2l6
ZV90OworCitzdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2UgeworICAgIENoYXJhY3RlckNvdW50IGxvY2F0
aW9uIHsgMCB9OworICAgIENoYXJhY3RlckNvdW50IGxlbmd0aCB7IDAgfTsKK307CisKK1dFQkNP
UkVfRVhQT1JUIENoYXJhY3RlckNvdW50IGNoYXJhY3RlckNvdW50KGNvbnN0IFNpbXBsZVJhbmdl
JiwgYm9vbCBzcGFjZXNGb3JSZXBsYWNlZEVsZW1lbnRzID0gZmFsc2UpOworCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAK
aW5kZXggNmI5MGZmZGJlNTRhZWNlODYzMzUxMzEyYTI1YjEyYWU4ZDJjZTFhMC4uOTczMDJjZjUy
YTQzOWUwN2FkZjBjOGVjOWI4YTFkY2ViYWNjMTFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtODE5LDYgKzgxOSwxMSBAQCBib29sIFZpc2libGVQb3NpdGlvbjo6ZXF1YWxzKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIG1fYWZmaW5pdHkgPT0gb3Ro
ZXIubV9hZmZpbml0eSAmJiBtX2RlZXBQb3NpdGlvbi5lcXVhbHMob3RoZXIubV9kZWVwUG9zaXRp
b24pOwogfQogCitPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludChjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIHJldHVybiBtYWtlQm91bmRhcnlQ
b2ludChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKICAgICBzd2l0
Y2ggKGFmZmluaXR5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApp
bmRleCA0ODU2NjgyNGVkNzNmZGFjZDI1NzA4ZGUzMTkzMTRlNjE5MmMwMmYwLi5mODRiY2RmZDcy
ZjViYzQ1NzYzM2RhNDgzMjcyMWU1Mjc3YTI0ODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVBvc2l0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDYgQEAKICNpbmNsdWRlICJFZGl0aW5n
Qm91bmRhcnkuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogCi1uYW1lc3BhY2UgV1RGIHsKLWNs
YXNzIFRleHRTdHJlYW07Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmFuZ2U7
CkBAIC00OSw5ICs0NSw2IEBAIGNsYXNzIFJhbmdlOwogLy8gcG9zaXRpb24gaXMgbm90IGF0IGEg
bGluZSBicmVhay4KICNkZWZpbmUgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgVVBTVFJFQU0KIAot
Y2xhc3MgSW5saW5lQm94OwotY2xhc3MgTm9kZTsKLQogY2xhc3MgVmlzaWJsZVBvc2l0aW9uIHsK
IHB1YmxpYzoKICAgICAvLyBOT1RFOiBVUFNUUkVBTSBhZmZpbml0eSB3aWxsIGJlIHVzZWQgb25s
eSBpZiBwb3MgaXMgYXQgZW5kIG9mIGEgd3JhcHBlZCBsaW5lLApAQCAtODUsMjEgKzc4LDE2IEBA
IHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBbdGFibGUsIDBd
IGNvcnJlY3RseS4KICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkgPyBtX2RlZXBQb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwOyB9Ci0gICAgCi0gICAgdm9pZCBn
ZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQmIGNhcmV0T2Zm
c2V0KSBjb25zdAotICAgIHsKLSAgICAgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KG1fYWZmaW5pdHksIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOwotICAgIH0KIAotICAg
IHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlv
biwgSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAotICAgIHsK
LSAgICAgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHks
IHByaW1hcnlEaXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOwotICAgIH0KKyAgICB2
b2lkIGdldElubGluZUJveEFuZE9mZnNldChJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9mZnNldCkg
Y29uc3Q7CisgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoVGV4dERpcmVjdGlvbiBwcmlt
YXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7CiAKICAg
ICAvLyBSZWN0IGlzIGxvY2FsIHRvIHRoZSByZXR1cm5lZCByZW5kZXJlcgogICAgIFdFQkNPUkVf
RVhQT1JUIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoUmVuZGVyT2JqZWN0KiYpIGNvbnN0Owor
CiAgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgY2FyZXQgaW4gYWJzb2x1
dGUgY29vcmRzCiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRz
KGJvb2wqIGluc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3Q7CisKICAgICAvLyBBYnMgeC95IHBv
c2l0aW9uIG9mIHRoZSBjYXJldCBpZ25vcmluZyB0cmFuc2Zvcm1zLgogICAgIC8vIEZJWE1FOiBu
YXZpZ2F0aW9uIHdpdGggdHJhbnNmb3JtcyBzaG91bGQgYmUgc21hcnRlci4KICAgICBXRUJDT1JF
X0VYUE9SVCBpbnQgbGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9u
KCkgY29uc3Q7CkBAIC0xMDcsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
RmxvYXRSZWN0IGFic29sdXRlU2VsZWN0aW9uQm91bmRzRm9yTGluZSgpIGNvbnN0OwogCiAgICAg
Ly8gVGhpcyBpcyBhIHRlbnRhdGl2ZSBlbmhhbmNlbWVudCBvZiBvcGVyYXRvcj09IHRvIGFjY291
bnQgZm9yIGFmZmluaXR5LgotICAgIC8vIEZJWE1FOiBDb21iaW5lIHRoaXMgZnVuY3Rpb24gd2l0
aCBvcGVyYXRvcj09CisgICAgLy8gRklYTUU6IENvbWJpbmUgdGhpcyBmdW5jdGlvbiB3aXRoIG9w
ZXJhdG9yPT0uCiAgICAgYm9vbCBlcXVhbHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Q7
CiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCkBAIC0xMTUsNyArMTAzLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0OwogICAgIHZvaWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CiAjZW5kaWYKLSAg
ICAKKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXQoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHkp
OwogICAgIFBvc2l0aW9uIGNhbm9uaWNhbFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7CkBAIC0x
MjcsMjMgKzExNSw1MCBAQCBwcml2YXRlOgogICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OwogfTsK
IAorYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBvcGVyYXRvcjwoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIG9wZXJhdG9yPihjb25zdCBWaXNpYmxl
UG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0b3I8PShjb25z
dCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0
b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKwor
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5kYXJ5UG9pbnQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisKK1dFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4g
bWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OworYm9vbCBzZXRTdGFydChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBz
ZXRFbmQoUmFuZ2UqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1Zpc2libGVQb3NpdGlvbiBz
dGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVBZmZpbml0eSk7CitWaXNpYmxlUG9z
aXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKKworV0VC
Q09SRV9FWFBPUlQgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKKworYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKK2Jvb2wgaXNMYXN0VmlzaWJsZVBvc2l0
aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKKworYm9vbCBh
cmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKKworLy8gaW5saW5lcworCiAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgaWdub3JlIGFmZmlu
aXR5LgogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgp
ID09IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAg
ICByZXR1cm4gIShhID09IGIpOwogfQotICAgIAorCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7CiAgICAg
cmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA8IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0KIAotaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBiKSAKK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1
aXZhbGVudCgpID4gYi5kZWVwRXF1aXZhbGVudCgpOwogfQpAQCAtMTUzLDI2ICsxNjgsMjAgQEAg
aW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgYikKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgpIDw9IGIuZGVl
cEVxdWl2YWxlbnQoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikgCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBi
KQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPj0gYi5kZWVwRXF1aXZhbGVudCgp
OwotfSAgICAKLQotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIHNldFN0YXJ0
KFJhbmdlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIHNldEVuZChSYW5nZSosIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwotVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0
aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKLVZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxl
UG9zaXRpb24oY29uc3QgUmFuZ2UqLCBFQWZmaW5pdHkpOwotCi1XRUJDT1JFX0VYUE9SVCBFbGVt
ZW50KiBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwot
Ci1ib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgY29uc3QgTm9kZSopOwotYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOworfQogCi1ib29sIGFyZVZpc2libGVQb3Np
dGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJik7CitpbmxpbmUgdm9pZCBWaXNpYmxlUG9zaXRpb246OmdldElubGluZUJveEFu
ZE9mZnNldChJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0Cit7
CisgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIGlu
bGluZUJveCwgY2FyZXRPZmZzZXQpOworfQogCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKK2lubGluZSB2b2lkIFZpc2libGVQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KFRl
eHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQm
IGNhcmV0T2Zmc2V0KSBjb25zdAoreworICAgIG1fZGVlcFBvc2l0aW9uLmdldElubGluZUJveEFu
ZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0T2Zm
c2V0KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVVbml0cy5jcHAKaW5kZXggOTEwOWFiOTU0OTA2OWYzNjA0ZjA5ODZhYzk4ZThiOTk0
NDlhMTRhZS4uYWZmMzZkNDgxODg3MjZmMjhiMGJjMzc5OTkxOWFlN2MwZWYyZTcwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtMTkwMSwyMCArMTkwMSwxMyBA
QCBSZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHZwLCBUZXh0R3JhbgogICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHByZXZC
b3VuZGFyeS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksIHBy
ZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKIH0KIAotaW50IGRpc3RhbmNlQmV0d2VlblBvc2l0
aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIG90
aGVyKQorcHRyZGlmZl90IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9z
aXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKLSAgICBpZiAodnAuaXNOdWxs
KCkgfHwgb3RoZXIuaXNOdWxsKCkpCisgICAgaWYgKGEuaXNOdWxsKCkgfHwgYi5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHRoaXNJc1N0YXJ0ID0gKHZwIDwgb3RoZXIp
OwotCi0gICAgLy8gU3RhcnQgbXVzdCBjb21lIGZpcnN0IGluIHRoZSBSYW5nZSBjb25zdHJ1Y3Rv
ci4KLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSh2cC5kZWVwRXF1aXZhbGVudCgpLmRl
cHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHRoaXNJc1N0YXJ0ID8gdnAgOiBvdGhlciksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNJc1N0YXJ0ID8gb3RoZXIgOiB2cCkpOwotICAg
IGludCBkaXN0YW5jZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCkpOwot
Ci0gICAgcmV0dXJuICh0aGlzSXNTdGFydCA/IC1kaXN0YW5jZSA6IGRpc3RhbmNlKTsKKyAgICBy
ZXR1cm4gYSA8IGIKKyAgICAgICAgPyAtY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9p
bnQoYSksICptYWtlQm91bmRhcnlQb2ludChiKSB9KQorICAgICAgICA6IGNoYXJhY3RlckNvdW50
KHsgKm1ha2VCb3VuZGFyeVBvaW50KGIpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoYSkgfSk7CiB9CiAK
IHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24sIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZvcmUsIFVDaGFyMzImIHR3
b0JlZm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRz
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCmluZGV4IDY3MTdlYjEx
ZGRkYmQ4NjhlNDQxNGMzOTgwMzM1MmEwMzE2YWZlM2UuLmNlOGM1MGY1NzkzNjBlMDFjZmRjODUy
ZmVhNTgxZjllNDI1YTQ4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaApA
QCAtMTAyLDcgKzEwMiw3IEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXRCb3VuZGFyeU9mR3JhbnVs
YXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyCiBXRUJDT1JFX0VYUE9S
VCBib29sIHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwog
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJp
dHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb24pOwotV0VCQ09SRV9FWFBPUlQgaW50IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhjb25z
dCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1dFQkNPUkVfRVhQ
T1JUIHB0cmRpZmZfdCBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFu
Z2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIFdFQkNP
UkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIGNo
YXJhY3RlcnNBcm91bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBVQ2hhcjMyJiBv
bmVBZnRlciwgVUNoYXIzMiYgb25lQmVmb3JlLCBVQ2hhcjMyJiB0d29CZWZvcmUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDEwM2U1NTNi
MjM3YTkxOTdiYzM4ZDI0MjE2MDI0NmM2ZDIzMjI2MzUuLjJiOTMxN2IxNzEzZjI2MGEyZGFmMzhj
NWIxZmJhNGUwODRhYjdjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW0KQEAgLTcxLDE1ICs3MSwxOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0
aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVmUHRyPFJhbmdlPiBjb250
ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5n
ZT4mIGRldGVjdGVkRGF0YVJhbmdlKQogewogICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5n
ID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7Ci0gICAgaW50IGhpdExvY2F0aW9uID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoY29udGV4dFJhbmdlLT5zdGFydFBv
c2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgYXV0byBzdGFydCA9IGNvbnRleHRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpOworICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBwb3NpdGlvbi5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBDRkluZGV4IGhpdExvY2F0aW9uID0g
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5
UG9pbnQocG9zaXRpb24pIH0pOwogCi0gICAgUmV0YWluUHRyPEREU2Nhbm5lclJlZj4gc2Nhbm5l
ciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVs
bHB0cikpOwotICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJlZj4gc2NhblF1ZXJ5ID0gYWRvcHRD
RihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBs
YWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxs
UGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOworICAgIGF1dG8gc2Nhbm5lciA9IGFkb3B0Q0Yo
RERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOworICAg
IGF1dG8gc2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdl
dCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOwogCiAg
ICAgaWYgKCFERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5LmdldCgp
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3Vs
dHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNO
b092ZXJsYXApKTsKKyAgICBhdXRvIHJlc3VsdHMgPSBhZG9wdENGKEREU2Nhbm5lckNvcHlSZXN1
bHRzV2l0aE9wdGlvbnMoc2Nhbm5lci5nZXQoKSwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25z
Tm9PdmVybGFwKSk7CiAKICAgICAvLyBGaW5kIHRoZSBERFJlc3VsdFJlZiB0aGF0IGludGVyc2Vj
dHMgdGhlIGhpdFRlc3RSZXN1bHQncyBWaXNpYmxlUG9zaXRpb24uCiAgICAgRERSZXN1bHRSZWYg
bWFpblJlc3VsdCA9IG51bGxwdHI7CkBAIC0xMDAsNyArMTAzLDcgQEAgc3RhdGljIFJldGFpblB0
cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQ
b3NpdGlvbgogICAgIH0KIAogICAgIGlmICghbWFpblJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250
ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5j
ZSgpIGluaXRdKTsKICAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1bHRzOkBbIChfX2JyaWRn
ZSBpZCltYWluUmVzdWx0IF1dOwpAQCAtMTEyLDkgKzExNSw5IEBAIHN0YXRpYyBSZXRhaW5QdHI8
RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9z
aXRpb24KICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJE
b2N1bWVudCgpLnZpZXcoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBxdWFkcykKICAg
ICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gudW5pdGUoZnJhbWVWaWV3LT5jb250ZW50c1Rv
V2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSkpOwotICAgIAorCiAgICAgZGV0ZWN0
ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7Ci0gICAgCisKICAgICByZXR1cm4gYWN0aW9u
Q29udGV4dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
aWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9u
YXJ5TG9va3VwLm1tCmluZGV4IDg3OTcyMjAyODQ2OGYwM2UwMmVhZTU5YjU1YTI5YTIzZGVjZTky
ZWUuLmQ2NDhmZDcwZmMzOGZjOTJjMjRlNTE3ODkwNDdjZWY2MjYzZmE1MDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjQs
MTIgKzI2NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5n
ZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotICAgIAorCiAgICAgaWYgKCFSZXZlYWxMaWJyYXJ5KCkgfHwgIVJldmVh
bENvcmVMaWJyYXJ5KCkgfHwgIWdldFJWSXRlbUNsYXNzKCkpCiAgICAgICAgIHJldHVybiB7IG51
bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKworICAgIGlmICgh
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwogCiAgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50
LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KQEAgLTI3OSwyMCAr
Mjc4LDIyIEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAgICAgLy8gQXMgY29udGV4dCwgd2Ug
YXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgogICAg
IGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsK
ICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7Cisg
ICAgaWYgKHBhcmFncmFwaFN0YXJ0LmlzTnVsbCgpIHx8IHBhcmFncmFwaEVuZC5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBhdXRvIGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3Jh
cGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7CisgICAgYXV0
byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFy
eVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkg
fSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0
aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsKIAotICAgIGludCBsZW5ndGhUb1Nl
bGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0
aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01h
a2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxl
bmd0aFRvU2VsZWN0aW9uU3RhcnQpOwotICAgIAogICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJh
Y3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwogICAg
IFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSk7
CiAgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFu
Y2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnJhbmdlVG9QYXNzXSk7
CiAgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7
Ci0gICAgCisKICAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCpmdWxsQ2hhcmFj
dGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBoaWdobGlnaHRSYW5nZS5sZW5ndGgp
LCBuaWwgfTsKLSAgICAKKwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCisK
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIH0KIApAQCAtMzIyLDQzICszMjMsNDAgQEAg
c3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1
cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQKIAogICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUtPnBh
Z2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAgICAgTlNSYW5nZSBzZWxlY3Rpb25SYW5nZTsKLSAgICBpbnQgaGl0SW5k
ZXg7CisgICAgTlNVSW50ZWdlciBoaXRJbmRleDsKICAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFy
YWN0ZXJSYW5nZTsKICAgICAKICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUoKSA9PSBW
aXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikgewogICAgICAgICBhdXRvIHNlbGVjdGlv
blN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgICAgICBhdXRvIHNlbGVjdGlv
bkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEFz
IGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMg
b2YgdGV4dC4KICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdy
YXBoKHNlbGVjdGlvbkVuZCk7CiAgICAgICAgIAotICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rp
b25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpOwotICAg
ICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAogICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBt
YWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CiAgICAgICAgIGlmICghZnVs
bENoYXJhY3RlclJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAK
LSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSksIFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSk7Ci0g
ICAgICAgIAotICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0KCkpOworICAgICAgICBzZWxlY3Rp
b25SYW5nZSA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50
KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KSwK
KyAgICAgICAgICAgIGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlv
blN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfSkpOworICAgICAgICBo
aXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0
YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKICAgICB9IGVsc2UgewogICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMgeyBw
b3NpdGlvbiB9OwogICAgICAgICBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgcG9zaXRpb24gPSBz
ZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0KCk7CisKICAgICAgICAgLy8gQXMg
Y29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hhcmFjdGVycyBvZiB0ZXh0IGJlZm9y
ZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgogICAgICAgICBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSByYW5n
ZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Ci0gICAg
ICAgIAogICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG5pbCB9OwotICAgICAgICAKKwogICAgICAgICBzZWxlY3Rpb25SYW5nZSA9
IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3Np
dGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOworICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNv
dW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGZ1bGxDaGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlv
bigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKICAgICB9Ci0gICAgCisKICAg
ICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxlY3Rpb25DbGFzcygpIHJldmVhbFJh
bmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpAW1tOU1ZhbHVlIHZhbHVlV2l0aFJh
bmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2VsZWN0aW9uOm5pbF07Ci0gICAgCisK
ICAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgqZnVsbENoYXJhY3RlclJhbmdlKTsK
ICAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5j
ZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVkUmFuZ2U6c2VsZWN0ZWRSYW5nZV0p
OwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFu
ZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9T
LmNwcAppbmRleCA5YzFhZTg4ODk1MWZiM2JiMjU2ZWQ3ZTA5ZTI0MTc2YmM4ZDNjMzg5Li5hMmI4
MTgyODc3YjI4YWYyOWM4YTA2Mzk1NGQzNzRjZDVhYTVhNWRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcApAQCAtNDgsOSArNDgs
NyBAQCBEaWN0YXRpb25Db21tYW5kSU9TOjpEaWN0YXRpb25Db21tYW5kSU9TKERvY3VtZW50JiBk
b2N1bWVudCwgVmVjdG9yPFZlY3RvcjxTdHJpbgogCiB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6
OmRvQXBwbHkoKQogewotICAgIFZpc2libGVQb3NpdGlvbiBpbnNlcnRpb25Qb3NpdGlvbihzdGFy
dGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKLQotICAgIHVuc2lnbmVkIHJlc3VsdExl
bmd0aCA9IDA7CisgICAgQ2hhcmFjdGVyQ291bnQgcmVzdWx0TGVuZ3RoID0gMDsKICAgICBmb3Ig
KGF1dG8mIGludGVycHJldGF0aW9ucyA6IG1fZGljdGF0aW9uUGhyYXNlcykgewogICAgICAgICBj
b25zdCBTdHJpbmcmIGZpcnN0SW50ZXJwcmV0YXRpb24gPSBpbnRlcnByZXRhdGlvbnNbMF07CiAg
ICAgICAgIHJlc3VsdExlbmd0aCArPSBmaXJzdEludGVycHJldGF0aW9uLmxlbmd0aCgpOwpAQCAt
NjIsMjAgKzYwLDIzIEBAIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiAgICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigp
LnZpc2libGVFbmQoKSkpOwogICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBhZnRlclJlc3Vs
dHMoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKTsKKyAgICAvLyBGSVhNRTogQWRkIHRo
ZSByZXN1bHQgbWFya2VyIHVzaW5nIGEgUG9zaXRpb24gY2FjaGVkIGJlZm9yZSByZXN1bHRzIGFy
ZSBpbnNlcnRlZCwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGNoYXJhY3RlciBjb3VudHMuCiAKLSAg
ICBFbGVtZW50KiByb290ID0gYWZ0ZXJSZXN1bHRzLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAg
ICBhdXRvIGVuZFBvc2l0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpOworICAg
IGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pOworICAgIGF1dG8qIHJv
b3QgPSBlbmRQb3NpdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgaWYgKCFlbmQgfHwg
IXJvb3QpCisgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBBZGQgdGhlIHJlc3VsdCBt
YXJrZXIgdXNpbmcgYSBQb3NpdGlvbiBjYWNoZWQgYmVmb3JlIHJlc3VsdHMgYXJlIGluc2VydGVk
LCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gVGV4dEl0ZXJhdG9ycy4KLSAgICBhdXRvIHJhbmdlVG9F
bmQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bigoTm9kZSAqKXJvb3QsIDApLCBhZnRlclJlc3VsdHMuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAg
aW50IGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvRW5kLnB0cigp
LCB0cnVlKTsKLSAgICBpbnQgc3RhcnRJbmRleCA9IGVuZEluZGV4IC0gcmVzdWx0TGVuZ3RoOwor
ICAgIGF1dG8gZW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyB7ICpyb290LCAwIH0sIFdURk1v
dmUoKmVuZCkgfSk7CisgICAgaWYgKGVuZE9mZnNldCA8IHJlc3VsdExlbmd0aCkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKHN0YXJ0SW5kZXggPj0gMCkgewotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJlc3VsdFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0
aChkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLCBzdGFydEluZGV4LCBlbmRJbmRleCwgdHJ1
ZSk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHRSYW5nZSk7IC8vIEZJWE1FOiBXaGF0IGd1YXJhbnRl
ZXMgdGhpcz8KLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0
TWFya2VyKCpyZXN1bHRSYW5nZSwgbV9tZXRhZGF0YSk7Ci0gICAgfQorICAgIGF1dG8gcmVzdWx0
UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHJvb3QsIGVu
ZE9mZnNldCAtIHJlc3VsdExlbmd0aCwgZW5kT2Zmc2V0KTsKKyAgICBpZiAoIXJlc3VsdFJhbmdl
KQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRp
b25SZXN1bHRNYXJrZXIoKnJlc3VsdFJhbmdlLCBtX21ldGFkYXRhKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGlj
dGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rp
b25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggMTYxNTkwN2Q2OTExMGM2ODVmNzczMDczMThiYjJh
NTU3MTk2OGE0ZS4uNTEzNWI5MDZkZWUxOGUwMTc3OWVjNjExNDc0MzFjNzk1ZTM4YTU4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2Fj
eS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVn
YWN5Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODksMTAgKzg5LDEyIEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNE
aWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAgICAg
Ly8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdy
YXBocyBvZiB0ZXh0LgogICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvblN0YXJ0KTsKICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBo
KHNlbGVjdGlvbkVuZCk7CisgICAgaWYgKHBhcmFncmFwaFN0YXJ0LmlzTnVsbCgpIHx8IHBhcmFn
cmFwaEVuZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAKLSAg
ICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAgIGlu
dCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJh
bmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1JhbmdlIHJh
bmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9T
ZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJh
Z3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7CisgICAg
YXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3Vu
ZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbkVu
ZCkgfSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsKIAogICAgIE5TRGljdGlvbmFy
eSAqb3B0aW9ucyA9IG5pbDsKICAgICB0b2tlblJhbmdlKHBsYWluVGV4dChtYWtlUmFuZ2UocGFy
YWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCkuZ2V0KCkpLCByYW5nZVRvUGFzcywgJm9wdGlvbnMp
OwpAQCAtMTMzLDcgKzEzNSwxMiBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlv
bmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdAogICAgIGlmICgh
ZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAot
ICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9z
aXRpb24pLmdldCgpKSwgMCk7CisgICAgYXV0byBmdWxsQ2hhcmFjdGVyU3RhcnQgPSBtYWtlQm91
bmRhcnlQb2ludChmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgYXV0
byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOworICAgIGlm
ICghZnVsbENoYXJhY3RlclN0YXJ0IHx8ICFwb3NpdGlvbkJvdW5kYXJ5KQorICAgICAgICByZXR1
cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VS
YW5nZShjaGFyYWN0ZXJDb3VudCh7ICpmdWxsQ2hhcmFjdGVyU3RhcnQsICpwb3NpdGlvbkJvdW5k
YXJ5IH0pLCAwKTsKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CiAgICAgTlNSYW5n
ZSBleHRyYWN0ZWRSYW5nZSA9IHRva2VuUmFuZ2UocGxhaW5UZXh0KGZ1bGxDaGFyYWN0ZXJSYW5n
ZS5nZXQoKSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCBlOTJjZTJjZDRhNmE2Y2JlZDJmOWE5MWQ5YzJmZjI0YThlMGM2ZmU2
Li4zZDJjMzg0NGRiZjQ1OTJjMmIxNjFjMDZjYmM3ODlmYWQzNjIzYzY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02NTMsMTAgKzY1MywxMyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xpY2soY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UgogICAgIHJldHVybiB1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURvd25EaXNwYXRj
aGluZ1NlbGVjdFN0YXJ0KHRhcmdldE5vZGUsIGV4cGFuZFNlbGVjdGlvblRvUmVzcGVjdFNlbGVj
dE9uTW91c2VEb3duKCp0YXJnZXROb2RlLCBuZXdTZWxlY3Rpb24pLCBQYXJhZ3JhcGhHcmFudWxh
cml0eSk7CiB9CiAKLXN0YXRpYyBpbnQgdGV4dERpc3RhbmNlKGNvbnN0IFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgUG9zaXRpb24mIGVuZCkKK3N0YXRpYyBDaGFyYWN0ZXJDb3VudCB0ZXh0RGlzdGFu
Y2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIGF1
dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwg
c3RhcnQsIGVuZCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2Uu
cHRyKCksIHRydWUpOworICAgIGF1dG8gc3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0KTsKKyAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKTsK
KyAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5kYXJ5KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnRCb3VuZGFyeSwgKmVuZEJvdW5k
YXJ5IH0sIHRydWUpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcAppbmRleCAxYWZhZTVlYmJmNWU2M2Q5
YmVkZjMwMzlkZjQ0NTFjOWI1NTNhNjM4Li5iODk5MzNmZmExYmYyODQzYzI2ZmRiZDY2ZDI5MjZl
ZDAwYzVmNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5nUmFuZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKQEAgLTU4LDE4
ICs1OCwxNyBAQCBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IEVkaXRpbmdSYW5nZTo6dG9SYW5nZShX
ZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IEVkaXRpbgogCiAgICAgQVNTRVJUKGVkaXRpbmdS
YW5nZUlzUmVsYXRpdmVUbyA9PSBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG86OlBhcmFncmFwaCk7
CiAKLSAgICBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHNl
bGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNl
bGVjdGVkUmFuZ2UpCisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHBhcmFncmFw
aFJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAgaWYgKCFwYXJhZ3JhcGhSYW5nZSkK
KyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpKTsKKyAgICBpZiAoIXBhcmFncmFwaFN0YXJ0
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvJiByb290Tm9kZSA9IHBhcmFncmFw
aFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAKLSAgICBhdXRvJiBy
b290Tm9kZSA9IHBhcmFncmFwaFJhbmdlLmdldCgpLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29w
ZSgpLnJvb3ROb2RlKCk7Ci0gICAgaW50IHBhcmFncmFwaFN0YXJ0SW5kZXggPSBXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUocm9vdE5vZGUu
ZG9jdW1lbnQoKSwgJnJvb3ROb2RlLCAwLCAmcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydE9mZnNldCgpKS5wdHIoKSk7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2Rl
LCBwYXJhZ3JhcGhTdGFydEluZGV4ICsgc3RhdGljX2Nhc3Q8aW50PihyYW5nZS5sb2NhdGlvbiks
IGxlbmd0aCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydEluZGV4ID0gV2ViQ29yZTo6Y2hhcmFj
dGVyQ291bnQoeyB7IHJvb3ROb2RlLCAwIH0sICpwYXJhZ3JhcGhTdGFydCB9KTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9v
dE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXggKyByYW5nZS5sb2NhdGlvbiwgbGVuZ3RoKTsKIH0K
IAogRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKFdlYkNvcmU6OkZyYW1lJiBm
cmFtZSwgY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBFZGl0aW5nUmFuZ2VJc1JlbGF0aXZl
VG8gZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCA5
ZTI0NzU4Y2Q5MmNmNzUwODZmY2MyMTgyNGIzNWM4ODA3MTIzMjczLi42Y2ZiYjMzYTI5MmEyNjQ0
NjZjYjg2YmUwYmJjODI2YjdkMzI5OTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtNjUs
OCArNjUsNiBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgdWludDY0X3Qg
Z2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKQogewpAQCAtMzYxLDYgKzM1OSw3IEBAIFdl
YkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0RE9N
UGFzdGVBY2Nlc3MoY29uc3QgU3RyCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0Uo
R0xJQikKKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9h
cmRFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKG1fcGFnZS0+aGFuZGxlRWRpdGluZ0tleWJvYXJk
RXZlbnQoZXZlbnQpKQpAQCAtMzcxLDYgKzM3MCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpo
YW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCYpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KKwogI2VuZGlmIC8vICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShHTElCKQog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQq
IGVsZW1lbnQpCkBAIC00MjAsNiArNDIwLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRE
aWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqIGVsZW1lbnQpCiB9CiAKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6Om92ZXJmbG93U2Nyb2xsUG9zaXRp
b25DaGFuZ2VkKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNDI5LDYgKzQzMCw3IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzdWJGcmFtZVNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpCiB7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKwogI2VuZGlmCiAKIHN0YXRpYyBib29sIGdldEFj
dGlvblR5cGVGb3JLZXlFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCwgV0tJbnB1dEZpZWxkQWN0
aW9uVHlwZSYgdHlwZSkKQEAgLTU0OSwyMCArNTUxLDI1IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxXZWJDb3JlOjpH
cmFtCiAgICAgKmJhZEdyYW1tYXJMZW5ndGggPSByZXN1bHRMZW5ndGg7CiB9CiAKLXN0YXRpYyBp
bnQzMl90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3N0YXRpYyBDaGFyYWN0ZXJDb3VudCBpbnNlcnRp
b25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gY3Vy
cmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdy
YXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICByZXR1cm4g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVj
dGlvblN0YXJ0KS5nZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydEJvdW5kYXJ5ID0g
bWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7
CisgICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IHx8ICFwYXJhZ3JhcGhTdGFydCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnNlbGVjdGlvblN0
YXJ0Qm91bmRhcnksICpwYXJhZ3JhcGhTdGFydCB9KTsKIH0KIAogI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCisKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVu
dDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBPcHRpb25TZXQ8
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiByZXN1bHRzOwogICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3RyaW5nVmlldy50b1N0cmluZ1dpdGhvdXRDb3B5aW5n
KCksIGNoZWNraW5nVHlwZXMsIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3Vy
cmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1RleHRPZlBhcmFn
cmFwaDo6UmVwbHkocmVzdWx0cykpOwogICAgIHJldHVybiByZXN1bHRzOwogfQorCiAjZW5kaWYK
IAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
Zyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdy
YW1tYXJEZXRhaWwpCkBAIC02MTYsMTUgKzYyMywxMyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
c2V0SW5wdXRNZXRob2RTdGF0ZShFbGVtZW50KiBlbGVtZW50KQogCiBib29sIFdlYkVkaXRvckNs
aWVudDo6c3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKQogewotI2lmIFBMQVRGT1JNKEdUSykKLSNp
ZiBQTEFURk9STShYMTEpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEpCiAgICAg
aWYgKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSA9PSBQbGF0Zm9ybURp
c3BsYXk6OlR5cGU6OlgxMSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSNpZiBQTEFU
Rk9STShXQVlMQU5EKQorI2lmIFBMQVRGT1JNKEdUSykgJiYgUExBVEZPUk0oV0FZTEFORCkKICAg
ICBpZiAoUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3Jt
RGlzcGxheTo6VHlwZTo6V2F5bGFuZCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKICNl
bmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMDhmMTUyYzFiYTM4ZjllY2RmNWZmNGM3MmUwYWY0NWZi
ODY1MWI2My4uZDhhYjlkNjEzODZkZTJkMTA2MDg5ZWE3MWE1YTg3ZDgyNTQ2ZDY5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTU0MjQsNiAr
NTQyNCw3IEBAIHZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uQXN5bmMoKQogI2VuZGlm
IC8vIFBMQVRGT1JNKENPQ09BKQogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUp
CisKIHN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKFdlYlBhZ2UmIHBhZ2UpCiB7
CiAgICAgRnJhbWUmIHRhcmdldEZyYW1lID0gcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTU0NjMsNyArNTQ2NCw3IEBAIHZvaWQgV2Vi
UGFnZTo6ZGVsZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3Rl
ckNvdW50KQogCiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKTsKICAgICBhdXRvIHN1cnJvdW5kaW5nUmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRPZkVkaXRh
YmxlQ29udGVudChzZWxlY3Rpb25TdGFydCksIHNlbGVjdGlvblN0YXJ0KTsKLSAgICBhdXRvIGN1
cnNvclBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdXJyb3VuZGluZ1Jhbmdl
LmdldCgpKTsKKyAgICBhdXRvIGN1cnNvclBvc2l0aW9uID0gV2ViQ29yZTo6Y2hhcmFjdGVyQ291
bnQoKnN1cnJvdW5kaW5nUmFuZ2UpOwogICAgIGF1dG8mIHJvb3ROb2RlID0gc3Vycm91bmRpbmdS
YW5nZS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwogICAgIGF1dG8g
c2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3Ro
KCZyb290Tm9kZSwgY3Vyc29yUG9zaXRpb24gKyBvZmZzZXQsIGNoYXJhY3RlckNvdW50KTsKICAg
ICBpZiAoIXNlbGVjdGlvblJhbmdlKQpAQCAtNTQ3NSw2ICs1NDc2LDcgQEAgdm9pZCBXZWJQYWdl
OjpkZWxldGVTdXJyb3VuZGluZyhpbnQ2NF90IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVyQ291
bnQpCiAgICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNldElnbm9yZVNlbGVjdGlvbkNoYW5nZXMo
ZmFsc2UpOwogICAgIHNlbmRFZGl0b3JTdGF0ZVVwZGF0ZSgpOwogfQorCiAjZW5kaWYKIAogdm9p
ZCBXZWJQYWdlOjpkaWRBcHBseVN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggY2YzMjIyZThhMGUxNDdmOTRlYjhk
ZjJhNWVhODYzZjgzZDBkMTFkMC4uZmE5MzEyNDNlZTIyNzA3MmI5NWYyYjA4NDEzOWUyYmFiZDA2
ZjI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KQEAgLTE5ODksMTMgKzE5ODksMTYgQEAgdm9pZCBXZWJQYWdlOjpzdG9yZVNl
bGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRTdG9yZSkKICAgICB9CiB9CiAKLXN0
YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG1hdGNoVGV4dCwg
UmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSkKK3N0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBv
c2l0aW9uLCBjb25zdCBTdHJpbmcmIG1hdGNoVGV4dCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQogewotICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCisgICAgYXV0byBsaXZlUmFu
Z2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgIGlmICghbGl2ZVJhbmdlKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNl
bGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCksIHNlbGVjdGlvblJhbmdlLT5zdGFydFBvc2l0
aW9uKCksIHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpOwotICAgIHVuc2lnbmVkIHRhcmdldE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgocmFuZ2UucHRyKCksIHRydWUpOwotICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWluVGV4dCgq
c2VsZWN0aW9uUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOworICAgIFNpbXBs
ZVJhbmdlIHJhbmdlIHsgKmxpdmVSYW5nZSB9OworICAgIGF1dG8gYm91bmRhcnlQb2ludCA9IG1h
a2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIWJvdW5kYXJ5UG9pbnQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0
KHJhbmdlLCBtYXRjaFRleHQsIHsgfSwgY2hhcmFjdGVyQ291bnQoeyByYW5nZS5zdGFydCwgKmJv
dW5kYXJ5UG9pbnQgfSwgdHJ1ZSkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRTZWxl
Y3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBD
YWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC0yMDIyLDcgKzIwMjUsNyBAQCB2b2lkIFdlYlBhZ2U6
OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3Qg
U3RyaW5nJiB0ZQogCiAgICAgaWYgKHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2UucHRyKCkpICE9
IHRleHQpIHsKICAgICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBmb3IgYSByYW5nZSB3aGljaCBpcyB0
aGUgY2xvc2VzdCB0byB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBzZWxlY3Rpb24gcmFuZ2UgdGhh
dCBtYXRjaGVzIHRoZSBwYXNzZWQgaW4gdGV4dC4KLSAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdl
ID0gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChzdGFydFBvc2l0aW9uLCB0ZXh0LCBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdl
ID0gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChzdGFydFBvc2l0aW9uLCB0ZXh0LCBzZWxl
Y3Rpb24pKSB7CiAgICAgICAgICAgICBpZiAoIXdvcmRSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAg
ICAgICAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoKndvcmRSYW5nZSk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KaW5kZXggM2EwZGM0NTIwMTc2YzRjYjM5ZDE4Y2Q1MTAyMmEwNGViMDdjZDc4Mi4uMmM1
ODk2ZGY3ODU3NTg2NjEwZDJhM2E2NTU2ZDU4MTljZjZmZmU5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE0MCwxOSAr
MTQwLDIyIEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUs
IEVkaXRvclN0YXRlJiByZXN1bHQsIEluY2x1ZGVQb3N0CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGF1dG8mIHBvc3RMYXlvdXREYXRhID0gcmVzdWx0LnBvc3RMYXlvdXRE
YXRhKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rp
b24udmlzaWJsZUVuZCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgIGF1dG8gc2VsZWN0
aW9uU3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKKyAg
ICBhdXRvIHNlbGVjdGlvbkVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbi52aXNpYmxl
RW5kKCkpOworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFy
dE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7CisKKyAgICBpZiAoIXNlbGVjdGlvblN0YXJ0
Qm91bmRhcnkgfHwgIXNlbGVjdGlvbkVuZCB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgICAgIHJl
dHVybjsKIAotICAgIHBvc3RMYXlvdXREYXRhLmNhbmRpZGF0ZVJlcXVlc3RTdGFydFBvc2l0aW9u
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNl
bGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVu
Z3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvbkVuZCkuZ2V0KCkpIC0gcG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVxdWVzdFN0
YXJ0UG9zaXRpb247CisgICAgcG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9z
aXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0
Qm91bmRhcnkgfSk7CisgICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gY2hh
cmFjdGVyQ291bnQoeyAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSwgKnNlbGVjdGlvbkVuZCB9KTsK
ICAgICBwb3N0TGF5b3V0RGF0YS5wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9
IHBsYWluVGV4dChmcmFtZS5lZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0
KCkuZ2V0KCkpOwogICAgIHBvc3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3Qg
PSBmcmFtZS5lZGl0b3IoKS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQppbmRleCA3YzUwNmZjNmE3YTMxYmYzNzdjYTY1ZGM2NTEwNDRmNDFjZjlkZjEwLi5j
YTQ3OTMxMDU0YjgwMjYyNjg3M2UzZjUzZmI1ZWUzMDU0ZTk4NTEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tCkBAIC0xMDMxLDE2ICsxMDMxLDE5IEBAIHN0YXRpYyBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiBjb3JlKE5TQXJyYXkgKmluY29taW5nUmVzdWx0cywgT3B0aW9uU2V0PFRleHRDCiAgICAg
cmV0dXJuIHJlc3VsdHM7CiB9CiAKLXN0YXRpYyBpbnQgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVu
dFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQorc3Rh
dGljIE5TVUludGVnZXIgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVj
dGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxl
UG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0
KTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdy
YXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0Qm91
bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJh
Z3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9u
U3RhcnQpKTsKKyAgICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfHwgIXBhcmFncmFwaFN0
YXJ0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqcGFy
YWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IH0pOwogfQogCiBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0
cmluZ1ZpZXcgc3RyaW5nLCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY29yZUNoZWNraW5n
VHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7Ci0gICAg
TlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtl
eSA6ICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZy
b21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSB9OworICAgIE5TRGljdGlvbmFy
eSAqb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiBAKGluc2Vy
dGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpIH07CiAgICAg
cmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGNoZWNrU3Ry
aW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCkgcmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBlczoobnNUZXh0Q2hlY2tpbmdUeXBlcyhj
b3JlQ2hlY2tpbmdUeXBlcykgfCBOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSkgb3B0aW9u
czpvcHRpb25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWco
KSBvcnRob2dyYXBoeTpOVUxMIHdvcmRDb3VudDpOVUxMXSwgY29yZUNoZWNraW5nVHlwZXMpOwog
fQogCkBAIC0xMDgzLDcgKzEwODYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleAogICAgIE5T
U3RyaW5nICpsYW5ndWFnZSA9IG5pbDsKICAgICBOU09ydGhvZ3JhcGh5KiBvcnRob2dyYXBoeSA9
IG5pbDsKICAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFy
ZWRTcGVsbENoZWNrZXJdOwotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5TVGV4dENo
ZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZElu
dGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9u
KV0gfTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2Vy
dGlvblBvaW50S2V5IDogQChpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJl
bnRTZWxlY3Rpb24pKSB9OwogICAgIGlmIChjb250ZXh0Lmxlbmd0aCgpKSB7CiAgICAgICAgIFtj
aGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5s
ZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0aW9uczpvcHRp
b25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRo
b2dyYXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOwogICAgICAgICBsYW5ndWFnZSA9IFtj
aGVja2VyIGxhbmd1YWdlRm9yV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3Ro
KCkpIGluU3RyaW5nOmNvbnRleHQgb3J0aG9ncmFwaHk6b3J0aG9ncmFwaHldOwpAQCAtMTExNiwy
NCArMTExOSwyMCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZQogICAgIGlmICghW21fd2ViVmll
dyBzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlc10pCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoIXNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShb
bV93ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisKKyAgICBhdXRvKiBmcmFtZSA9IGNv
cmUoW21fd2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fbGFzdFNlbGVjdGlvbkZvclJlcXVlc3RlZENhbmRpZGF0
ZXMgPSBzZWxlY3Rpb247CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBz
ZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVu
ZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFw
aFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisgICAg
YXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRv
IHNlbGVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSksICptYWtlQm91
bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7CisgICAgYXV0byBzZWxlY3Rpb25MZW5ndGgg
PSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICpt
YWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSB9KTsKIAotICAgIGludCBs
ZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxlbmd0
aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFy
YWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwotICAgIG1fcmFuZ2VGb3JDYW5kaWRh
dGVzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rp
b25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAgICBtX3JhbmdlRm9yQ2FuZGlkYXRl
cyA9IE5TTWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIHNlbGVjdGlv
bkxlbmd0aCk7CiAgICAgbV9wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9IHBs
YWluVGV4dChmcmFtZS0+ZWRpdG9yKCkuY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgp
LmdldCgpKTsKIAogICAgIE5TVGV4dENoZWNraW5nVHlwZXMgY2hlY2tpbmdUeXBlcyA9IE5TVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgTlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQgfCBO
U1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KaW5kZXggYmMzYmViZGYyNjJmYTRlY2ZiMDE4NzhiM2MyYjBjNTVj
M2VhOTAxNS4uZTRjNmFhMDA1YjlmOWQ4OTlmODE2YTNhZGMxNDlmNTE0ZmIxYTM0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC04MzUsMjQgKzgz
NSwxOSBAQCAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNS
YW5nZSluc3JhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOgogICAgICAgICAvLyBUaGF0IGZpdHMgd2l0
aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNvbnRleHQuCiAgICAgICAgIGF1dG8qIGVsZW1l
bnQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
T3JEb2N1bWVudEVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuIG5pbDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4g
V2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChlbGVtZW50
LCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7CiAgICAgfQogCiAgICAgQVNTRVJU
KHJhbmdlSXNSZWxhdGl2ZVRvID09IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpQYXJhZ3JhcGgpOwog
Ci0gICAgY29uc3QgYXV0byYgc2VsZWN0aW9uID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBzZWxlY3RlZFJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJh
bmdlKQorICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9m
UGFyYWdyYXBoKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpKSk7CisgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgYXV0byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVy
LT50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBw
YXJhZ3JhcGhSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKSksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwotICAgIGlmICghcGFyYWdyYXBo
UmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgcm9vdE5vZGUgPSBw
YXJhZ3JhcGhSYW5nZS5nZXQoKS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9k
ZSgpOwotICAgIGludCBwYXJhZ3JhcGhTdGFydEluZGV4ID0gV2ViQ29yZTo6VGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50KCks
ICZyb290Tm9kZSwgMCwgJnBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBwYXJhZ3Jh
cGhSYW5nZS0+c3RhcnRPZmZzZXQoKSkucHRyKCkpOwotICAgIHJldHVybiBXZWJDb3JlOjpUZXh0
SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBo
U3RhcnRJbmRleCArIHN0YXRpY19jYXN0PGludD4obnNyYW5nZS5sb2NhdGlvbiksIG5zcmFuZ2Uu
bGVuZ3RoKTsKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0SW5kZXggPSBXZWJDb3JlOjpjaGFyYWN0
ZXJDb3VudCh7IHsgcm9vdE5vZGUsIDAgfSwgKnBhcmFncmFwaFN0YXJ0IH0pOworICAgIHJldHVy
biBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290
Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCArIG5zcmFuZ2UubG9jYXRpb24sIG5zcmFuZ2UubGVu
Z3RoKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1Jh
bmdlKW5zcmFuZ2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394179</attachid>
            <date>2020-03-21 14:47:25 -0700</date>
            <delta_ts>2020-03-21 15:57:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209207-20200321144724.patch</filename>
            <type>text/plain</type>
            <size>97280</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThmZmUxMWY3NTQ0NWUw
ZTAyNDUxMTIyM2FhOTVkNGE5ODg2YTlkZS4uZGRmMmFkZGIxYTk3Mjg5NzczN2RlN2M3OTRmNmYw
OTQ4ZTUxZjUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTAzLTIxICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVuYW1lZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoIHRvIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJh
bmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChX
ZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmlj
YXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSHlwZXJsaW5rLmNwcDoKKyAgICAgICAgKHJhbmdlTGVuZ3RoRm9yT2JqZWN0KTogRGl0dG8u
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252
ZXJ0VG9OU1JhbmdlOl0pOiBEaXR0by4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5oOiBF
eHBvcnQgYW5vdGhlciBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICBVc2UgY2hh
cmFjdGVyQ291bnQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnJh
bmdlTGVuZ3RoIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6Om9mZnNldFRvIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdFbmQgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5n
dGggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwgY29uc3QpOiBEaXR0by4KKworICAg
ICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFj
dGVyQ291bnQpOiBMaWtlIHRoZSBiYW92ZSBidXQgdGhlIGFyZ3VtZW50IGlzIFNpbXBsZVJhbmdl
CisgICAgICAgIGFuZCByZXR1cm4gaXMgQ2hhcmFjdGVyQ291bnQuIEV2ZW4gdGhvdWdoIGVhY2gg
aW5kaXZpZHVhbCBub2RlIGlzIGxpbWl0ZWQKKyAgICAgICAgdG8gMzItYml0IHNpemUsIHJhbmdl
cyBjb3ZlcmluZyBtdWx0aXBsZSBub2RlcyBjb3VsZCBoYXZlIGEgY291bnQgb2YKKyAgICAgICAg
Y2hhcmFjdGVycyB0aGF0IGV4Y2VlZHMgMzIgYml0cywgc28gQ2hhcmFjdGVyQ291bnQgaXMgc2l6
ZV90LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKworICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmg6IEFkZGVkIGNoYXJhY3RlckNvdW50IGZ1bmN0aW9uLAorICAgICAgICBDaGFy
YWN0ZXJDb3VudCBhbmQgQ2hhcmFjdGVyUmFuZ2UgdHlwZXMuIFJlbW92ZWQgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aC4KKyAgICAgICAgQWRkZWQgRklYTUUgY29tbWVudHMgYWJvdXQgdGhlIG5l
eHQgc3RlcHMuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludCk6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmg6IEFkZGVkIG1ha2VCb3VuZGFyeVBvaW50LiBBbHNvIHJlbW92
ZWQKKyAgICAgICAgZXh0cmFuZW91cyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgbW92ZWQgc29t
ZSBmdW5jdGlvbiBib2RpZXMgb3V0IG9mIHRoZQorICAgICAgICBjbGFzcyBkZWZpbml0aW9uLgor
CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBwdHJkaWZm
X3QuCisgICAgICAgIFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVVbml0cy5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RpY3Rpb25hcnlMb29rdXAubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0
aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rh
dGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dERpc3RhbmNlKTogRGl0
dG8uCisKIDIwMjAtMDMtMjEgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1ha2UgdGhlIE1lZGlhU2FtcGxlOjp0b0pTT05TdHJpbmcgbWV0aG9kIGdl
bmVyaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMjMyODM4MzFlOTlkOTg4N2ViYzlhOTI2OWQzZmZmZmEwMDM5ZWQ2
Mi4uNDEyYmI4MzFmMzQ4MzQwMTc0NTg2ODdiZTE1ZjkxZWEyZmNjZDQyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMyBAQAorMjAyMC0wMy0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgQ2hhbmdlIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVp
cmUgYSBsaXZlIHJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDkyMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0
aW5nUmFuZ2U6OnRvUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKTogQ2hhbmdlZCByZXR1cm4gdHlw
ZSB0bworICAgICAgICBDaGFyYWN0ZXJDb3VudCBhbmQgdXNlIGNoYXJhY3RlckNvdW50LgorICAg
ICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKTog
VHdlYWtlZCAjaWYuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0Ojp0YXJnZXRGcmFtZUZvckVkaXRpbmcpOiBVc2UgY2hhcmFjdGVyQ291
bnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAg
ICAgICAoV2ViS2l0OjpyYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KTogRGl0dG8uCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogRGl0dG8uCisKIDIwMjAt
MDMtMjAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
W2lQYWRPU10gWWFob28hIHNlYXJjaCByZXN1bHRzIGFyZSBzb21ldGltZXMgem9vbWVkIGluIGEg
bGl0dGxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggN2FhOWJkZDRmODM2YTkyMDc1
MjcxMjI0MGRjZTdlMDU5YzA2NWVjYi4uMjZiNzQxZDUyMzIwZGZiNWNkOGFmNDBhZmZiYTM2Y2Q2
ZThjODA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDIwLTAzLTE3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFu
Z2UgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoaW5zZXJ0aW9uUG9pbnRGcm9t
Q3VycmVudFNlbGVjdGlvbik6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvRE9N
UmFuZ2U6cmFuZ2VJc1JlbGF0aXZlVG86XSk6IERpdHRvLgorCiAyMDIwLTAzLTIwICBKZXIgTm9i
bGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSBtZWRpYSBjYWNoZSBk
aXJlY3RvcnkgaXMgY3JlYXRlZCBiZWZvcmUgcGFzc2luZyB0byBBVlVSTEFzc2V0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggMjg4MDM0
MDE5NmQxNjlhM2RmMWMwMGFkZmE4Zjk2Zjg0YzRkODJiMi4uZjRkNWMxZTMzNTlkM2E1MWY2MDNm
NWFhZDQwYzI2NmY1NjIyNDVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xOTM4LDE4ICsxOTM4LDE2IEBAIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5nZU1hdGNoZXNUZXh0TmVhclJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlCiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IG1hdGNoVGV4dC5sZW5ndGgoKTsK
ICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhP
ZmZzZXQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpLCAt
dGV4dExlbmd0aCk7CiAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBv
c2l0aW9uV2l0aE9mZnNldChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ob3JpZ2luYWxSYW5n
ZS5zdGFydCksIDIgKiB0ZXh0TGVuZ3RoKTsKLQogICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICBzdGFydFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG9yaWdpbmFsUmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpKTsKICAgICBpZiAoZW5kUG9zaXRp
b24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uSW5PckFmdGVy
Tm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwogCi0gICAgYXV0byBzZWFy
Y2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pOwotICAgIGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgU2ltcGxlUmFu
Z2Ugc2VhcmNoUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRQb3NpdGlvbiksICptYWtl
Qm91bmRhcnlQb2ludChlbmRQb3NpdGlvbikgfTsKKyAgICBpZiAoc2VhcmNoUmFuZ2UuY29sbGFw
c2VkKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBzdGFydFBvc2l0aW9uLCBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ob3JpZ2luYWxSYW5nZS5zdGFydCkpOwotICAgIHVuc2lnbmVkIHRhcmdldE9m
ZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIHRydWUpOworICAg
IGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS5zdGFydCwg
b3JpZ2luYWxSYW5nZS5zdGFydCB9LCB0cnVlKTsKICAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFp
blRleHQoc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCkBA
IC0xOTkyLDEyICsxOTkwLDExIEBAIHN0YXRpYyBib29sIGNoYXJhY3Rlck9mZnNldHNJbk9yZGVy
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0MSwgY29uCiBzdGF0aWMgTm9k
ZSogcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSwg
aW50JiBvZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkKIHsKICAgICAvLyBVc2UgdGhpcyBmdW5j
dGlvbiB0byBpbmNsdWRlIHRoZSByZXBsYWNlZCBub2RlIGl0c2VsZiBpbiB0aGUgcmFuZ2Ugd2Ug
YXJlIGNyZWF0aW5nLgotICAgIGlmICghcmVwbGFjZWROb2RlKQorICAgIGF1dG8gbm9kZVJhbmdl
ID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMocmVwbGFjZWROb2RlKTsKKyAg
ICBpZiAoIW5vZGVSYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgUmVm
UHRyPFJhbmdlPiBub2RlUmFuZ2UgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50
cyhyZXBsYWNlZE5vZGUpOwotICAgIGludCBub2RlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChub2RlUmFuZ2UuZ2V0KCkpOwotICAgIG9mZnNldCA9IGNoYXJhY3RlckNvdW50IDw9
IG5vZGVMZW5ndGggPyByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSA6IHJlcGxhY2Vk
Tm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMTsKKyAgICBib29sIGlzSW5Ob2RlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlckNvdW50KSA8PSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3Vu
dCgqbm9kZVJhbmdlKTsKKyAgICBvZmZzZXQgPSByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKSArIChpc0luTm9kZSA/IDAgOiAxKTsKICAgICByZXR1cm4gcmVwbGFjZWROb2RlLT5wYXJl
bnROb2RlKCk7CiB9CiAKQEAgLTI0MTMsMTQgKzI0MTAsMTYgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBj
aGFyYWMKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAogICAgIC8vIFdl
IGRvbid0IGFsd2F5cyBtb3ZlIG9uZSAnY2hhcmFjdGVyJyBhdCBhIHRpbWUgc2luY2UgdGhlcmUg
bWlnaHQgYmUgY29tcG9zZWQgY2hhcmFjdGVycy4KLSAgICBpbnQgbmV4dE9mZnNldCA9IFBvc2l0
aW9uOjp1bmNoZWNrZWROZXh0T2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJP
ZmZzZXQub2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gUG9zaXRpb246OnVuY2hl
Y2tlZE5leHRPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZz
ZXQpOwogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFu
ZE9mZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIG5leHRPZmZzZXQpOwogICAgIAogICAgIC8v
IFRvIGJlIGNvbnNpc3RlbnQgd2l0aCBWaXNpYmxlUG9zaXRpb24sIHdlIHNob3VsZCBjb25zaWRl
ciB0aGUgY2FzZSB0aGF0IGN1cnJlbnQgbm9kZSBlbmQgdG8gbmV4dCBub2RlIHN0YXJ0IGNvdW50
cyAxIG9mZnNldC4KICAgICBpZiAoIWlnbm9yZU5leHROb2RlU3RhcnQgJiYgIW5leHQuaXNOdWxs
KCkgJiYgIWlzUmVwbGFjZWROb2RlT3JCUihuZXh0Lm5vZGUpICYmIG5leHQubm9kZSAhPSBjaGFy
YWN0ZXJPZmZzZXQubm9kZSkgewotICAgICAgICBpbnQgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zm
c2V0LCBuZXh0KS5nZXQoKSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiBuZXh0T2Zmc2V0IC0gY2hh
cmFjdGVyT2Zmc2V0Lm9mZnNldCkKLSAgICAgICAgICAgIG5leHQgPSBjaGFyYWN0ZXJPZmZzZXRG
b3JOb2RlQW5kT2Zmc2V0KCpuZXh0Lm5vZGUsIDAsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0
KTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9m
ZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBuZXh0KSkgeworICAgICAgICAgICAgYXV0byBsZW5ndGgg
PSBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IG5leHRP
ZmZzZXQgLSBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0KQorICAgICAgICAgICAgICAgIG5leHQgPSBj
aGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpuZXh0Lm5vZGUsIDAsIFRyYXZlcnNlT3B0
aW9uSW5jbHVkZVN0YXJ0KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICByZXR1cm4gbmV4
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0
Q2FjaGVBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RD
YWNoZUF0ay5jcHAKaW5kZXggZmUxMjYwZDdmZGNmNjg4OThhZDg1NTc4NGIwNTFkM2Q3MjFkMTA2
Zi4uZDJkYzY3ZTkxZmI2YjRkMjlkMWVmMjFkZjc3MTMwNTNkNmU5MjlhNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAK
QEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxh
dGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZQogICAgICAgICAvLyB0
aGUgY3VycmVudCBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBlbnN1cmUgd2UgZW1pdCB0aGUKICAg
ICAgICAgLy8gcmlnaHQgb2Zmc2V0IChlLmcuIG11bHRpbGluZSB0ZXh0IGFyZWFzKS4KICAgICAg
ICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUtPnBhcmVudE5vZGUo
KSwgMCwgbm9kZSwgMCk7Ci0gICAgICAgIG9mZnNldFRvRW1pdCA9IG9mZnNldCArIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCkpOworICAgICAgICBvZmZzZXRUb0VtaXQgPSBv
ZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpKTsKICAgICB9CiAK
ICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod3JhcHBlciwgZGV0YWlsLmRhdGEoKSwgb2Zmc2V0
VG9FbWl0LCB0ZXh0VG9FbWl0Lmxlbmd0aCgpLCB0ZXh0VG9FbWl0LnV0ZjgoKS5kYXRhKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUh5cGVybGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAppbmRleCBhNDYxYzFmYWRhZjhjNzI1ZGNkYjRmZTll
NWY4MDBmYjhiNjgyOWVkLi44ZDk2ZDJhNjE3MjVjYjAzNWJjYWYyMDhjMzk3MzE0ODI5NDg5ZDQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIHN0YXRp
YyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRPYmplY3QoQXRrSHlwZXJs
aW5rKiBsaW5rLCBnaW50IGluCiBzdGF0aWMgZ2ludCByYW5nZUxlbmd0aEZvck9iamVjdChBY2Nl
c3NpYmlsaXR5T2JqZWN0JiBvYmosIFJhbmdlKiByYW5nZSkKIHsKICAgICAvLyBUaGlzIGlzIGdv
aW5nIHRvIGJlIHRoZSBhY3R1YWwgbGVuZ3RoIGluIG1vc3Qgb2YgdGhlIGNhc2VzCi0gICAgaW50
IGJhc2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLCB0cnVlKTsKKyAg
ICBpbnQgYmFzZUxlbmd0aCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgdHJ1ZSk7CiAKICAgICAv
LyBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGh5cGVybGluayBiZWxvbmdzIHRvIGEgbGlzdCBp
dGVtLgogICAgIC8vIElmIHNvLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBsZW5ndGggb2YgdGhl
IGl0ZW0ncyBtYXJrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAppbmRleCBi
MjcxNWM3YzUzY2FlOWQwNGFmM2U0YzBmOTNhZjk3NWY2M2RiNTI1Li4xNTRkYzNjMDI3NzZkYTQ4
ODM0N2MyYmEwMWRmZjU4MjU2Yjg1YTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRl
eHQuY3BwCkBAIC00MTAsOSArNDEwLDkgQEAgc3RhdGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0
c0Zvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmwKIAogICAg
IC8vIFNldCB2YWx1ZXMgZm9yIHN0YXJ0IG9mZnNldHMgYW5kIGNhbGN1bGF0ZSBpbml0aWFsIHJh
bmdlIGxlbmd0aC4KICAgICAvLyBUaGVzZSB2YWx1ZXMgbWlnaHQgYmUgYWRqdXN0ZWQgbGF0ZXIg
dG8gY292ZXIgc3BlY2lhbCBjYXNlcy4KLSAgICBzdGFydE9mZnNldCA9IHdlYkNvcmVPZmZzZXRU
b0F0a09mZnNldChjb3JlT2JqZWN0LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlSW5Q
YXJlbnQucHRyKCksIHRydWUpKTsKKyAgICBzdGFydE9mZnNldCA9IHdlYkNvcmVPZmZzZXRUb0F0
a09mZnNldChjb3JlT2JqZWN0LCBjaGFyYWN0ZXJDb3VudChyYW5nZUluUGFyZW50LmdldCgpLCB0
cnVlKSk7CiAgICAgYXV0byBub2RlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50
KCksIG5vZGVSYW5nZVN0YXJ0LCBub2RlUmFuZ2VFbmQpOwotICAgIGludCByYW5nZUxlbmd0aCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobm9kZVJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICBp
bnQgcmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChub2RlUmFuZ2UuZ2V0KCksIHRydWUpOwog
CiAgICAgLy8gU3BlY2lhbCBjYXNlcyB0aGF0IGFyZSBvbmx5IHJlbGV2YW50IHdoZW4gd29ya2lu
ZyB3aXRoICpfRU5EIGJvdW5kYXJpZXMuCiAgICAgaWYgKHNlbGVjdGlvbi5hZmZpbml0eSgpID09
IFVQU1RSRUFNKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggNTYzOTJjMGJkODNkMWEyYTdjYjc2
YTc1NGI5ZWI4ODNmMjBjZmY1ZS4uMzk0ZDQ4NjNmMDNhMmY4YTU0MzE0ZmFiMDc3OTJiNmFlMmYw
MWYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMjQ3LDEwICsyNDcsMTAgQEAgQVhDb3JlT2Jq
ZWN0KiBvYmplY3RGb2N1c2VkQW5kQ2FyZXRPZmZzZXRVbmlnbm9yZWQoQVhDb3JlT2JqZWN0KiBy
ZWZlcmVuY2VPYmplY3QKICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICBlbHNlIGlmICghaXNTdGFy
dE9mTGluZShlbmRQb3NpdGlvbikpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1h
a2VSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbi5wcmV2aW91cygpKTsKLSAgICAgICAg
b2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSkgKyAx
OworICAgICAgICBvZmZzZXQgPSAocmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIHRydWUp
IDogMCkgKyAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBt
YWtlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotICAgICAgICBvZmZzZXQgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKTsKKyAgICAgICAgb2Zm
c2V0ID0gcmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIHRydWUpIDogMDsKICAgICB9CiAK
ICAgICByZXR1cm4gZmlyc3RVbmlnbm9yZWRQYXJlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tCmluZGV4IDEwMWViMmQ4Mjc5Nzk0ZGE5MTM0ZDI4MTE4MGRlYTVjYWI4
MGRjNWQuLjFmYWU1YWZjOWI5MjYxYWQ3YWY1YTE4YTUzZmZmMzQ0OGFjNmQyNjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yMzEwLDMwICsyMzEwLDMwIEBA
IC0gKE5TQXJyYXkgKilhcnJheU9mVGV4dEZvclRleHRNYXJrZXJzOihOU0FycmF5ICopbWFya2Vy
cyBhdHRyaWJ1dGVkOihCT09MKWF0dHJpCiAgICAgcmV0dXJuIFthcnJheSBhdXRvcmVsZWFzZV07
CiB9CiAKLS0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlICopcmFuZ2UKKy0gKE5T
UmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlICopbGl2ZVJhbmdlCiB7Ci0gICAgaWYgKCFy
YW5nZSkKKyAgICBpZiAoIWxpdmVSYW5nZSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmRvY3VtZW50KCk7Ci0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGRvY3VtZW50
LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7
Ci0gICAgRWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRv
Y3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBTaW1wbGVSYW5nZSByYW5nZSB7ICpsaXZl
UmFuZ2UgfTsKKworICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKTsK
KyAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworCisgICAgYXV0byogcm9v
dEVkaXRhYmxlRWxlbWVudCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRp
dGFibGVFbGVtZW50KCk7CisgICAgYXV0byogc2NvcGUgPSByb290RWRpdGFibGVFbGVtZW50ID8g
cm9vdEVkaXRhYmxlRWxlbWVudCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOworICAgIGlm
ICghc2NvcGUpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAog
ICAgIC8vIE1vdXNlIGV2ZW50cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFu
IE5TUmFuZ2UgZm9yIGEgcG9ydGlvbiBvZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGlu
c2lkZSB0aGUgY3VycmVudCBlZGl0YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdl
IGRvbid0IHByb2R1Y2UKKyAgICAvLyB0aGF0IGlzIG5vdCBpbnNpZGUgdGhlIGN1cnJlbnQgZWRp
dGFibGUgcmVnaW9uLiBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKICAgICAv
LyBwb3RlbnRpYWxseSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1Y2ggcmVxdWVz
dHMuCi0gICAgaWYgKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCkuaXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm4g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgaWYgKCZyYW5nZS0+ZW5kQ29udGFpbmVy
KCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWluZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29w
ZSkpCisgICAgaWYgKCFzY29wZS0+Y29udGFpbnMocmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigp
KSB8fCAhc2NvcGUtPmNvbnRhaW5zKHJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpKQogICAgICAg
ICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBhdXRvIHRlc3RSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCAmcmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQoJnRlc3RS
YW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgaW50IHN0YXJ0UG9zaXRpb24g
PSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSk7Ci0gICAgdGVzdFJh
bmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOwot
ICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBp
bnQgZW5kUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIo
KSk7Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIC0g
c3RhcnRQb3NpdGlvbik7CisgICAgcmV0dXJuIE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsg
eyAqc2NvcGUsIDAgfSwgcmFuZ2Uuc3RhcnQgfSksIGNoYXJhY3RlckNvdW50KHJhbmdlKSk7CiB9
CiAKIC0gKFJlZlB0cjxSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggMTI3ZjJmMTg5NDY0YzEwYzQ5YTU1NDQ4NjZl
YWM0OTRkNGU4OGIyMy4uYWNkOTg1NWE4OTE5YzM3NmUxNTdkMWNlZDljNWRlZWQ3YTE5NTcyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTQyLDcgKzQyLDcgQEAgc3RydWN0IFNpbXBs
ZVJhbmdlIHsKIAogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gc3RhcnQgPT0g
ZW5kOyB9CiAKLSAgICBTaW1wbGVSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91
bmRhcnlQb2ludCYpOworICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlKGNvbnN0IEJvdW5k
YXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2lt
cGxlUmFuZ2UoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOwogCiAgICAgLy8gQ29u
dmVuaWVuY2Ugb3ZlcmxvYWRzIHRvIGhlbHAgd2l0aCB0cmFuc2l0aW9uIGZyb20gdXNpbmcgYSBs
b3Qgb2YgbGl2ZSByYW5nZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCBlYzIyMTZkN2FkOWYyYzM5MTA4NmU4ZWUw
NzE1N2QyZWNiYTA5NWQyLi5iN2EwODgxZTZmNGNlMzZmNjU5NTU2ZmM0YWJjYTM2MTZkMTEzYTM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAKQEAgLTU4MCw1MiArNTgwLDM4IEBAIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjptYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0
CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRU
b1JhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgQWx0
ZXJuYXRpdmVUZXh0VHlwZSBhbHRlcm5hdGl2ZVR5cGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXNUb0FkZCkKIHsKLSAgICBhdXRvIHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSByYW5nZS5jbG9uZVJhbmdlKCk7Ci0KLSAgICBzZXRT
dGFydChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLnB0cigpLCBzdGFydE9mUGFy
YWdyYXBoKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLnB0cigpLCBlbmRPZlBhcmFncmFwaChyYW5nZS5lbmRQb3Np
dGlvbigpKSk7Ci0KICAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJh
bmdlV2l0aEFsdGVybmF0aXZlLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2Uu
Ci0gICAgLy8gSG93ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZh
bHVlIG9mIHJhbmdlV2l0aEFsdGVybmF0aXZlIGlzIG5vdCB2YWxpZCBhbnltb3JlLgotICAgIC8v
IFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3Jl
IHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZQotICAgIC8vIHJlbGF0
aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdl
IHVzZSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3JlIHRo
aXMgdmFsdWUuIEluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJz
dCBjcmVhdGUgYSByYW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBh
cmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCi0g
ICAgYXV0byBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQ
b3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0
aW9uKCkpOwotCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRp
dmUgPSByYW5nZS5zdGFydFBvc2l0aW9uKCk7Ci0gICAgaWYgKCFzdGFydFBvc2l0aW9uT2ZSYW5n
ZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBh
dXRvIHNldEVuZFJlc3VsdCA9IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5n
ZS0+c2V0RW5kKCpzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJO
b2RlKCksIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbXB1dGVPZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSk7Ci0gICAgaWYgKHNldEVuZFJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuOworICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxh
Y2VtZW50LHN0b3JlIHRoZSBzdGFydCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9z
aXRpb24KKyAgICAvLyBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguCiAKICAgICAvLyBUYWtl
IG5vdGUgb2YgdGhlIGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFk
ZCBtYXJrZXIgYWZ0ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAgaW50IGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChj
b3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UucHRyKCkpOworICAgIGF1dG8g
Y29ycmVjdGlvblN0YXJ0UG9zaXRpb24gPSByYW5nZS5zdGFydFBvc2l0aW9uKCk7CisgICAgYXV0
byBjb3JyZWN0aW9uU3RhcnQgeyBtYWtlQm91bmRhcnlQb2ludChjb3JyZWN0aW9uU3RhcnRQb3Np
dGlvbikgfTsKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0IHsgbWFrZUJvdW5kYXJ5UG9pbnQoc3Rh
cnRPZlBhcmFncmFwaChjb3JyZWN0aW9uU3RhcnRQb3NpdGlvbikpIH07CisgICAgaWYgKCFjb3Jy
ZWN0aW9uU3RhcnQgfHwgIXBhcmFncmFwaFN0YXJ0KQorICAgICAgICByZXR1cm47CisgICAgYXV0
byB0cmVlU2NvcGVSb290ID0gbWFrZVJlZihjb3JyZWN0aW9uU3RhcnQtPmNvbnRhaW5lci0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSk7CisgICAgQm91bmRhcnlQb2ludCB0cmVlU2NvcGVTdGFydCB7
IHRyZWVTY29wZVJvb3QuZ2V0KCksIDAgfTsKKyAgICBhdXRvIGNvcnJlY3Rpb25PZmZzZXRJblBh
cmFncmFwaCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqY29ycmVjdGlvblN0
YXJ0IH0pOworICAgIGF1dG8gcGFyYWdyYXBoT2Zmc2V0SW5UcmVlU2NvcGUgPSBjaGFyYWN0ZXJD
b3VudCh7IHRyZWVTY29wZVN0YXJ0LCAqcGFyYWdyYXBoU3RhcnQgfSk7CiAKLSAgICAvLyBDbG9u
ZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8g
a2VlcCB0aGUgb3JpZ2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIGF1dG8gcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUgPSByYW5nZS5jbG9uZVJhbmdlKCk7CisgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5j
ZSB0aGUgY2FsbGVyIG9mIG1heSBrZWVwIGEgcmVmZXJuZWNlIHRvIHRoZSBvcmlnaW5hbCByYW5n
ZSBhbmQgbW9kaWZ5IGl0LgorICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShy
YW5nZS5jbG9uZVJhbmdlKCksIGFsdGVybmF0aXZlKS0+YXBwbHkoKTsKIAotICAgIENvbnRhaW5l
ck5vZGUmIHJvb3ROb2RlID0gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3Rh
cnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwotICAgIGludCBwYXJhZ3JhcGhT
dGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChSYW5nZTo6Y3JlYXRlKHJvb3RO
b2RlLmRvY3VtZW50KCksICZyb290Tm9kZSwgMCwgJnBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24tPnN0YXJ0T2Zmc2V0KCkpLnB0cigpKTsKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kOjpjcmVhdGUocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGFsdGVybmF0aXZlKS0+YXBwbHkoKTsK
ICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNp
bmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0
IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxv
bmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1MzE1IEJ1Z3ppbGxhOiA4OTUyNgotICAgIGF1dG8gdXBk
YXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBUZXh0SXRlcmF0b3I6OnJh
bmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCwg
Y29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggKyBhbHRlcm5hdGl2ZS5sZW5ndGgoKSk7
CisgICAgYXV0byB1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgodHJlZVNjb3BlUm9vdC5wdHIo
KSwgcGFyYWdyYXBoT2Zmc2V0SW5UcmVlU2NvcGUsIGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFw
aCArIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uKQogICAgICAgICByZXR1cm47Ci0KICAgICBzZXRFbmQodXBk
YXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNl
bWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqdXBkYXRlZFBhcmFncmFwaFJhbmdl
Q29udGFpbmluZ0NvcnJlY3Rpb24sIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCBh
bHRlcm5hdGl2ZS5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVw
bGFjZW1lbnRSYW5nZS5nZXQoKSk7CisgICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpzdWJyYW5nZSgqdXBkYXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24sIGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOwog
CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KLSAgICBpZiAo
bmV3VGV4dCAhPSBhbHRlcm5hdGl2ZSkKKyAgICBpZiAocGxhaW5UZXh0KHJlcGxhY2VtZW50UmFu
Z2UuZ2V0KCkpICE9IGFsdGVybmF0aXZlKQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwotCisgICAgYXV0byYgbWFya2VycyA9IHJlcGxh
Y2VtZW50UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgZm9yIChhdXRvIG1h
cmtlclR5cGUgOiBtYXJrZXJUeXBlc1RvQWRkKQotICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigq
cmVwbGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVk
QWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOworICAgICAgICBt
YXJrZXJzLmFkZE1hcmtlcihyZXBsYWNlbWVudFJhbmdlLCBtYXJrZXJUeXBlLCBtYXJrZXJEZXNj
cmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJrZXJU
eXBlKSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAppbmRleCBmZTA3ZjU2MTYwOTcxYjMwY2I4M2UxMGIzMmMyNWQ3MDZkMDFiYzBi
Li4wOWEzNzQ5ZWEyYjdjM2U0NmY5ZTk2YjM0MGNiZTk0ZjEzYjk0OTFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAtMjIzLDE5ICsyMjMsMTQg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogewotICAgIC8vIHVw
ZGF0ZSBkb2N1bWVudCBsYXlvdXQgb25jZSBiZWZvcmUgcmVtb3Zpbmcgc3R5bGVzCi0gICAgLy8g
c28gdGhhdCB3ZSBhdm9pZCB0aGUgZXhwZW5zZSBvZiB1cGRhdGluZyBiZWZvcmUgZWFjaCBhbmQg
ZXZlcnkgY2FsbAotICAgIC8vIHRvIGNoZWNrIGEgY29tcHV0ZWQgc3R5bGUKKyAgICAvLyBVcGRh
dGUgZG9jdW1lbnQgbGF5b3V0IG9uY2UgYmVmb3JlIHJlbW92aW5nIHN0eWxlcyBzbyB0aGF0IHdl
IGF2b2lkIHRoZSBleHBlbnNlIG9mCisgICAgLy8gdXBkYXRpbmcgYmVmb3JlIGVhY2ggYW5kIGV2
ZXJ5IGNhbGwgdG8gY2hlY2sgYSBjb21wdXRlZCBzdHlsZS4KICAgICBkb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgLy8gZ2V0IHBvc2l0aW9u
cyB3ZSB3YW50IHRvIHVzZSBmb3IgYXBwbHlpbmcgc3R5bGUKICAgICBQb3NpdGlvbiBzdGFydCA9
IHN0YXJ0UG9zaXRpb24oKTsKICAgICBQb3NpdGlvbiBlbmQgPSBlbmRQb3NpdGlvbigpOwotICAg
IGlmIChjb21wYXJlUG9zaXRpb25zKGVuZCwgc3RhcnQpIDwgMCkgewotICAgICAgICBQb3NpdGlv
biBzd2FwID0gc3RhcnQ7Ci0gICAgICAgIHN0YXJ0ID0gZW5kOwotICAgICAgICBlbmQgPSBzd2Fw
OwotICAgIH0KKyAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhlbmQsIHN0YXJ0KSA8IDApCisgICAg
ICAgIHN0ZDo6c3dhcChzdGFydCwgZW5kKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
U3RhcnQoc3RhcnQpOwogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKGVuZCk7CkBAIC0y
NDYsMTQgKzI0MSwxOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUo
RWRpdGluZ1N0eWxlJiBzdHlsZSkKICAgICAvLyBTYXZlIGFuZCByZXN0b3JlIHRoZSBzZWxlY3Rp
b24gZW5kcG9pbnRzIHVzaW5nIHRoZWlyIGluZGljZXMgaW4gdGhlIGVkaXRhYmxlIHJvb3QsIHNp
bmNlCiAgICAgLy8gYWRkQmxvY2tTdHlsZUlmTmVlZGVkIG1heSBtb3ZlUGFyYWdyYXBocywgd2hp
Y2ggY2FuIHJlbW92ZSB0aGVzZSBlbmRwb2ludHMuCiAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IGFu
ZCBlbmQgaW5kaWNlcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgdHJlZSB0aGF0IHRoZXkncmUgaW4u
Ci0gICAgYXV0byogc2NvcGUgPSBoaWdoZXN0RWRpdGFibGVSb290KHZpc2libGVTdGFydC5kZWVw
RXF1aXZhbGVudCgpKTsKKyAgICBhdXRvIHNjb3BlID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFi
bGVSb290KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSk7CiAgICAgaWYgKCFzY29wZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBzdGFydFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlKSwgdmlzaWJsZVN0YXJ0LmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGF1dG8gZW5kUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUp
LCB2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkp
OwotICAgIGludCBzdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJh
bmdlLnB0cigpLCB0cnVlKTsKLSAgICBpbnQgZW5kSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKGVuZFJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICBCb3VuZGFyeVBvaW50IHNjb3BlU3Rh
cnQgeyAqc2NvcGUsIDAgfTsKKyAgICBhdXRvIHN0YXJ0Qm91bmRhcnlQb2ludCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpKTsKKyAgICBhdXRvIGVuZEJvdW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRhcnlQb2lu
dCh2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkp
OworICAgIGlmICghc3RhcnRCb3VuZGFyeVBvaW50IHx8ICFlbmRCb3VuZGFyeVBvaW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHNj
b3BlU3RhcnQsICpzdGFydEJvdW5kYXJ5UG9pbnQgfSwgdHJ1ZSk7CisgICAgYXV0byBlbmRJbmRl
eCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSwgdHJ1
ZSk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQoc3RhcnRPZlBhcmFncmFw
aCh2aXNpYmxlU3RhcnQpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaFN0YXJ0
KGVuZE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0YXJ0KS5uZXh0KCkpOwpAQCAtMjg1LDggKzI4NCw4
IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUm
IHN0eWxlKQogICAgIH0KICAgICAKICAgICB7Ci0gICAgICAgIGF1dG8gc3RhcnRSYW5nZSA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUsIHN0YXJ0SW5kZXgs
IDAsIHRydWUpOwotICAgICAgICBhdXRvIGVuZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZy
b21Mb2NhdGlvbkFuZExlbmd0aChzY29wZSwgZW5kSW5kZXgsIDAsIHRydWUpOworICAgICAgICBh
dXRvIHN0YXJ0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3Ro
KHNjb3BlLmdldCgpLCBzdGFydEluZGV4LCAwLCB0cnVlKTsKKyAgICAgICAgYXV0byBlbmRSYW5n
ZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUuZ2V0KCks
IGVuZEluZGV4LCAwLCB0cnVlKTsKICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UgJiYgZW5kUmFuZ2Up
CiAgICAgICAgICAgICB1cGRhdGVTdGFydEVuZChzdGFydFJhbmdlLT5zdGFydFBvc2l0aW9uKCks
IGVuZFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggN2RkYjBhYjI1MjE5NDkzMjA1
NThlZDQxMTg0YjUxMGNhOTYwZWU1Ni4uMGVmMzkyNzllNDcyMDg2NTA4YmZmNTdhMmJiYjM2MzEw
ZDllODY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHAKQEAgLTE0MTcsNyArMTQxNyw2IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAg
ICAgCiAgICAgaW50IHN0YXJ0SW5kZXggPSAtMTsKICAgICBpbnQgZW5kSW5kZXggPSAtMTsKLSAg
ICBpbnQgZGVzdGluYXRpb25JbmRleCA9IC0xOwogICAgIGJvb2wgb3JpZ2luYWxJc0RpcmVjdGlv
bmFsID0gZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpOwogICAgIGlmIChwcmVzZXJ2
ZVNlbGVjdGlvbiAmJiAhZW5kaW5nU2VsZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFy
dCgpOwpAQCAtMTQzMiwxOCArMTQzMSwyMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBzdGFydEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChz
dGFydEluUGFyYWdyYXBoKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGFydFJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIHZpc2libGVTdGFydC5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICAgICAgICAgICAgICBzdGFy
dEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJhbmdlLnB0cigpLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCkpOworICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhTdGFydCAmJiBz
ZWxlY3Rpb25TdGFydCkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGNoYXJhY3Rl
ckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnQgfSwgdHJ1ZSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGVuZEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChl
bmRJblBhcmFncmFwaCkgewotICAgICAgICAgICAgICAgIGF1dG8gZW5kUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICAgICAgICAgICAgICBlbmRJbmRleCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZW5kUmFuZ2UucHRyKCksIHRydWUpOworICAgICAg
ICAgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpOworICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uRW5kKQor
ICAgICAgICAgICAgICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFw
aFN0YXJ0LCAqc2VsZWN0aW9uRW5kIH0sIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotICAgIAorCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZVBhcmFncmFwaCA9IHN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkp
OwogICAgIFZpc2libGVQb3NpdGlvbiBhZnRlclBhcmFncmFwaChlbmRPZlBhcmFncmFwaFRvTW92
ZS5uZXh0KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KSk7CiAKQEAgLTE0NzgsOSArMTQ4MSw5
IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgIC8vIFRoZSBtb3ZlZCBwYXJhZ3Jh
cGggc2hvdWxkIGFzc3VtZSB0aGUgYmxvY2sgc3R5bGUgb2YgdGhlIGRlc3RpbmF0aW9uLgogICAg
ICAgICBzdHlsZUluRW1wdHlQYXJhZ3JhcGgtPnJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogICAg
IH0KLSAgICAKKwogICAgIC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBp
bnNlcnQgYWN0aW9uICJXZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZElu
c2VydEZyYWdtZW50IGhlcmUuCi0gICAgCisKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihzdGFydCwgZW5kLCBET1dOU1RSRUFNKSk7CiAgICAgZnJhbWUoKS5lZGl0b3Io
KS5jbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOwogICAg
IGRlbGV0ZVNlbGVjdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CkBAIC0xNTA5LDgg
KzE1MTIsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIGlmICghZWRpdGFibGVSb290
KQogICAgICAgICBlZGl0YWJsZVJvb3QgPSAmZG9jdW1lbnQoKTsKIAotICAgIGF1dG8gc3RhcnRU
b0Rlc3RpbmF0aW9uUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRp
b25Jbk5vZGUoZWRpdGFibGVSb290LmdldCgpKSwgZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgZGVzdGluYXRpb25JbmRleCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRUb0Rlc3RpbmF0aW9uUmFuZ2UucHRyKCksIHRy
dWUpOworICAgIGF1dG8gZGVzdGluYXRpb25JbmRleCA9IGNoYXJhY3RlckNvdW50KHsgeyAqZWRp
dGFibGVSb290LCAwIH0sICptYWtlQm91bmRhcnlQb2ludChkZXN0aW5hdGlvbi5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKSB9LCB0cnVlKTsKIAogICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGRlc3RpbmF0aW9uLCBvcmlnaW5hbElzRGly
ZWN0aW9uYWwpKTsKICAgICBBU1NFUlQoZW5kaW5nU2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2Uo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCA4ZDZiZGY0NzhhYmY3YTg5ZWUw
NmQxZjBjNWM3MjljMGVhNWE3NDBkLi43NTgyYTg5ZDNiYzJiZjQ3ZTJkNDM0OGNhNjJkZjg4ZTBk
ODk5NTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTEwODMsMTUgKzEwODMs
MjMgQEAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dmlzaWJsZVBvc2l0aW9uLCBSZWZQdHI8Q29udGEKICAgICAgICAgICAgIHNjb3BlID0gJmRvY3Vt
ZW50OwogICAgIH0KIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBm
aXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlLmdldCgpKSwgcG9zaXRpb24ucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCkpOwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdl
LnB0cigpLCB0cnVlKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQ
b3NpdGlvbkluTm9kZShzY29wZS5nZXQoKSkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5
UG9pbnQocG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICghc3Rh
cnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291
bnQoeyAqc3RhcnQsICplbmQgfSwgdHJ1ZSk7CiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB0aGlzIGZ1
bmN0aW9uIHdpdGggdGhlIG9uZSBhYm92ZS4KIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihO
b2RlJiBub2RlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgYm9vbCBm
b3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24pCiB7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVh
dGUobm9kZS5kb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKCZub2RlKSwgdmlzaWJsZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAg
IHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCBmb3JTZWxlY3Rp
b25QcmVzZXJ2YXRpb24pOworICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChmaXJz
dFBvc2l0aW9uSW5Ob2RlKCZub2RlKSk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2lu
dCh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9LCBmb3JTZWxlY3Rpb25QcmVz
ZXJ2YXRpb24pOwogfQogCiBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRp
b25XaXRoT2Zmc2V0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBvZmZzZXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXgg
OGMyMzRhNGQ5MTk0MDhkZGFhN2Q3MTUxMDhiODRjMWZjMzAyZjZmYS4uYWQ4Mjc4ODljYWI1ODVk
MzAxNTk2YTYzYWJkZWM2ZmY0Yjc1ZTM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjppbnZhbGlkYXRlUGFyYWdyYXBoUmFuZ2VWYWx1ZXMoKQogCiBpbnQgVGV4
dENoZWNraW5nUGFyYWdyYXBoOjpyYW5nZUxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoJnBhcmFncmFwaFJhbmdlKCkpOworICAgIHJldHVybiBj
aGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSgpKTsKIH0KIAogUmFuZ2UmIFRleHRDaGVja2lu
Z1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UoKSBjb25zdApAQCAtMTY1LDE0ICsxNjUsMTEgQEAg
UmVmPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKGludCBjaGFyYWN0ZXJP
ZmZzZXQsIGludCBjaGFyYWN0ZXJDb3UKIAogRXhjZXB0aW9uT3I8aW50PiBUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6Om9mZnNldFRvKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKIHsKLSAg
ICBpZiAoIXBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJv
dW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBvc2l0aW9uKCkpOworICAgIGF1dG8g
ZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pOworICAgIGlmICghc3RhcnQgfHwgIWVu
ZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwotCi0gICAgYXV0byBy
YW5nZSA9IG9mZnNldEFzUmFuZ2UoKS5jbG9uZVJhbmdlKCk7Ci0gICAgYXV0byByZXN1bHQgPSBy
YW5nZS0+c2V0RW5kKCpwb3NpdGlvbi5jb250YWluZXJOb2RlKCksIHBvc2l0aW9uLmNvbXB1dGVP
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCkpOworICAgIHJldHVybiBjaGFyYWN0
ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGg6OmlzRW1wdHkoKSBjb25zdApAQCAtMjAwLDIxICsxOTcsMjEgQEAgY29uc3QgU3RyaW5nJiBU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnRleHQoKSBjb25zdAogaW50IFRleHRDaGVja2luZ1BhcmFn
cmFwaDo6Y2hlY2tpbmdTdGFydCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NoZWNraW5nU3RhcnQp
Ci0gICAgICAgIG1fY2hlY2tpbmdTdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoJm9m
ZnNldEFzUmFuZ2UoKSk7CisgICAgICAgIG1fY2hlY2tpbmdTdGFydCA9IGNoYXJhY3RlckNvdW50
KG9mZnNldEFzUmFuZ2UoKSk7CiAgICAgcmV0dXJuICptX2NoZWNraW5nU3RhcnQ7CiB9CiAKIGlu
dCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nRW5kKCkgY29uc3QKIHsKICAgICBpZiAo
IW1fY2hlY2tpbmdFbmQpCi0gICAgICAgIG1fY2hlY2tpbmdFbmQgPSBjaGVja2luZ1N0YXJ0KCkg
KyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fY2hlY2tpbmdSYW5nZS5wdHIoKSk7CisgICAg
ICAgIG1fY2hlY2tpbmdFbmQgPSBjaGVja2luZ1N0YXJ0KCkgKyBjaGVja2luZ0xlbmd0aCgpOwog
ICAgIHJldHVybiAqbV9jaGVja2luZ0VuZDsKIH0KIAogaW50IFRleHRDaGVja2luZ1BhcmFncmFw
aDo6Y2hlY2tpbmdMZW5ndGgoKSBjb25zdAogewogICAgIGlmICghbV9jaGVja2luZ0xlbmd0aCkK
LSAgICAgICAgbV9jaGVja2luZ0xlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobV9j
aGVja2luZ1JhbmdlLnB0cigpKTsKKyAgICAgICAgbV9jaGVja2luZ0xlbmd0aCA9IGNoYXJhY3Rl
ckNvdW50KG1fY2hlY2tpbmdSYW5nZSk7CiAgICAgcmV0dXJuICptX2NoZWNraW5nTGVuZ3RoOwog
fQogCkBAIC0yMjMsOCArMjIwLDEyIEBAIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9t
YXRpY1JlcGxhY2VtZW50U3RhcnQoKSBjb25zdAogICAgIGlmIChtX2F1dG9tYXRpY1JlcGxhY2Vt
ZW50U3RhcnQpCiAgICAgICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0Owog
Ci0gICAgYXV0byBzdGFydE9mZnNldFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5n
ZSgpLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBv
c2l0aW9uKCksIG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsK
LSAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHN0YXJ0T2Zmc2V0UmFuZ2UucHRyKCkpOworICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7CisgICAgYXV0byBlbmQg
PSBtYWtlQm91bmRhcnlQb2ludChtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCA9IGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0
LCAqZW5kIH0pOwogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0OwogfQog
CkBAIC0yMzMsOCArMjM0LDcgQEAgaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6YXV0b21hdGlj
UmVwbGFjZW1lbnRMZW5ndGgoKSBjb25zdAogICAgIGlmIChtX2F1dG9tYXRpY1JlcGxhY2VtZW50
TGVuZ3RoKQogICAgICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7CiAK
LSAgICBhdXRvIGVuZE9mZnNldFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZSgp
LnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBvc2l0
aW9uKCksIG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAg
bV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
ZW5kT2Zmc2V0UmFuZ2UucHRyKCkpIC0gYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCgpOworICAg
IG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50UmFuZ2UpOwogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudExl
bmd0aDsKIH0KIApAQCAtMzIzLDI1ICszMjMsMjMgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBl
cjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIK
ICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVh
LgogICAgIFJlZjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtX3JhbmdlLT5jbG9uZVJhbmdlKCk7
CiAgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9y
YW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgaW50IHRvdGFsUmFuZ2VMZW5ndGggPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLnB0cigpKTsKKyAgICBhdXRvIHRv
dGFsUmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7CiAgICAgc2V0
RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBv
c2l0aW9uKCkpKTsKICAgICAKLSAgICBSZWY8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0g
ICAgaW50IHJhbmdlU3RhcnRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9mZnNl
dEFzUmFuZ2UucHRyKCkpOwotICAgIGludCB0b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7CisgICAg
YXV0byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9p
bnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludCht
X3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgIENoYXJhY3RlckNvdW50IHRvdGFsTGVu
Z3RoUHJvY2Vzc2VkID0gMDsKICAgICAKICAgICBib29sIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsK
ICAgICBib29sIGxhc3RJdGVyYXRpb24gPSBmYWxzZTsKICAgICB3aGlsZSAodG90YWxMZW5ndGhQ
cm9jZXNzZWQgPCB0b3RhbFJhbmdlTGVuZ3RoKSB7CiAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3Vn
aCB0aGUgc2VhcmNoIHJhbmdlIGJ5IHBhcmFncmFwaHMsIGNoZWNraW5nIGVhY2ggb25lIGZvciBz
cGVsbGluZyBhbmQgZ3JhbW1hci4KLSAgICAgICAgaW50IGN1cnJlbnRMZW5ndGggPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLnB0cigpKTsKKyAgICAgICAgYXV0byBj
dXJyZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwogICAgICAgICBp
bnQgY3VycmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyByYW5nZVN0YXJ0T2Zmc2V0
IDogMDsKICAgICAgICAgaW50IGN1cnJlbnRFbmRPZmZzZXQgPSBjdXJyZW50TGVuZ3RoOwogICAg
ICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCks
IG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSB7CiAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhl
IGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFu
Z2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAogICAgICAgICAgICAgLy8gc2luY2Ugd2Ug
d2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICAgICAgICAgIGF1
dG8gZW5kT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
bV9yYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRPZmZzZXRBc1JhbmdlLnB0cigpKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQ
b2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50
KG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpIH0pOwogICAgICAgICAgICAgbGFzdEl0ZXJhdGlvbiA9
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9mZnNldCA8IGN1cnJl
bnRFbmRPZmZzZXQpIHsKQEAgLTM5OSwxMCArMzk3LDggQEAgU3RyaW5nIFRleHRDaGVja2luZ0hl
bHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIs
IGIKIAogICAgICAgICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpICYmICgh
Y2hlY2tHcmFtbWFyIHx8IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxsaW5nTG9j
YXRpb24gPD0gZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICBp
bnQgc3BlbGxpbmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIG1fcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCisgICAgICAgICAgICAg
ICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRh
cnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFy
YWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAgICAgICAgICAgIG91
dElzU3BlbGxpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zm
c2V0ID0gc3BlbGxpbmdPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVt
ID0gbWlzc3BlbGxlZFdvcmQ7CkBAIC00MTAsMTAgKzQwNiw4IEBAIFN0cmluZyBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFt
bWFyLCBiCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1t
YXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGludCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3VycmVu
dFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCks
IG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5wdHIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gY2hhcmFj
dGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwg
Km1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOwog
ICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBncmFtbWFyUGhyYXNlT2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IGJhZEdyYW1tYXJQaHJhc2U7CkBAIC01NTYs
NyArNTUwLDcgQEAgYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCgpIGNv
bnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBCYWQgZ3JhbW1hciBhdCBz
dGFydCBvZiByYW5nZSwgYnV0IGVuZCBvZiBiYWQgZ3JhbW1hciBpcyBiZWZvcmUgb3IgYWZ0ZXIg
ZW5kIG9mIHJhbmdlCi0gICAgaWYgKGdyYW1tYXJEZXRhaWwubGVuZ3RoICE9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgobV9yYW5nZS5wdHIoKSkpCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihncmFtbWFyRGV0YWlsLmxlbmd0aCkgIT0gY2hhcmFjdGVyQ291bnQobV9yYW5nZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBh
bmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJvciAod2hldGhlciBvciBub3QgdGhlIHNwZWxs
aW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKaW5kZXggZTg0NDEyYjI3NjgzNTY2ZjMwM2E2ZDFiOTJlNjdmMzIxMmQ4ZDJmZC4uZTg2
ZWJmMTkxOTAyZWI1MzFiODc0NWNkNzVmOWU3OGY1NDQ5OWZiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjM0MywxMiArMjM0MywxMCBAQCBzaXplX3QgU2Vh
cmNoQnVmZmVyOjpsZW5ndGgoKSBjb25zdAogCiAvLyAtLS0tLS0tLQogCi1pbnQgVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChjb25zdCBSYW5nZSogcmFuZ2UsIGJvb2wgZm9yU2VsZWN0aW9uUHJl
c2VydmF0aW9uKQorQ2hhcmFjdGVyQ291bnQgY2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMpCiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICBm
b3IgKFRleHRJdGVyYXRvciBpdCgqcmFuZ2UsIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbiA/IFRl
eHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zIDogVGV4
dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkKKyAg
ICBDaGFyYWN0ZXJDb3VudCBsZW5ndGggPSAwOworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJh
bmdlLCBzcGFjZXNGb3JSZXBsYWNlZEVsZW1lbnRzID8gVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0
ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3IpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKQogICAgICAgICBsZW5ndGggKz0gaXQudGV4
dCgpLmxlbmd0aCgpOwogICAgIHJldHVybiBsZW5ndGg7CiB9CkBAIC0yNDU2LDIxICsyNDU0LDE2
IEBAIGJvb2wgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShOb2Rl
KiBzY29wZSwgY29uc3QgUmFuZ2UqIHJhbmdlCiAKICAgICAvLyBUaGUgY3JpdGljYWwgYXNzdW1w
dGlvbiBpcyB0aGF0IHRoaXMgb25seSBnZXRzIGNhbGxlZCB3aXRoIHJhbmdlcyB0aGF0CiAgICAg
Ly8gY29uY2VudHJhdGUgb24gYSBnaXZlbiBhcmVhIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBy
b290LiBUaGlzIGlzIGRvbmUKLSAgICAvLyBiZWNhdXNlIG9mIHRleHQgZmllbGRzIGFuZCB0ZXh0
YXJlYXMuIFRoZSBET00gZm9yIHRob3NlIGlzIG5vdAotICAgIC8vIGRpcmVjdGx5IGluIHRoZSBk
b2N1bWVudCBET00sIHNvIGVuc3VyZSB0aGF0IHRoZSByYW5nZSBkb2VzIG5vdCBjcm9zcyBhCi0g
ICAgLy8gYm91bmRhcnkgb2Ygb25lIG9mIHRob3NlLgorICAgIC8vIGJlY2F1c2Ugb2YgdGV4dCBm
aWVsZHMgYW5kIHRleHRhcmVhcy4gVGhlIERPTSBmb3IgdGhvc2UgaXMgbm90IGRpcmVjdGx5Cisg
ICAgLy8gaW4gdGhlIGRvY3VtZW50IERPTSwgc28gZW5zdXJlIHRoYXQgdGhlIHJhbmdlIGRvZXMg
bm90IGNyb3NzIGEgYm91bmRhcnkKKyAgICAvLyBvZiBvbmUgb2YgdGhvc2UuCiAgICAgaWYgKCZy
YW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkuaXNEZXNjZW5kYW50T2Yoc2NvcGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWluZXIo
KS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJl
ZjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2Nv
cGUsIDAsICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwot
ICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBs
b2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsKLQot
ICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9m
ZnNldCgpKTsKLSAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29w
ZSk7Ci0gICAgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UucHRy
KCkpIC0gbG9jYXRpb247CisgICAgbG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3Bl
LCAwIH0sIHsgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpIH0g
fSk7CisgICAgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJhbmdl
LT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpIH0gfSkgLSBsb2NhdGlvbjsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5k
ZXggMTU3ZjFkYTFkMGU2Yzk1M2Q5ZGVkYzRlZmFjZTEzZTk4MGUzMTM0ZS4uOTZlY2FlZTQ5M2Nk
NzM0ZGJlOTg5ZDljZWFjZjVkOTlmNjlmODg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5oCkBAIC0zNiw3ICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFJh
bmdlOwogY2xhc3MgUmVuZGVyVGV4dEZyYWdtZW50OwogCisvLyBGSVhNRTogRGVsZXRlIHRoaXMg
b3ZlcmxvYWQgYWZ0ZXIgbW92aW5nIGFsbCB0aGUgY2FsbGVycyB0byB0aGUgU2ltcGxlUmFuZ2Ug
dmVyc2lvbi4KIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2UqLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgYm9vbCBp
c0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CisKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRl
eHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRv
ckRlZmF1bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CiBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKGNvbnN0IFNpbXBs
ZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZp
b3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHBsYWluVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGluZyhjb25zdCBTaW1w
bGVSYW5nZSYpOwpAQCAtMTAwLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBUZXh0SXRl
cmF0b3JDb3B5YWJsZVRleHQmIGNvcHlhYmxlVGV4dCgpIGNvbnN0IHsgQVNTRVJUKCFhdEVuZCgp
KTsgcmV0dXJuIG1fY29weWFibGVUZXh0OyB9CiAgICAgdm9pZCBhcHBlbmRUZXh0VG9TdHJpbmdC
dWlsZGVyKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0IHsgY29weWFibGVUZXh0KCkuYXBw
ZW5kVG9TdHJpbmdCdWlsZGVyKGJ1aWxkZXIpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgaW50IHJhbmdlTGVuZ3RoKGNvbnN0IFJhbmdlKiwgYm9vbCBzcGFjZXNGb3JSZXBsYWNlZEVs
ZW1lbnRzID0gZmFsc2UpOworICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIFNpbXBsZVJhbmdl
LCBDaGFyYWN0ZXJSYW5nZSwgYW5kIENoYXJhY3RlckNvdW50IGFuZCBtb3ZlIG91dCBvZiB0aGlz
IGNsYXNzIHRvIHRoZSB0b3AgbGV2ZWwgKGJvdHRvbSBvZiB0aGlzIGZpbGUpLgogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3Ro
KENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVuZ3Ro
LCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2Nv
cGUsIGNvbnN0IFJhbmdlKiwgc2l6ZV90JiBsb2NhdGlvbiwgc2l6ZV90JiBsZW5ndGgpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UmFuZ2U+IHN1YnJhbmdlKFJhbmdlJiBlbnRpcmVS
YW5nZSwgaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KTsKQEAgLTI4Nyw0
ICsyODksMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkTG9va0FoZWFkIHsgdHJ1ZSB9Owog
fTsKIAordXNpbmcgQ2hhcmFjdGVyQ291bnQgPSBzaXplX3Q7CisKK3N0cnVjdCBDaGFyYWN0ZXJS
YW5nZSB7CisgICAgQ2hhcmFjdGVyQ291bnQgbG9jYXRpb24geyAwIH07CisgICAgQ2hhcmFjdGVy
Q291bnQgbGVuZ3RoIHsgMCB9OworfTsKKworV0VCQ09SRV9FWFBPUlQgQ2hhcmFjdGVyQ291bnQg
Y2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIHNwYWNlc0ZvclJlcGxhY2Vk
RWxlbWVudHMgPSBmYWxzZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCA2YjkwZmZkYmU1NGFlY2U4NjMz
NTEzMTJhMjViMTJhZThkMmNlMWEwLi45NzMwMmNmNTJhNDM5ZTA3YWRmMGM4ZWM5YjhhMWRjZWJh
Y2MxMWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQb3J0
aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04MTksNiArODE5LDExIEBAIGJvb2wg
VmlzaWJsZVBvc2l0aW9uOjplcXVhbHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvdGhlcikgY29u
c3QKICAgICByZXR1cm4gbV9hZmZpbml0eSA9PSBvdGhlci5tX2FmZmluaXR5ICYmIG1fZGVlcFBv
c2l0aW9uLmVxdWFscyhvdGhlci5tX2RlZXBQb3NpdGlvbik7CiB9CiAKK09wdGlvbmFsPEJvdW5k
YXJ5UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRp
b24pCit7CisgICAgcmV0dXJuIG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCkpOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHN0cmVhbSwg
RUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIHN3aXRjaCAoYWZmaW5pdHkpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCmluZGV4IDQ4NTY2ODI0ZWQ3M2ZkYWNkMjU3
MDhkZTMxOTMxNGU2MTkyYzAyZjAuLmY4NGJjZGZkNzJmNWJjNDU3NjMzZGE0ODMyNzIxZTUyNzdh
MjQ4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCwxMCArMjgsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmdCb3VuZGFyeS5oIgogI2luY2x1ZGUgIlBv
c2l0aW9uLmgiCiAKLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZTsKQEAgLTQ5LDkgKzQ1LDYgQEAgY2xhc3Mg
UmFuZ2U7CiAvLyBwb3NpdGlvbiBpcyBub3QgYXQgYSBsaW5lIGJyZWFrLgogI2RlZmluZSBWUF9V
UFNUUkVBTV9JRl9QT1NTSUJMRSBVUFNUUkVBTQogCi1jbGFzcyBJbmxpbmVCb3g7Ci1jbGFzcyBO
b2RlOwotCiBjbGFzcyBWaXNpYmxlUG9zaXRpb24gewogcHVibGljOgogICAgIC8vIE5PVEU6IFVQ
U1RSRUFNIGFmZmluaXR5IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHBvcyBpcyBhdCBlbmQgb2YgYSB3
cmFwcGVkIGxpbmUsCkBAIC04NSwyMSArNzgsMTYgQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6
IFRoaXMgZG9lcyBub3QgaGFuZGxlIFt0YWJsZSwgMF0gY29ycmVjdGx5LgogICAgIEVsZW1lbnQq
IHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc05v
dE51bGwoKSA/IG1fZGVlcFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSA6IDA7IH0KLSAgICAKLSAgICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChJbmxp
bmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBtX2RlZXBQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgaW5saW5l
Qm94LCBjYXJldE9mZnNldCk7Ci0gICAgfQogCi0gICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZz
ZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiBpbmxpbmVCb3gs
IGludCYgY2FyZXRPZmZzZXQpIGNvbnN0Ci0gICAgewotICAgICAgICBtX2RlZXBQb3NpdGlvbi5n
ZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbiwgaW5saW5l
Qm94LCBjYXJldE9mZnNldCk7Ci0gICAgfQorICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0
KElubGluZUJveComLCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdDsKKyAgICB2b2lkIGdldElubGlu
ZUJveEFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveCom
LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdDsKIAogICAgIC8vIFJlY3QgaXMgbG9jYWwgdG8gdGhl
IHJldHVybmVkIHJlbmRlcmVyCiAgICAgV0VCQ09SRV9FWFBPUlQgTGF5b3V0UmVjdCBsb2NhbENh
cmV0UmVjdChSZW5kZXJPYmplY3QqJikgY29uc3Q7CisKICAgICAvLyBCb3VuZHMgb2YgKHBvc3Np
Ymx5IHRyYW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBjb29yZHMKICAgICBXRUJDT1JFX0VY
UE9SVCBJbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5zaWRlRml4ZWQgPSBudWxs
cHRyKSBjb25zdDsKKwogICAgIC8vIEFicyB4L3kgcG9zaXRpb24gb2YgdGhlIGNhcmV0IGlnbm9y
aW5nIHRyYW5zZm9ybXMuCiAgICAgLy8gRklYTUU6IG5hdmlnYXRpb24gd2l0aCB0cmFuc2Zvcm1z
IHNob3VsZCBiZSBzbWFydGVyLgogICAgIFdFQkNPUkVfRVhQT1JUIGludCBsaW5lRGlyZWN0aW9u
UG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oKSBjb25zdDsKQEAgLTEwNyw3ICs5NSw3
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgYWJzb2x1dGVTZWxlY3Rp
b25Cb3VuZHNGb3JMaW5lKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIGlzIGEgdGVudGF0aXZlIGVu
aGFuY2VtZW50IG9mIG9wZXJhdG9yPT0gdG8gYWNjb3VudCBmb3IgYWZmaW5pdHkuCi0gICAgLy8g
RklYTUU6IENvbWJpbmUgdGhpcyBmdW5jdGlvbiB3aXRoIG9wZXJhdG9yPT0KKyAgICAvLyBGSVhN
RTogQ29tYmluZSB0aGlzIGZ1bmN0aW9uIHdpdGggb3BlcmF0b3I9PS4KICAgICBib29sIGVxdWFs
cyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKIAogI2lmIEVOQUJMRShUUkVFX0RFQlVH
R0lORykKQEAgLTExNSw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JtYXRGb3JEZWJ1
Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAgICAgdm9pZCBzaG93
VHJlZUZvclRoaXMoKSBjb25zdDsKICNlbmRpZgotICAgIAorCiBwcml2YXRlOgogICAgIHZvaWQg
aW5pdChjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSk7CiAgICAgUG9zaXRpb24gY2Fub25pY2Fs
UG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKQEAgLTEyNywyMyArMTE1LDUwIEBAIHByaXZhdGU6
CiAgICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7CiB9OwogCitib29sIG9wZXJhdG9yPT0oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIG9wZXJhdG9y
IT0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29s
IG9wZXJhdG9yPChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKK2Jvb2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxC
b3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
KworV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIHNldFN0YXJ0KFJhbmdlKiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIHNldEVuZChSYW5nZSosIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpOworVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0
IFJhbmdlKiwgRUFmZmluaXR5KTsKK1Zpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24o
Y29uc3QgUmFuZ2UqLCBFQWZmaW5pdHkpOworCitXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBlbmNs
b3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitib29sIGlz
Rmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
Tm9kZSopOworYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgY29uc3QgTm9kZSopOworCitib29sIGFyZVZpc2libGVQb3NpdGlvbnNJblNhbWVU
cmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBFQWZmaW5p
dHkpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCisvLyBpbmxpbmVzCisKIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZG4ndCBpZ25vcmUgYWZmaW5pdHkuCiBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQog
ewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPT0gYi5kZWVwRXF1aXZhbGVudCgpOwog
fQotIAorCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9Ci0g
ICAgCisKIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgp
IDwgYi5kZWVwRXF1aXZhbGVudCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpIAoraW5saW5lIGJv
b2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBiKQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPiBiLmRlZXBFcXVpdmFs
ZW50KCk7CiB9CkBAIC0xNTMsMjYgKzE2OCwyMCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogICAgIHJl
dHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPD0gYi5kZWVwRXF1aXZhbGVudCgpOwogfQogCi1pbmxp
bmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBiKSAKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuIGEuZGVlcEVx
dWl2YWxlbnQoKSA+PSBiLmRlZXBFcXVpdmFsZW50KCk7Ci19ICAgIAotCi1XRUJDT1JFX0VYUE9S
VCBSZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mKTsKLWJvb2wgc2V0U3RhcnQoUmFuZ2UqLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKLWJvb2wgc2V0RW5kKFJhbmdlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1W
aXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UqLCBFQWZmaW5p
dHkpOwotVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVB
ZmZpbml0eSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIGVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0KLWJvb2wgaXNGaXJzdFZpc2libGVQb3Np
dGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBOb2RlKik7Ci1ib29sIGlz
TGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBO
b2RlKik7Cit9CiAKLWJvb2wgYXJlVmlzaWJsZVBvc2l0aW9uc0luU2FtZVRyZWVTY29wZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2lubGluZSB2b2lk
IFZpc2libGVQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KElubGluZUJveComIGlubGlu
ZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKK3sKKyAgICBtX2RlZXBQb3NpdGlvbi5nZXRJ
bmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7Cit9
CiAKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBFQWZmaW5p
dHkpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworaW5saW5lIHZvaWQgVmlzaWJsZVBv
c2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0
aW9uLCBJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0Cit7Cisg
ICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1h
cnlEaXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOworfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVu
aXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRleCA5
MTA5YWI5NTQ5MDY5ZjM2MDRmMDk4NmFjOThlOGI5OTQ0OWExNGFlLi5hZmYzNmQ0ODE4ODcyNmYy
OGIwYmMzNzk5OTE5YWU3YzBlZjJlNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCkBAIC0xOTAxLDIwICsxOTAxLDEzIEBAIFJlZlB0cjxSYW5nZT4gZW5jbG9zaW5n
VGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFRleHRHcmFu
CiAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocHJldkJvdW5kYXJ5LmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQoKSwgcHJldkJvdW5kYXJ5LCBuZXh0Qm91bmRhcnkp
OwogfQogCi1pbnQgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgdnAsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3RoZXIpCitwdHJkaWZmX3QgZGlzdGFuY2VC
ZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBiKQogewotICAgIGlmICh2cC5pc051bGwoKSB8fCBvdGhlci5pc051bGwoKSkKKyAg
ICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLQotICAg
IGJvb2wgdGhpc0lzU3RhcnQgPSAodnAgPCBvdGhlcik7Ci0KLSAgICAvLyBTdGFydCBtdXN0IGNv
bWUgZmlyc3QgaW4gdGhlIFJhbmdlIGNvbnN0cnVjdG9yLgotICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKHZwLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpc0lzU3RhcnQg
PyB2cCA6IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dGhpc0lzU3RhcnQgPyBvdGhlciA6IHZwKSk7Ci0gICAgaW50IGRpc3RhbmNlID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7Ci0KLSAgICByZXR1cm4gKHRoaXNJc1N0YXJ0
ID8gLWRpc3RhbmNlIDogZGlzdGFuY2UpOworICAgIHJldHVybiBhIDwgYgorICAgICAgICA/IC1j
aGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChhKSwgKm1ha2VCb3VuZGFyeVBvaW50
KGIpIH0pCisgICAgICAgIDogY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoYiks
ICptYWtlQm91bmRhcnlQb2ludChhKSB9KTsKIH0KIAogdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0ZXIs
IFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggNjcxN2ViMTFkZGRiZDg2OGU0NDE0YzM5ODAzMzUyYTAz
MTZhZmUzZS4uY2U4YzUwZjU3OTM2MGUwMWNmZGM4NTJmZWE1ODFmOWU0MjVhNDgzOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCkBAIC0xMDIsNyArMTAyLDcgQEAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBUZXh0R3JhbnVsYXIKIFdFQkNPUkVfRVhQT1JUIGJvb2wgd2l0aGluVGV4dFVuaXRPZkdy
YW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2VsZWN0
aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbk9m
TmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0R3Jh
bnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFu
Z2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7Ci1XRUJDT1JFX0VYUE9SVCBp
bnQgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgcHRyZGlmZl90IGRpc3RhbmNlQmV0
d2VlblBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9u
IGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBv
c2l0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYsIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVCZWZv
cmUsIFVDaGFyMzImIHR3b0JlZm9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggMTAzZTU1M2IyMzdhOTE5N2JjMzhkMjQyMTYwMjQ2YzZk
MjMyMjYzNS4uMmI5MzE3YjE3MTNmMjYwYTJkYWYzOGM1YjFmYmE0ZTA4NGFiN2NhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtNzEsMTUg
KzcxLDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgUmV0YWluUHRyPERE
QWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCiB7
CiAgICAgU3RyaW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJhbmdl
LmdldCgpKTsKLSAgICBpbnQgaGl0TG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KG1ha2VSYW5nZShjb250ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgp
KTsKKyAgICBhdXRvIHN0YXJ0ID0gY29udGV4dFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CisgICAg
aWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
bmlsOworICAgIENGSW5kZXggaGl0TG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91
bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikgfSk7CiAKLSAg
ICBSZXRhaW5QdHI8RERTY2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVh
dGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7Ci0gICAgUmV0YWluUHRyPERE
U2NhblF1ZXJ5UmVmPiBzY2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkp
KSk7CisgICAgYXV0byBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVy
VHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CisgICAgYXV0byBzY2FuUXVlcnkgPSBhZG9wdENG
KEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmdWxsUGxh
aW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGZ1bGxQ
bGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CiAKICAgICBpZiAoIUREU2Nhbm5lclNjYW5RdWVy
eShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiByZXN1
bHRzID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0
KCksIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOworICAgIGF1dG8gcmVz
dWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdl
dCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXApKTsKIAogICAgIC8vIEZp
bmQgdGhlIEREUmVzdWx0UmVmIHRoYXQgaW50ZXJzZWN0cyB0aGUgaGl0VGVzdFJlc3VsdCdzIFZp
c2libGVQb3NpdGlvbi4KICAgICBERFJlc3VsdFJlZiBtYWluUmVzdWx0ID0gbnVsbHB0cjsKQEAg
LTEwMCw3ICsxMDMsNyBAQCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0
SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uCiAgICAgfQogCiAgICAgaWYg
KCFtYWluUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG5p
bDsKIAogICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQgPSBhZG9w
dE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOwogICAgIFthY3Rpb25D
b250ZXh0IHNldEFsbFJlc3VsdHM6QFsgKF9fYnJpZGdlIGlkKW1haW5SZXN1bHQgXV07CkBAIC0x
MTIsOSArMTE1LDkgQEAgc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0
ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbgogICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwogICAgIGZv
ciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQogICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGlu
Z0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKSk7Ci0gICAgCisKICAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1bHRS
YW5nZTsKLSAgICAKKwogICAgIHJldHVybiBhY3Rpb25Db250ZXh0OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KaW5kZXggODc5NzIy
MDI4NDY4ZjAzZTAyZWFlNTliNTVhMjlhMjNkZWNlOTJlZS4uZDY0OGZkNzBmYzM4ZmM5MmMyNGU1
MTc4OTA0N2NlZjYyNjNmYTUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwxMiArMjY0LDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCisKICAg
ICBpZiAoIVJldmVhbExpYnJhcnkoKSB8fCAhUmV2ZWFsQ29yZUxpYnJhcnkoKSB8fCAhZ2V0UlZJ
dGVtQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0gICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
aWYgKCFzZWxlY3RlZFJhbmdlKQorCisgICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAKICAgICAvLyBTaW5jZSB3
ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRo
ZSByZXR1cm5lZCBvcHRpb25zLgpAQCAtMjc5LDIwICsyNzgsMjIgQEAgc3RkOjp0dXBsZTxSZWZQ
dHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxl
Y3Rpb24oY28KICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJy
b3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCiAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwogICAgIGF1dG8gcGFyYWdyYXBoRW5kID0g
ZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICBpZiAocGFyYWdyYXBoU3RhcnQuaXNO
dWxsKCkgfHwgcGFyYWdyYXBoRW5kLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKKworICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJhY3RlckNv
dW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBv
aW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKKyAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50
ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KTsKKyAgICBOU1JhbmdlIHJhbmdlVG9Q
YXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uQ2hhcmFj
dGVyQ291bnQpOwogCi0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQp
LmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7
Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9u
U3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7Ci0g
ICAgCiAgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFy
YWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CiAgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFp
blRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKICAgICBSZXRhaW5QdHI8UlZJdGVtPiBp
dGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3Ry
aW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJh
bmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKKwogICAgIHJldHVybiB7IFRl
eHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFuZ2Uu
bG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAorCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKKwogICAgIHJldHVybiB7IG51bGxwdHIsIG5p
bCB9OwogfQogCkBAIC0zMjIsNDMgKzMyMyw0MCBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4s
IE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdAog
CiAgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBOU1Jhbmdl
IHNlbGVjdGlvblJhbmdlOwotICAgIGludCBoaXRJbmRleDsKKyAgICBOU1VJbnRlZ2VyIGhpdElu
ZGV4OwogICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOwogICAgIAogICAgIGlm
IChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2Vs
ZWN0aW9uKSB7CiAgICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCk7CiAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVF
bmQoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRv
IHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgogICAgICAgICBhdXRvIHBh
cmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CiAgICAgICAg
IGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKICAgICAg
ICAgCi0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBhcmFn
cmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlv
bkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICAgICAg
CiAgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwg
cGFyYWdyYXBoRW5kKTsKICAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAotICAgICAgICBzZWxlY3Rpb25SYW5nZSA9
IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlvblN0
YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0aW9u
U3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGhpdEluZGV4
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBv
c2l0aW9uKS5nZXQoKSk7CisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJv
dW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pLAorICAgICAgICAgICAgY2hhcmFjdGVyQ291
bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9p
bnQoc2VsZWN0aW9uRW5kKSB9KSk7CisgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQo
eyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQo
cG9zaXRpb24pIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7IHBvc2l0aW9uIH07CiAgICAgICAgIHNlbGVj
dGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3Jh
bnVsYXJpdHkpOwogICAgICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JMaW5l
UnVsZXMuc3RhcnQoKTsKKwogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8g
dXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQuCiAg
ICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5
Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgCiAgICAgICAgIGlmICghZnVsbENo
YXJhY3RlclJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAg
ICAgIAorCiAgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwg
MCk7Ci0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7
CisgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
ZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQo
cG9zaXRpb24pIH0pOwogICAgIH0KLSAgICAKKwogICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5nZSA9
IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNlbGVj
dGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBzaG91
bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKLSAgICAKKwogICAgIFN0cmluZyBpdGVtU3RyaW5nID0g
cGxhaW5UZXh0KCpmdWxsQ2hhcmFjdGVyUmFuZ2UpOwogICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0
ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJp
bmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7CiAgICAgTlNSYW5nZSBoaWdobGlnaHRS
YW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCmluZGV4IDljMWFlODg4OTUxZmIz
YmIyNTZlZDdlMDllMjQxNzZiYzhkM2MzODkuLmEyYjgxODI4NzdiMjhhZjI5YzhhMDYzOTU0ZDM3
NGNkNWFhNWE1ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3Rh
dGlvbkNvbW1hbmRJT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3Rh
dGlvbkNvbW1hbmRJT1MuY3BwCkBAIC00OCw5ICs0OCw3IEBAIERpY3RhdGlvbkNvbW1hbmRJT1M6
OkRpY3RhdGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8VmVjdG9yPFN0
cmluCiAKIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiB7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIGluc2VydGlvblBvc2l0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpOwotCi0gICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gMDsKKyAgICBDaGFyYWN0ZXJD
b3VudCByZXN1bHRMZW5ndGggPSAwOwogICAgIGZvciAoYXV0byYgaW50ZXJwcmV0YXRpb25zIDog
bV9kaWN0YXRpb25QaHJhc2VzKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZmlyc3RJbnRlcnBy
ZXRhdGlvbiA9IGludGVycHJldGF0aW9uc1swXTsKICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IGZp
cnN0SW50ZXJwcmV0YXRpb24ubGVuZ3RoKCk7CkBAIC02MiwyMCArNjAsMjMgQEAgdm9pZCBEaWN0
YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KCkKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSk7CiAgICAgfQog
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyUmVzdWx0cyhlbmRpbmdTZWxlY3Rpb24oKS52aXNp
YmxlRW5kKCkpOworICAgIC8vIEZJWE1FOiBBZGQgdGhlIHJlc3VsdCBtYXJrZXIgdXNpbmcgYSBQ
b3NpdGlvbiBjYWNoZWQgYmVmb3JlIHJlc3VsdHMgYXJlIGluc2VydGVkLCBpbnN0ZWFkIG9mIHJl
bHlpbmcgb24gY2hhcmFjdGVyIGNvdW50cy4KIAotICAgIEVsZW1lbnQqIHJvb3QgPSBhZnRlclJl
c3VsdHMucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGF1dG8gZW5kUG9zaXRpb24gPSBlbmRp
bmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQ
b2ludChlbmRQb3NpdGlvbik7CisgICAgYXV0byogcm9vdCA9IGVuZFBvc2l0aW9uLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKKyAgICBpZiAoIWVuZCB8fCAhcm9vdCkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gRklYTUU6IEFkZCB0aGUgcmVzdWx0IG1hcmtlciB1c2luZyBhIFBvc2l0aW9uIGNh
Y2hlZCBiZWZvcmUgcmVzdWx0cyBhcmUgaW5zZXJ0ZWQsIGluc3RlYWQgb2YgcmVseWluZyBvbiBU
ZXh0SXRlcmF0b3JzLgotICAgIGF1dG8gcmFuZ2VUb0VuZCA9IFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKChOb2RlICopcm9vdCwgMCksIGFmdGVy
UmVzdWx0cy5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBpbnQgZW5kSW5kZXggPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKHJhbmdlVG9FbmQucHRyKCksIHRydWUpOwotICAgIGludCBzdGFydElu
ZGV4ID0gZW5kSW5kZXggLSByZXN1bHRMZW5ndGg7CisgICAgYXV0byBlbmRPZmZzZXQgPSBjaGFy
YWN0ZXJDb3VudCh7IHsgKnJvb3QsIDAgfSwgV1RGTW92ZSgqZW5kKSB9KTsKKyAgICBpZiAoZW5k
T2Zmc2V0IDwgcmVzdWx0TGVuZ3RoKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3RhcnRJ
bmRleCA+PSAwKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCkuZG9jdW1lbnRFbGVt
ZW50KCksIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0cnVlKTsKLSAgICAgICAgQVNTRVJUKHJlc3Vs
dFJhbmdlKTsgLy8gRklYTUU6IFdoYXQgZ3VhcmFudGVlcyB0aGlzPwotICAgICAgICBkb2N1bWVu
dCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoKnJlc3VsdFJhbmdlLCBtX21l
dGFkYXRhKTsKLSAgICB9CisgICAgYXV0byByZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VGcm9tTG9jYXRpb25BbmRMZW5ndGgocm9vdCwgZW5kT2Zmc2V0IC0gcmVzdWx0TGVuZ3RoLCBl
bmRPZmZzZXQpOworICAgIGlmICghcmVzdWx0UmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcigqcmVzdWx0UmFu
Z2UsIG1fbWV0YWRhdGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRl
eCAxNjE1OTA3ZDY5MTEwYzY4NWY3NzMwNzMxOGJiMmE1NTcxOTY4YTRlLi41MTM1YjkwNmRlZTE4
ZTAxNzc5ZWM2MTE0NzQzMWM3OTVlMzhhNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSwxMCArODksMTIg
QEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY28KICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29p
bmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCiAgICAgYXV0byBw
YXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwogICAgIGF1
dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICBpZiAo
cGFyYWdyYXBoU3RhcnQuaXNOdWxsKCkgfHwgcGFyYWdyYXBoRW5kLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0
YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVj
dGlvbkVuZCkuZ2V0KCkpOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShs
ZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQpOworICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJhY3Rl
ckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFy
eVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKKyAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3RlckNv
dW50ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KTsKKyAgICBOU1JhbmdlIHJhbmdl
VG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uQ2hh
cmFjdGVyQ291bnQpOwogCiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogICAgIHRv
a2VuUmFuZ2UocGxhaW5UZXh0KG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5k
KS5nZXQoKSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CkBAIC0xMzMsNyArMTM1LDEyIEBAIHN0
ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6
OnJhbmdlQXRIaXRUZXN0UmVzdWx0CiAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAgICAg
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwogCi0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9
IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFy
YWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpLCAwKTsKKyAgICBh
dXRvIGZ1bGxDaGFyYWN0ZXJTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZ1bGxDaGFyYWN0ZXJS
YW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBtYWtl
Qm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgaWYgKCFmdWxsQ2hhcmFjdGVyU3RhcnQgfHwg
IXBvc2l0aW9uQm91bmRhcnkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OworCisg
ICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgKmZ1
bGxDaGFyYWN0ZXJTdGFydCwgKnBvc2l0aW9uQm91bmRhcnkgfSksIDApOwogICAgIE5TRGljdGlv
bmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gdG9rZW5S
YW5nZShwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKSwgcmFuZ2VUb1Bhc3MsICZv
cHRpb25zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGVkZTBiNGEw
MDhhYzk5OWMwNGE0Y2M2OGY3YWVkOWFhMmRiNmNlYWYuLjk4NjdkMDYzYTY3YjQwYzM3ZGJiNGJl
MTRjNzIxZDA2NTg0Y2FlZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAg
LTY1NCwxMCArNjU0LDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZl
bnRUcmlwbGVDbGljayhjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSCiAgICAgcmV0dXJuIHVw
ZGF0ZVNlbGVjdGlvbkZvck1vdXNlRG93bkRpc3BhdGNoaW5nU2VsZWN0U3RhcnQodGFyZ2V0Tm9k
ZSwgZXhwYW5kU2VsZWN0aW9uVG9SZXNwZWN0U2VsZWN0T25Nb3VzZURvd24oKnRhcmdldE5vZGUs
IG5ld1NlbGVjdGlvbiksIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKIH0KIAotc3RhdGljIGludCB0
ZXh0RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQor
c3RhdGljIENoYXJhY3RlckNvdW50IHRleHREaXN0YW5jZShjb25zdCBQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
c3RhcnQuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKLSAgICByZXR1cm4g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgYXV0byBz
dGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpOworICAgIGF1dG8gZW5kQm91
bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQpOworICAgIGlmICghc3RhcnRCb3VuZGFyeSB8
fCAhZW5kQm91bmRhcnkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjaGFyYWN0ZXJD
b3VudCh7ICpzdGFydEJvdW5kYXJ5LCAqZW5kQm91bmRhcnkgfSwgdHJ1ZSk7CiB9CiAKIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0aW5n
UmFuZ2UuY3BwCmluZGV4IDFhZmFlNWViYmY1ZTYzZDliZWRmMzAzOWRmNDQ1MWM5YjU1M2E2Mzgu
LmI4OTkzM2ZmYTFiZjI4NDNjMjZmZGJkNjZkMjkyNmVkMDBjNWY2YTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvRWRpdGluZ1JhbmdlLmNwcApAQCAtNTgsMTggKzU4LDE3IEBAIFJlZlB0cjxXZWJDb3Jl
OjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29u
c3QgRWRpdGluCiAKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID09IEVkaXRp
bmdSYW5nZUlzUmVsYXRpdmVUbzo6UGFyYWdyYXBoKTsKIAotICAgIGNvbnN0IFdlYkNvcmU6OlZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICBhdXRvJiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRP
ZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpKTsKLSAgICBpZiAoIXBhcmFncmFwaFJhbmdlKQorICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQg
PSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSkpOworICAgIGlmICghcGFyYWdyYXBoU3RhcnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGF1dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJlZVNj
b3BlKCkucm9vdE5vZGUoKTsKIAotICAgIGF1dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBoUmFuZ2Uu
Z2V0KCktPnN0YXJ0Q29udGFpbmVyKCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBpbnQg
cGFyYWdyYXBoU3RhcnRJbmRleCA9IFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
V2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZShyb290Tm9kZS5kb2N1bWVudCgpLCAmcm9vdE5vZGUsIDAs
ICZwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
T2Zmc2V0KCkpLnB0cigpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5n
ZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXggKyBz
dGF0aWNfY2FzdDxpbnQ+KHJhbmdlLmxvY2F0aW9uKSwgbGVuZ3RoKTsKKyAgICBhdXRvIHBhcmFn
cmFwaFN0YXJ0SW5kZXggPSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCh7IHsgcm9vdE5vZGUsIDAg
fSwgKnBhcmFncmFwaFN0YXJ0IH0pOworICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6
OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRl
eCArIHJhbmdlLmxvY2F0aW9uLCBsZW5ndGgpOwogfQogCiBFZGl0aW5nUmFuZ2UgRWRpdGluZ1Jh
bmdlOjpmcm9tUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpSYW5n
ZSogcmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBlZGl0aW5nUmFuZ2VJc1JlbGF0aXZl
VG8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDllMjQ3NThjZDkyY2Y3NTA4NmZjYzIxODI0
YjM1Yzg4MDcxMjMyNzMuLjUyYmI3Yzc2M2QwMGIwMDNkODFjZDBlOGIxOWY5ODlmY2FiMWJhMzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC02NSw4ICs2NSw2IEBACiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVRleHRDaGVja2luZ1JlcXVl
c3RJRCgpCiB7CkBAIC0zNjEsNiArMzU5LDcgQEAgV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNw
b25zZSBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RET01QYXN0ZUFjY2Vzcyhjb25zdCBTdHIKIH0K
IAogI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShHTElCKQorCiB2b2lkIFdlYkVkaXRvckNs
aWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKICAgICBp
ZiAobV9wYWdlLT5oYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChldmVudCkpCkBAIC0zNzEsNiAr
MzcwLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihL
ZXlib2FyZEV2ZW50JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorCiAjZW5kaWYgLy8g
IVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEdMSUIpCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0
ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxlbWVudCkKQEAgLTQyMCw2ICs0MjAs
NyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVu
dCogZWxlbWVudCkKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorCiB2b2lkIFdlYkVk
aXRvckNsaWVudDo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CkBAIC00MjksNiArNDMwLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnN1
YkZyYW1lU2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQorCiAjZW5kaWYKIAogc3RhdGljIGJvb2wgZ2V0QWN0aW9uVHlwZUZvcktleUV2ZW50KEtleWJv
YXJkRXZlbnQqIGV2ZW50LCBXS0lucHV0RmllbGRBY3Rpb25UeXBlJiB0eXBlKQpAQCAtNTQ5LDIw
ICs1NTEsMjUgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0
cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW0KICAgICAqYmFkR3JhbW1hckxlbmd0
aCA9IHJlc3VsdExlbmd0aDsKIH0KIAotc3RhdGljIGludDMyX3QgaW5zZXJ0aW9uUG9pbnRGcm9t
Q3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9u
KQorc3RhdGljIENoYXJhY3RlckNvdW50IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKLSAgICBWaXNp
YmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3Jh
cGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAgICBh
dXRvIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAg
ICBhdXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzZWxlY3Rp
b25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0
YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKKyAgICBpZiAoIXNlbGVjdGlvblN0YXJ0
Qm91bmRhcnkgfHwgIXBhcmFncmFwaFN0YXJ0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5k
YXJ5IH0pOwogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKKwogVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChT
dHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE9wdGlvblNldDxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBl
PiBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9u
KQogewogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgbV9wYWdl
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1RleHRPZlBhcmFncmFwaChz
dHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgY2hlY2tpbmdUeXBlcywgaW5zZXJ0
aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKSksIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoOjpSZXBseShyZXN1bHRzKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdHM7CiB9CisKICNlbmRpZgogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1h
clBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKQEAgLTYxNiwxNSAr
NjIzLDEzIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJbnB1dE1ldGhvZFN0YXRlKEVsZW1l
bnQqIGVsZW1lbnQpCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzdXBwb3J0c0dsb2JhbFNlbGVj
dGlvbigpCiB7Ci0jaWYgUExBVEZPUk0oR1RLKQotI2lmIFBMQVRGT1JNKFgxMSkKKyNpZiBQTEFU
Rk9STShHVEspICYmIFBMQVRGT1JNKFgxMSkKICAgICBpZiAoUGxhdGZvcm1EaXNwbGF5OjpzaGFy
ZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6WDExKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKFdBWUxBTkQpCisjaWYgUExBVEZP
Uk0oR1RLKSAmJiBQTEFURk9STShXQVlMQU5EKQogICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXkoKS50eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpXYXlsYW5kKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA2
M2M3NTc3YTVjMDA1N2NlYzhiZjg1ZjMzNTBhZDkxZGUxNmU1OGU1Li4xNDlmMWFkNmMzMTc0ZTc3
ODFjNWE0NjBlOWIwODExNjc1OGNjNDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTQzNCw2ICs1NDM0LDcgQEAgdm9pZCBXZWJQYWdlOjpj
b25maXJtQ29tcG9zaXRpb25Bc3luYygpCiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCiAKICNp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKwogc3RhdGljIEZyYW1lKiB0YXJnZXRG
cmFtZUZvckVkaXRpbmcoV2ViUGFnZSYgcGFnZSkKIHsKICAgICBGcmFtZSYgdGFyZ2V0RnJhbWUg
PSBwYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwpAQCAtNTQ3Myw3ICs1NDc0LDcgQEAgdm9pZCBXZWJQYWdlOjpkZWxldGVTdXJyb3VuZGluZyhp
bnQ2NF90IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQpCiAKICAgICBhdXRvIHNlbGVj
dGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIGF1dG8gc3Vycm91bmRp
bmdSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0
KSwgc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gY3Vyc29yUG9zaXRpb24gPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKHN1cnJvdW5kaW5nUmFuZ2UuZ2V0KCkpOworICAgIGF1dG8gY3Vyc29y
UG9zaXRpb24gPSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCgqc3Vycm91bmRpbmdSYW5nZSk7CiAg
ICAgYXV0byYgcm9vdE5vZGUgPSBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLnRy
ZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBjdXJzb3JQb3NpdGlv
biArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCkBA
IC01NDg1LDYgKzU0ODYsNyBAQCB2b2lkIFdlYlBhZ2U6OmRlbGV0ZVN1cnJvdW5kaW5nKGludDY0
X3Qgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudCkKICAgICB0YXJnZXRGcmFtZS0+ZWRp
dG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CiAgICAgc2VuZEVkaXRvclN0
YXRlVXBkYXRlKCk7CiB9CisKICNlbmRpZgogCiB2b2lkIFdlYlBhZ2U6OmRpZEFwcGx5U3R5bGUo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCAzMTUyYzM3ZjRmNGRjZjJmZDEwNWE2NDRmZDFlMDcwYzk2ODE1YmYxLi5mNGY4
NDhmMzc4YTM0ZGEzZjdlYjJlZjhhYWE5ZjIwZTI1Njk2MTkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTk4OSwxMyAr
MTk4OSwxNiBAQCB2b2lkIFdlYlBhZ2U6OnN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShi
b29sIHNob3VsZFN0b3JlKQogICAgIH0KIH0KIAotc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiByYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24sIGNvbnN0IFN0cmluZyYgbWF0Y2hUZXh0LCBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJh
bmdlKQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU5lYXJQb3NpdGlvbk1hdGNo
ZXNUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgbWF0
Y2hUZXh0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAgaWYgKCFz
ZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRvIGxpdmVSYW5nZSA9IHNlbGVjdGlvbi5maXJzdFJhbmdl
KCk7CisgICAgaWYgKCFsaXZlUmFuZ2UpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2VsZWN0aW9uUmFuZ2UtPm93bmVyRG9jdW1l
bnQoKSwgc2VsZWN0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0
T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSwgdHJ1ZSk7Ci0g
ICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0KCpzZWxlY3Rpb25SYW5nZSwgbWF0Y2hUZXh0
LCB7IH0sIHRhcmdldE9mZnNldCk7CisgICAgU2ltcGxlUmFuZ2UgcmFuZ2UgeyAqbGl2ZVJhbmdl
IH07CisgICAgYXV0byBib3VuZGFyeVBvaW50ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24p
OworICAgIGlmICghYm91bmRhcnlQb2ludCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFpblRleHQocmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCBj
aGFyYWN0ZXJDb3VudCh7IHJhbmdlLnN0YXJ0LCAqYm91bmRhcnlQb2ludCB9LCB0cnVlKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMy
X3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAg
LTIwMjIsNyArMjAyNSw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNl
dFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRlCiAKICAgICBpZiAocGxh
aW5UZXh0Rm9yRGlzcGxheShyYW5nZS5wdHIoKSkgIT0gdGV4dCkgewogICAgICAgICAvLyBUcnkg
dG8gc2VhcmNoIGZvciBhIHJhbmdlIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHRvIHRoZSBwb3NpdGlv
biB3aXRoaW4gdGhlIHNlbGVjdGlvbiByYW5nZSB0aGF0IG1hdGNoZXMgdGhlIHBhc3NlZCBpbiB0
ZXh0LgotICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSByYW5nZU5lYXJQb3NpdGlvbk1hdGNo
ZXNUZXh0KHN0YXJ0UG9zaXRpb24sIHRleHQsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
KSkgeworICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSByYW5nZU5lYXJQb3NpdGlvbk1hdGNo
ZXNUZXh0KHN0YXJ0UG9zaXRpb24sIHRleHQsIHNlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGlm
ICghd29yZFJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgICAgICAgICByYW5nZSA9IGNyZWF0
ZUxpdmVSYW5nZSgqd29yZFJhbmdlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCAzYTBkYzQ1MjAxNzZj
NGNiMzlkMThjZDUxMDIyYTA0ZWIwN2NkNzgyLi4yYzU4OTZkZjc4NTc1ODY2MTBkMmEzYTY1NTZk
NTgxOWNmNmZmZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTQwLDE5ICsxNDAsMjIgQEAgdm9pZCBXZWJQYWdlOjpw
bGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCwgSW5j
bHVkZVBvc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1
dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwog
ICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgcG9z
dExheW91dERhdGEgPSByZXN1bHQucG9zdExheW91dERhdGEoKTsKICAgICBWaXNpYmxlUG9zaXRp
b24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25T
dGFydCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBo
KHNlbGVjdGlvbkVuZCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydEJvdW5kYXJ5ID0gbWFrZUJv
dW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gbWFr
ZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgYXV0byBwYXJhZ3Jh
cGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3Rh
cnQpKTsKKworICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhc2VsZWN0aW9uRW5k
IHx8ICFwYXJhZ3JhcGhTdGFydCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgcG9zdExheW91dERh
dGEuY2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLSAg
ICBwb3N0TGF5b3V0RGF0YS5zZWxlY3RlZFRleHRMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkgLSBw
b3N0TGF5b3V0RGF0YS5jYW5kaWRhdGVSZXF1ZXN0U3RhcnRQb3NpdGlvbjsKKyAgICBwb3N0TGF5
b3V0RGF0YS5jYW5kaWRhdGVSZXF1ZXN0U3RhcnRQb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50KHsg
KnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsKKyAgICBwb3N0TGF5
b3V0RGF0YS5zZWxlY3RlZFRleHRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudCh7ICpzZWxlY3Rpb25T
dGFydEJvdW5kYXJ5LCAqc2VsZWN0aW9uRW5kIH0pOwogICAgIHBvc3RMYXlvdXREYXRhLnBhcmFn
cmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gcGxhaW5UZXh0KGZyYW1lLmVkaXRvcigp
LmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKS5nZXQoKSk7CiAgICAgcG9zdExheW91
dERhdGEuc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCA9IGZyYW1lLmVkaXRvcigpLnN0cmluZ0Zv
ckNhbmRpZGF0ZVJlcXVlc3QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IDdjNTA2ZmM2YTdh
MzFiZjM3N2NhNjVkYzY1MTA0NGY0MWNmOWRmMTAuLmNhNDc5MzEwNTRiODAyNjI2ODczZTNmNTNm
YjVlZTMwNTRlOTg1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTEwMzEsMTYgKzEwMzEsMTkg
QEAgc3RhdGljIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNvcmUoTlNBcnJheSAqaW5jb21p
bmdSZXN1bHRzLCBPcHRpb25TZXQ8VGV4dEMKICAgICByZXR1cm4gcmVzdWx0czsKIH0KIAotc3Rh
dGljIGludCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCitzdGF0aWMgTlNVSW50ZWdlciBpbnNlcnRpb25Q
b2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bikKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9
IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIHJldHVybiBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQp
LmdldCgpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50
KHNlbGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5
UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkpOworICAgIGlmICghc2VsZWN0
aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0
YXJ0Qm91bmRhcnkgfSk7CiB9CiAKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRv
ckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcsIE9wdGlvblNl
dDxUZXh0Q2hlY2tpbmdUeXBlPiBjb3JlQ2hlY2tpbmdUeXBlcywgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBA
eyBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5IDogIFtOU051bWJlciBudW1iZXJXaXRo
VW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVu
dFNlbGVjdGlvbildIH07CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gQHsgTlNUZXh0Q2hl
Y2tpbmdJbnNlcnRpb25Qb2ludEtleSA6IEAoaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihjdXJyZW50U2VsZWN0aW9uKSkgfTsKICAgICByZXR1cm4gY29yZShbW05TU3BlbGxDaGVj
a2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6c3RyaW5nLmNyZWF0ZU5TU3RyaW5n
V2l0aG91dENvcHlpbmcoKS5nZXQoKSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3Ro
KCkpIHR5cGVzOihuc1RleHRDaGVja2luZ1R5cGVzKGNvcmVDaGVja2luZ1R5cGVzKSB8IE5TVGV4
dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5KSBvcHRpb25zOm9wdGlvbnMgaW5TcGVsbERvY3VtZW50
V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3JhcGh5Ok5VTEwgd29yZENv
dW50Ok5VTExdLCBjb3JlQ2hlY2tpbmdUeXBlcyk7CiB9CiAKQEAgLTEwODMsNyArMTA4Niw3IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdv
cmQsIGNvbnN0IFN0cmluZyYgY29udGV4CiAgICAgTlNTdHJpbmcgKmxhbmd1YWdlID0gbmlsOwog
ICAgIE5TT3J0aG9ncmFwaHkqIG9ydGhvZ3JhcGh5ID0gbmlsOwogICAgIE5TU3BlbGxDaGVja2Vy
ICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07Ci0gICAgTlNE
aWN0aW9uYXJ5ICpvcHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21D
dXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSB9OworICAgIE5TRGljdGlvbmFyeSAq
b3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiBAKGluc2VydGlv
blBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpIH07CiAgICAgaWYg
KGNvbnRleHQubGVuZ3RoKCkpIHsKICAgICAgICAgW2NoZWNrZXIgY2hlY2tTdHJpbmc6Y29udGV4
dCByYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSB0eXBlczpOU1RleHRDaGVj
a2luZ1R5cGVPcnRob2dyYXBoeSBvcHRpb25zOm9wdGlvbnMgaW5TcGVsbERvY3VtZW50V2l0aFRh
ZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3JhcGh5OiZvcnRob2dyYXBoeSB3b3Jk
Q291bnQ6MF07CiAgICAgICAgIGxhbmd1YWdlID0gW2NoZWNrZXIgbGFuZ3VhZ2VGb3JXb3JkUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgaW5TdHJpbmc6Y29udGV4dCBvcnRo
b2dyYXBoeTpvcnRob2dyYXBoeV07CkBAIC0xMTE2LDI0ICsxMTE5LDIwIEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpyZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlCiAgICAgaWYgKCFbbV93ZWJWaWV3IHNob3VsZFJlcXVlc3RDYW5kaWRhdGVz
XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0g
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQor
ICAgIGlmICghc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3dlYlZpZXcgX3NlbGVjdGVkT3JNYWlu
RnJhbWVdKTsKKworICAgIGF1dG8qIGZyYW1lID0gY29yZShbbV93ZWJWaWV3IF9zZWxlY3RlZE9y
TWFpbkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9s
YXN0U2VsZWN0aW9uRm9yUmVxdWVzdGVkQ2FuZGlkYXRlcyA9IHNlbGVjdGlvbjsKIAotICAgIFZp
c2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsK
LSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQo
KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvblN0YXJ0KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoRW5kID0gZW5k
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRPZmZzZXRJblBh
cmFncmFwaCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uU3RhcnQpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0
KSB9KTsKKyAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VC
b3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlv
bi52aXNpYmxlRW5kKCkpIH0pOwogCi0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uU3RhcnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5k
KS5nZXQoKSk7Ci0gICAgbV9yYW5nZUZvckNhbmRpZGF0ZXMgPSBOU01ha2VSYW5nZShsZW5ndGhU
b1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9u
U3RhcnQpOworICAgIG1fcmFuZ2VGb3JDYW5kaWRhdGVzID0gTlNNYWtlUmFuZ2Uoc2VsZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaCwgc2VsZWN0aW9uTGVuZ3RoKTsKICAgICBtX3BhcmFncmFw
aENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gcGxhaW5UZXh0KGZyYW1lLT5lZGl0b3IoKS5j
b250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkuZ2V0KCkpOwogCiAgICAgTlNUZXh0Q2hl
Y2tpbmdUeXBlcyBjaGVja2luZ1R5cGVzID0gTlNUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBO
U1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCB8IE5TVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBi
YzNiZWJkZjI2MmZhNGVjZmIwMTg3OGIzYzJiMGM1NWMzZWE5MDE1Li5lNGM2YWEwMDViOWY5ZDg5
OWY4MTZhM2FkYzE0OWY1MTRmYjFhMzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KQEAgLTgzNSwyNCArODM1LDE5IEBAIC0gKFJlZlB0cjxXZWJDb3Jl
OjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UgcmFuZ2VJc1JlbGF0
aXZlVG86CiAgICAgICAgIC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEgb2YgYW4gaW5w
dXQgY29udGV4dC4KICAgICAgICAgYXV0byogZWxlbWVudCA9IF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpOwogICAg
ICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJh
bmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGVsZW1lbnQsIG5zcmFuZ2UubG9jYXRpb24sIG5zcmFu
Z2UubGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQocmFuZ2VJc1JlbGF0aXZlVG8gPT0gV2Vi
UmFuZ2VJc1JlbGF0aXZlVG86OlBhcmFncmFwaCk7CiAKLSAgICBjb25zdCBhdXRvJiBzZWxlY3Rp
b24gPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisgICAgYXV0byBwYXJhZ3JhcGhT
dGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoX3ByaXZhdGUtPmNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpKTsKKyAgICBpZiAo
IXBhcmFncmFwaFN0YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvJiByb290
Tm9kZSA9IHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7
CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gbWFrZVJhbmdl
KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSwgc2VsZWN0aW9uLnZp
c2libGVFbmQoKSk7Ci0gICAgaWYgKCFwYXJhZ3JhcGhSYW5nZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvJiByb290Tm9kZSA9IHBhcmFncmFwaFJhbmdlLmdldCgpLT5zdGFy
dENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0gICAgaW50IHBhcmFncmFwaFN0
YXJ0SW5kZXggPSBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKFdlYkNvcmU6OlJh
bmdlOjpjcmVhdGUocm9vdE5vZGUuZG9jdW1lbnQoKSwgJnJvb3ROb2RlLCAwLCAmcGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydE9mZnNldCgpKS5w
dHIoKSk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRp
b25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3JhcGhTdGFydEluZGV4ICsgc3RhdGljX2Nhc3Q8
aW50Pihuc3JhbmdlLmxvY2F0aW9uKSwgbnNyYW5nZS5sZW5ndGgpOworICAgIGF1dG8gcGFyYWdy
YXBoU3RhcnRJbmRleCA9IFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KHsgeyByb290Tm9kZSwgMCB9
LCAqcGFyYWdyYXBoU3RhcnQgfSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6
cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3JhcGhTdGFydEluZGV4
ICsgbnNyYW5nZS5sb2NhdGlvbiwgbnNyYW5nZS5sZW5ndGgpOwogfQogCiAtIChET01SYW5nZSAq
KV9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMzM2E0
NDIwOGFkOTljODZkODFkYTZlZWIyMDA2YWM1ZDUyNzk4NmYuLjM3MGQxMGM2YTg3ZDU1MDEwOTQ4
YjI1N2NhZmIwYmEzMWZjN2NiZjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wMy0yMSAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hhbmdlIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVpcmUgYSBsaXZlIHJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyMDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL3NwZWxs
aW5nL2F1dG9jb3JyZWN0aW9uLWNvbnRyYWN0aW9uLWV4cGVjdGVkLnR4dDogVXBkYXRlIHRoZXNl
IGV4cGVjdGVkCisgICAgICAgIHJlc3VsdHMgYmVjYXVzZSBvZiBjaGFuZ2VzIHRvIGRlbGVnYXRl
IGNhbGxiYWNrcy4gVGhlIHRlc3QgaXMgc3RpbGwgcGFzc2luZyBhbmQgdGhpcworICAgICAgICBj
aGFuZ2UgaXMgb25seSBpbiB0aGUgbGVnYWN5IFdlYktpdCBjYXNlICh0aGVyZSBpcyBhIHNlcGFy
YXRlIHJlc3VsdCBmb3IgbW9kZXJuIFdlYktpdCkuCisgICAgICAgIFRoaXMgc2VlbXMgdG8gYmUg
YSBwcm9ncmVzc2lvbiwgbm90IGV2aWRlbmNlIG9mIGEgYnVnLgorCiAyMDIwLTAzLTIxICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIExheW91dFRlc3Qg
ZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWNvbnRhaW5lci1ob3Jpem9udGFsbHkuaHRtbCBmcmVxdWVu
dGx5IHRpbWVzIG91dCAmIGZhaWxzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL21h
Yy9zcGVsbGluZy9hdXRvY29ycmVjdGlvbi1jb250cmFjdGlvbi1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9lZGl0aW5nL21hYy9zcGVsbGluZy9hdXRvY29ycmVjdGlvbi1jb250cmFjdGlvbi1l
eHBlY3RlZC50eHQKaW5kZXggNjM4MWUyNjNkYmQ0ZGFjNDBjYWU5MWVjYmUyZjFmZmJjZTlhMzE5
Yy4uYWJmM2Q1NTBhMDg3ZGFhOTFiMDVjOTI4Zjc0ODA4ODk3NDBjZWZiZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZWRpdGluZy9tYWMvc3BlbGxpbmcvYXV0b2NvcnJlY3Rpb24tY29udHJhY3Rp
b24tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvbWFjL3NwZWxsaW5nL2F1
dG9jb3JyZWN0aW9uLWNvbnRyYWN0aW9uLWV4cGVjdGVkLnR4dApAQCAtMTUxLDIxICsxNTEsOCBA
QCBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6
cmFuZ2UgZnJvbSA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
RE9NUmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0
aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJVElORyBERUxF
R0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAg
b2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxl
Y3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKLUVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEluc2VydFRleHQ6d291bGQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBv
ZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGdpdmVuQWN0aW9u
OldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZAotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3du
c3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG8gMCBvZiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RP
TVJhbmdlOnJhbmdlIGZyb20gNSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5v
dGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpX
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gNSBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDUgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gNyBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQotRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZp
Y2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFu
Z2VOb3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA4IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gOCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxs
U2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOnJhbmdlIGZyb20gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gOCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGls
bFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA4IG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gOCBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSA5IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8g
OSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCkBAIC0x
ODYsNiArMTczLDE5IEBAIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmll
d0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDEzIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTMgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMTQgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3du
c3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNh
dGlvbgorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5n
ZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RP
TVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0VGV4dDp3b3VsZCByZXBsYWNp
bmdET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblR5cGVkCitFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMTQgb2YgI3Rl
eHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxNCBvZiAjdGV4dCA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBv
ZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5T
U2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMTQgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxNCBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8g
NiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBE
RUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMCBvZiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gNSBvZiAjdGV4dCA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDUgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9u
CitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDEzIG9mICN0ZXh0ID4gRElWID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTMgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMTQgb2YgI3Rl
eHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxNCBvZiAjdGV4dCA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9u
QWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3Rp
ZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENo
YW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0byAwIG9mIERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZB
TFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394182</attachid>
            <date>2020-03-21 15:57:04 -0700</date>
            <delta_ts>2020-03-22 12:46:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209207-20200321155703.patch</filename>
            <type>text/plain</type>
            <size>97269</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThmZmUxMWY3NTQ0NWUw
ZTAyNDUxMTIyM2FhOTVkNGE5ODg2YTlkZS4uZGRmMmFkZGIxYTk3Mjg5NzczN2RlN2M3OTRmNmYw
OTQ4ZTUxZjUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTAzLTIxICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVuYW1lZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoIHRvIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJh
bmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChX
ZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmlj
YXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSHlwZXJsaW5rLmNwcDoKKyAgICAgICAgKHJhbmdlTGVuZ3RoRm9yT2JqZWN0KTogRGl0dG8u
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252
ZXJ0VG9OU1JhbmdlOl0pOiBEaXR0by4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5oOiBF
eHBvcnQgYW5vdGhlciBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICBVc2UgY2hh
cmFjdGVyQ291bnQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnJh
bmdlTGVuZ3RoIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6Om9mZnNldFRvIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdFbmQgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5n
dGggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwgY29uc3QpOiBEaXR0by4KKworICAg
ICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFj
dGVyQ291bnQpOiBMaWtlIHRoZSBiYW92ZSBidXQgdGhlIGFyZ3VtZW50IGlzIFNpbXBsZVJhbmdl
CisgICAgICAgIGFuZCByZXR1cm4gaXMgQ2hhcmFjdGVyQ291bnQuIEV2ZW4gdGhvdWdoIGVhY2gg
aW5kaXZpZHVhbCBub2RlIGlzIGxpbWl0ZWQKKyAgICAgICAgdG8gMzItYml0IHNpemUsIHJhbmdl
cyBjb3ZlcmluZyBtdWx0aXBsZSBub2RlcyBjb3VsZCBoYXZlIGEgY291bnQgb2YKKyAgICAgICAg
Y2hhcmFjdGVycyB0aGF0IGV4Y2VlZHMgMzIgYml0cywgc28gQ2hhcmFjdGVyQ291bnQgaXMgc2l6
ZV90LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKworICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmg6IEFkZGVkIGNoYXJhY3RlckNvdW50IGZ1bmN0aW9uLAorICAgICAgICBDaGFy
YWN0ZXJDb3VudCBhbmQgQ2hhcmFjdGVyUmFuZ2UgdHlwZXMuIFJlbW92ZWQgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aC4KKyAgICAgICAgQWRkZWQgRklYTUUgY29tbWVudHMgYWJvdXQgdGhlIG5l
eHQgc3RlcHMuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludCk6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmg6IEFkZGVkIG1ha2VCb3VuZGFyeVBvaW50LiBBbHNvIHJlbW92
ZWQKKyAgICAgICAgZXh0cmFuZW91cyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgbW92ZWQgc29t
ZSBmdW5jdGlvbiBib2RpZXMgb3V0IG9mIHRoZQorICAgICAgICBjbGFzcyBkZWZpbml0aW9uLgor
CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBwdHJkaWZm
X3QuCisgICAgICAgIFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVVbml0cy5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RpY3Rpb25hcnlMb29rdXAubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0
aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rh
dGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dERpc3RhbmNlKTogRGl0
dG8uCisKIDIwMjAtMDMtMjEgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIE1ha2UgdGhlIE1lZGlhU2FtcGxlOjp0b0pTT05TdHJpbmcgbWV0aG9kIGdl
bmVyaWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMjMyODM4MzFlOTlkOTg4N2ViYzlhOTI2OWQzZmZmZmEwMDM5ZWQ2
Mi4uNDEyYmI4MzFmMzQ4MzQwMTc0NTg2ODdiZTE1ZjkxZWEyZmNjZDQyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMyBAQAorMjAyMC0wMy0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgQ2hhbmdlIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVp
cmUgYSBsaXZlIHJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDkyMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0
aW5nUmFuZ2U6OnRvUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKTogQ2hhbmdlZCByZXR1cm4gdHlw
ZSB0bworICAgICAgICBDaGFyYWN0ZXJDb3VudCBhbmQgdXNlIGNoYXJhY3RlckNvdW50LgorICAg
ICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKTog
VHdlYWtlZCAjaWYuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0Ojp0YXJnZXRGcmFtZUZvckVkaXRpbmcpOiBVc2UgY2hhcmFjdGVyQ291
bnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAg
ICAgICAoV2ViS2l0OjpyYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KTogRGl0dG8uCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogRGl0dG8uCisKIDIwMjAt
MDMtMjAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
W2lQYWRPU10gWWFob28hIHNlYXJjaCByZXN1bHRzIGFyZSBzb21ldGltZXMgem9vbWVkIGluIGEg
bGl0dGxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggN2FhOWJkZDRmODM2YTkyMDc1
MjcxMjI0MGRjZTdlMDU5YzA2NWVjYi4uMjZiNzQxZDUyMzIwZGZiNWNkOGFmNDBhZmZiYTM2Y2Q2
ZThjODA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDIwLTAzLTE3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFu
Z2UgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoaW5zZXJ0aW9uUG9pbnRGcm9t
Q3VycmVudFNlbGVjdGlvbik6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvRE9N
UmFuZ2U6cmFuZ2VJc1JlbGF0aXZlVG86XSk6IERpdHRvLgorCiAyMDIwLTAzLTIwICBKZXIgTm9i
bGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSBtZWRpYSBjYWNoZSBk
aXJlY3RvcnkgaXMgY3JlYXRlZCBiZWZvcmUgcGFzc2luZyB0byBBVlVSTEFzc2V0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggMjg4MDM0
MDE5NmQxNjlhM2RmMWMwMGFkZmE4Zjk2Zjg0YzRkODJiMi4uZjRkNWMxZTMzNTlkM2E1MWY2MDNm
NWFhZDQwYzI2NmY1NjIyNDVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xOTM4LDE4ICsxOTM4LDE2IEBAIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5nZU1hdGNoZXNUZXh0TmVhclJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlCiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IG1hdGNoVGV4dC5sZW5ndGgoKTsK
ICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhP
ZmZzZXQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpLCAt
dGV4dExlbmd0aCk7CiAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBv
c2l0aW9uV2l0aE9mZnNldChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ob3JpZ2luYWxSYW5n
ZS5zdGFydCksIDIgKiB0ZXh0TGVuZ3RoKTsKLQogICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICBzdGFydFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG9yaWdpbmFsUmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpKTsKICAgICBpZiAoZW5kUG9zaXRp
b24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uSW5PckFmdGVy
Tm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwogCi0gICAgYXV0byBzZWFy
Y2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pOwotICAgIGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgU2ltcGxlUmFu
Z2Ugc2VhcmNoUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRQb3NpdGlvbiksICptYWtl
Qm91bmRhcnlQb2ludChlbmRQb3NpdGlvbikgfTsKKyAgICBpZiAoc2VhcmNoUmFuZ2UuY29sbGFw
c2VkKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBzdGFydFBvc2l0aW9uLCBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ob3JpZ2luYWxSYW5nZS5zdGFydCkpOwotICAgIHVuc2lnbmVkIHRhcmdldE9m
ZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIHRydWUpOworICAg
IGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS5zdGFydCwg
b3JpZ2luYWxSYW5nZS5zdGFydCB9LCB0cnVlKTsKICAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFp
blRleHQoc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCkBA
IC0xOTkyLDEyICsxOTkwLDExIEBAIHN0YXRpYyBib29sIGNoYXJhY3Rlck9mZnNldHNJbk9yZGVy
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0MSwgY29uCiBzdGF0aWMgTm9k
ZSogcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSwg
aW50JiBvZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkKIHsKICAgICAvLyBVc2UgdGhpcyBmdW5j
dGlvbiB0byBpbmNsdWRlIHRoZSByZXBsYWNlZCBub2RlIGl0c2VsZiBpbiB0aGUgcmFuZ2Ugd2Ug
YXJlIGNyZWF0aW5nLgotICAgIGlmICghcmVwbGFjZWROb2RlKQorICAgIGF1dG8gbm9kZVJhbmdl
ID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMocmVwbGFjZWROb2RlKTsKKyAg
ICBpZiAoIW5vZGVSYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgUmVm
UHRyPFJhbmdlPiBub2RlUmFuZ2UgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50
cyhyZXBsYWNlZE5vZGUpOwotICAgIGludCBub2RlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChub2RlUmFuZ2UuZ2V0KCkpOwotICAgIG9mZnNldCA9IGNoYXJhY3RlckNvdW50IDw9
IG5vZGVMZW5ndGggPyByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSA6IHJlcGxhY2Vk
Tm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMTsKKyAgICBib29sIGlzSW5Ob2RlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlckNvdW50KSA8PSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3Vu
dCgqbm9kZVJhbmdlKTsKKyAgICBvZmZzZXQgPSByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKSArIChpc0luTm9kZSA/IDAgOiAxKTsKICAgICByZXR1cm4gcmVwbGFjZWROb2RlLT5wYXJl
bnROb2RlKCk7CiB9CiAKQEAgLTI0MTMsMTQgKzI0MTAsMTYgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBj
aGFyYWMKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAogICAgIC8vIFdl
IGRvbid0IGFsd2F5cyBtb3ZlIG9uZSAnY2hhcmFjdGVyJyBhdCBhIHRpbWUgc2luY2UgdGhlcmUg
bWlnaHQgYmUgY29tcG9zZWQgY2hhcmFjdGVycy4KLSAgICBpbnQgbmV4dE9mZnNldCA9IFBvc2l0
aW9uOjp1bmNoZWNrZWROZXh0T2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJP
ZmZzZXQub2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gUG9zaXRpb246OnVuY2hl
Y2tlZE5leHRPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZz
ZXQpOwogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFu
ZE9mZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIG5leHRPZmZzZXQpOwogICAgIAogICAgIC8v
IFRvIGJlIGNvbnNpc3RlbnQgd2l0aCBWaXNpYmxlUG9zaXRpb24sIHdlIHNob3VsZCBjb25zaWRl
ciB0aGUgY2FzZSB0aGF0IGN1cnJlbnQgbm9kZSBlbmQgdG8gbmV4dCBub2RlIHN0YXJ0IGNvdW50
cyAxIG9mZnNldC4KICAgICBpZiAoIWlnbm9yZU5leHROb2RlU3RhcnQgJiYgIW5leHQuaXNOdWxs
KCkgJiYgIWlzUmVwbGFjZWROb2RlT3JCUihuZXh0Lm5vZGUpICYmIG5leHQubm9kZSAhPSBjaGFy
YWN0ZXJPZmZzZXQubm9kZSkgewotICAgICAgICBpbnQgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zm
c2V0LCBuZXh0KS5nZXQoKSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiBuZXh0T2Zmc2V0IC0gY2hh
cmFjdGVyT2Zmc2V0Lm9mZnNldCkKLSAgICAgICAgICAgIG5leHQgPSBjaGFyYWN0ZXJPZmZzZXRG
b3JOb2RlQW5kT2Zmc2V0KCpuZXh0Lm5vZGUsIDAsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0
KTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9m
ZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBuZXh0KSkgeworICAgICAgICAgICAgYXV0byBsZW5ndGgg
PSBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IG5leHRP
ZmZzZXQgLSBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0KQorICAgICAgICAgICAgICAgIG5leHQgPSBj
aGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpuZXh0Lm5vZGUsIDAsIFRyYXZlcnNlT3B0
aW9uSW5jbHVkZVN0YXJ0KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICByZXR1cm4gbmV4
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0
Q2FjaGVBdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RD
YWNoZUF0ay5jcHAKaW5kZXggZmUxMjYwZDdmZGNmNjg4OThhZDg1NTc4NGIwNTFkM2Q3MjFkMTA2
Zi4uZDE1NmFlY2U4Njg1ZWQzNDRjOTU1ZWQyN2FkOTA5MDM2MzYxZTg4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAK
QEAgLTM1NSw3ICszNTUsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxh
dGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZQogICAgICAgICAvLyB0
aGUgY3VycmVudCBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBlbnN1cmUgd2UgZW1pdCB0aGUKICAg
ICAgICAgLy8gcmlnaHQgb2Zmc2V0IChlLmcuIG11bHRpbGluZSB0ZXh0IGFyZWFzKS4KICAgICAg
ICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUtPnBhcmVudE5vZGUo
KSwgMCwgbm9kZSwgMCk7Ci0gICAgICAgIG9mZnNldFRvRW1pdCA9IG9mZnNldCArIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCkpOworICAgICAgICBvZmZzZXRUb0VtaXQgPSBv
ZmZzZXQgKyBjaGFyYWN0ZXJDb3VudChyYW5nZS5nZXQoKSk7CiAgICAgfQogCiAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKHdyYXBwZXIsIGRldGFpbC5kYXRhKCksIG9mZnNldFRvRW1pdCwgdGV4
dFRvRW1pdC5sZW5ndGgoKSwgdGV4dFRvRW1pdC51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxp
bmsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUh5cGVybGluay5jcHAKaW5kZXggYTQ2MWMxZmFkYWY4YzcyNWRjZGI0ZmU5ZTVmODAwZmI4YjY4
MjllZC4uOGQ5NmQyYTYxNzI1Y2IwMzViY2FmMjA4YzM5NzMxNDgyOTQ4OWQ0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVy
bGluay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUh5cGVybGluay5jcHAKQEAgLTE1NCw3ICsxNTQsNyBAQCBzdGF0aWMgQXRrT2JqZWN0
KiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0T2JqZWN0KEF0a0h5cGVybGluayogbGluaywg
Z2ludCBpbgogc3RhdGljIGdpbnQgcmFuZ2VMZW5ndGhGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9i
amVjdCYgb2JqLCBSYW5nZSogcmFuZ2UpCiB7CiAgICAgLy8gVGhpcyBpcyBnb2luZyB0byBiZSB0
aGUgYWN0dWFsIGxlbmd0aCBpbiBtb3N0IG9mIHRoZSBjYXNlcwotICAgIGludCBiYXNlTGVuZ3Ro
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZSwgdHJ1ZSk7CisgICAgaW50IGJhc2VM
ZW5ndGggPSBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIHRydWUpOwogCiAgICAgLy8gQ2hlY2sgd2hl
dGhlciB0aGUgY3VycmVudCBoeXBlcmxpbmsgYmVsb25ncyB0byBhIGxpc3QgaXRlbS4KICAgICAv
LyBJZiBzbywgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVtJ3MgbWFy
a2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggYjI3MTVjN2M1M2Nh
ZTlkMDRhZjNlNGMwZjkzYWY5NzVmNjNkYjUyNS4uMTU0ZGMzYzAyNzc2ZGE0ODgzNDdjMmJhMDFk
ZmY1ODI1NmI4NWEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAt
NDEwLDkgKzQxMCw5IEBAIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3Qo
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsCiAKICAgICAvLyBTZXQgdmFs
dWVzIGZvciBzdGFydCBvZmZzZXRzIGFuZCBjYWxjdWxhdGUgaW5pdGlhbCByYW5nZSBsZW5ndGgu
CiAgICAgLy8gVGhlc2UgdmFsdWVzIG1pZ2h0IGJlIGFkanVzdGVkIGxhdGVyIHRvIGNvdmVyIHNw
ZWNpYWwgY2FzZXMuCi0gICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQo
Y29yZU9iamVjdCwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZUluUGFyZW50LnB0cigp
LCB0cnVlKSk7CisgICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQoY29y
ZU9iamVjdCwgY2hhcmFjdGVyQ291bnQocmFuZ2VJblBhcmVudC5nZXQoKSwgdHJ1ZSkpOwogICAg
IGF1dG8gbm9kZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlUmFu
Z2VTdGFydCwgbm9kZVJhbmdlRW5kKTsKLSAgICBpbnQgcmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgaW50IHJhbmdlTGVu
Z3RoID0gY2hhcmFjdGVyQ291bnQobm9kZVJhbmdlLmdldCgpLCB0cnVlKTsKIAogICAgIC8vIFNw
ZWNpYWwgY2FzZXMgdGhhdCBhcmUgb25seSByZWxldmFudCB3aGVuIHdvcmtpbmcgd2l0aCAqX0VO
RCBib3VuZGFyaWVzLgogICAgIGlmIChzZWxlY3Rpb24uYWZmaW5pdHkoKSA9PSBVUFNUUkVBTSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZVV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZVV0aWwuY3BwCmluZGV4IDU2MzkyYzBiZDgzZDFhMmE3Y2I3NmE3NTRiOWViODgz
ZjIwY2ZmNWUuLjM5NGQ0ODYzZjAzYTJmOGE1NDMxNGZhYjA3NzkyYjZhZTJmMDFmMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVV
dGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlVXRpbC5jcHAKQEAgLTI0NywxMCArMjQ3LDEwIEBAIEFYQ29yZU9iamVjdCogb2JqZWN0
Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFYQ29yZU9iamVjdCogcmVmZXJlbmNlT2Jq
ZWN0CiAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgZWxzZSBpZiAoIWlzU3RhcnRPZkxpbmUoZW5k
UG9zaXRpb24pKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uoc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24ucHJldmlvdXMoKSk7Ci0gICAgICAgIG9mZnNldCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpICsgMTsKKyAgICAgICAg
b2Zmc2V0ID0gKHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCB0cnVlKSA6IDApICsgMTsK
ICAgICB9IGVsc2UgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKLSAgICAgICAgb2Zmc2V0ID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIG9mZnNldCA9IHJhbmdl
ID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCB0cnVlKSA6IDA7CiAgICAgfQogCiAgICAgcmV0dXJu
IGZpcnN0VW5pZ25vcmVkUGFyZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5tbQppbmRleCAxMDFlYjJkODI3OTc5NGRhOTEzNGQyODExODBkZWE1Y2FiODBkYzVkLi4xZmFl
NWFmYzliOTI2MWFkN2FmNWExOGE1M2ZmZjM0NDhhYzZkMjY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMjMxMCwzMCArMjMxMCwzMCBAQCAtIChOU0FycmF5
ICopYXJyYXlPZlRleHRGb3JUZXh0TWFya2VyczooTlNBcnJheSAqKW1hcmtlcnMgYXR0cmlidXRl
ZDooQk9PTClhdHRyaQogICAgIHJldHVybiBbYXJyYXkgYXV0b3JlbGVhc2VdOwogfQogCi0tIChO
U1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSAqKXJhbmdlCistIChOU1JhbmdlKV9jb252
ZXJ0VG9OU1JhbmdlOihSYW5nZSAqKWxpdmVSYW5nZQogewotICAgIGlmICghcmFuZ2UpCisgICAg
aWYgKCFsaXZlUmFuZ2UpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5kb2N1
bWVudCgpOwotICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBkb2N1bWVudC0+ZnJhbWUoKS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIEVsZW1l
bnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBkb2N1bWVudC0+ZG9j
dW1lbnRFbGVtZW50KCk7CisgICAgU2ltcGxlUmFuZ2UgcmFuZ2UgeyAqbGl2ZVJhbmdlIH07CisK
KyAgICBhdXRvJiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCk7CisgICAgYXV0byog
ZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
biBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAgIGF1dG8qIHJvb3RFZGl0YWJsZUVs
ZW1lbnQgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOworICAgIGF1dG8qIHNjb3BlID0gcm9vdEVkaXRhYmxlRWxlbWVudCA/IHJvb3RFZGl0YWJs
ZUVsZW1lbnQgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBpZiAoIXNjb3BlKQor
ICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKICAgICAvLyBNb3Vz
ZSBldmVudHMgbWF5IGNhdXNlIFRTTSB0byBhdHRlbXB0IHRvIGNyZWF0ZSBhbiBOU1JhbmdlIGZv
ciBhIHBvcnRpb24gb2YgdGhlIHZpZXcKLSAgICAvLyB0aGF0IGlzIG5vdCBpbnNpZGUgdGhlIGN1
cnJlbnQgZWRpdGFibGUgcmVnaW9uLiAgVGhlc2UgY2hlY2tzIGVuc3VyZSB3ZSBkb24ndCBwcm9k
dWNlCisgICAgLy8gdGhhdCBpcyBub3QgaW5zaWRlIHRoZSBjdXJyZW50IGVkaXRhYmxlIHJlZ2lv
bi4gVGhlc2UgY2hlY2tzIGVuc3VyZSB3ZSBkb24ndCBwcm9kdWNlCiAgICAgLy8gcG90ZW50aWFs
bHkgaW52YWxpZCBkYXRhIHdoZW4gcmVzcG9uZGluZyB0byBzdWNoIHJlcXVlc3RzLgotICAgIGlm
ICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5zdGFydENvbnRh
aW5lcigpLmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdl
KE5TTm90Rm91bmQsIDApOwotICAgIGlmICgmcmFuZ2UtPmVuZENvbnRhaW5lcigpICE9IHNjb3Bl
ICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKCkuaXNEZXNjZW5kYW50T2Yoc2NvcGUpKQorICAgIGlm
ICghc2NvcGUtPmNvbnRhaW5zKHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKSkgfHwgIXNjb3Bl
LT5jb250YWlucyhyYW5nZS5lbmQuY29udGFpbmVyLnB0cigpKSkKICAgICAgICAgcmV0dXJuIE5T
TWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCi0gICAgYXV0byB0ZXN0UmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgJnJhbmdlLT5zdGFydENvbnRhaW5l
cigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCZ0ZXN0UmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGludCBzdGFydFBvc2l0aW9uID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UucHRyKCkpOwotICAgIHRlc3RSYW5nZS0+c2V0RW5k
KHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBBU1NFUlQo
JnRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgaW50IGVuZFBvc2l0
aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UucHRyKCkpOwotICAgIHJl
dHVybiBOU01ha2VSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRp
b24pOworICAgIHJldHVybiBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAw
IH0sIHJhbmdlLnN0YXJ0IH0pLCBjaGFyYWN0ZXJDb3VudChyYW5nZSkpOwogfQogCiAtIChSZWZQ
dHI8UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5oCmluZGV4IDEyN2YyZjE4OTQ2NGMxMGM0OWE1NTQ0ODY2ZWFjNDk0ZDRlODhi
MjMuLmFjZDk4NTVhODkxOWMzNzZlMTU3ZDFjZWQ5YzVkZWVkN2ExOTU3MjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5oCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAK
ICAgICBib29sIGNvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0ID09IGVuZDsgfQogCi0g
ICAgU2ltcGxlUmFuZ2UoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50Jiwg
Y29uc3QgQm91bmRhcnlQb2ludCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlKEJv
dW5kYXJ5UG9pbnQmJiwgQm91bmRhcnlQb2ludCYmKTsKIAogICAgIC8vIENvbnZlbmllbmNlIG92
ZXJsb2FkcyB0byBoZWxwIHdpdGggdHJhbnNpdGlvbiBmcm9tIHVzaW5nIGEgbG90IG9mIGxpdmUg
cmFuZ2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAKaW5kZXggZWMyMjE2ZDdhZDlmMmMzOTEwODZlOGVlMDcxNTdkMmVjYmEw
OTVkMi4uYjdhMDg4MWU2ZjRjZTM2ZjY1OTU1NmZjNGFiY2EzNjE2ZDExM2EzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
CkBAIC01ODAsNTIgKzU4MCwzOCBAQCBTdHJpbmcgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
bWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVUZXh0KEFsdAogCiB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25z
dCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUsIEFsdGVybmF0aXZlVGV4
dFR5cGUgYWx0ZXJuYXRpdmVUeXBlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IG1hcmtlclR5cGVzVG9BZGQpCiB7Ci0gICAgYXV0byBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5p
bmdDb3JyZWN0aW9uID0gcmFuZ2UuY2xvbmVSYW5nZSgpOwotCi0gICAgc2V0U3RhcnQocGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChyYW5n
ZS5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbi5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgocmFuZ2UuZW5kUG9zaXRpb24oKSkpOwot
CiAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSB0aGUgd29yZCBhdCByYW5nZSByYW5nZVdpdGhBbHRl
cm5hdGl2ZSwgd2UgbmVlZCB0byBhZGQgbWFya2VycyB0byB0aGF0IHJhbmdlLgotICAgIC8vIEhv
d2V2ZXIsIG9uY2UgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UsIHRoZSB2YWx1ZSBvZiByYW5n
ZVdpdGhBbHRlcm5hdGl2ZSBpcyBub3QgdmFsaWQgYW55bW9yZS4KLSAgICAvLyBTbyBiZWZvcmUg
d2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUg
c3RhcnQgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLiBXZSB1c2UgY29ycmVj
dGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgKLSAgICAvLyB0byBzdG9yZSB0aGlzIHZhbHVlLiBJ
biBvcmRlciB0byBvYnRhaW4gdGhpcyBvZmZzZXQsIHdlIG5lZWQgdG8gZmlyc3QgY3JlYXRlIGEg
cmFuZ2UKLSAgICAvLyB3aGljaCBzcGFucyBmcm9tIHRoZSBzdGFydCBvZiBwYXJhZ3JhcGggdG8g
dGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHJhbmdlV2l0aEFsdGVybmF0aXZlLgotICAgIGF1dG8gY29y
cmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSwg
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpKTsKLQot
ICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFuZ2Uu
c3RhcnRQb3NpdGlvbigpOwotICAgIGlmICghc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJu
YXRpdmUuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgYXV0byBzZXRFbmRS
ZXN1bHQgPSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UtPnNldEVuZCgq
c3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpLCBzdGFy
dFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpOwotICAgIGlmIChzZXRFbmRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAvLyBTbyBiZWZvcmUgd2UgY2Fycnkgb3V0IHRoZSByZXBsYWNlbWVudCxzdG9y
ZSB0aGUgc3RhcnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IHBvc2l0aW9uCisgICAg
Ly8gb2YgdGhlIGNvbnRhaW5pbmcgcGFyYWdyYXBoLgogCiAgICAgLy8gVGFrZSBub3RlIG9mIHRo
ZSBsb2NhdGlvbiBvZiBhdXRvY29ycmVjdGlvbiBzbyB0aGF0IHdlIGNhbiBhZGQgbWFya2VyIGFm
dGVyIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLgotICAgIGludCBjb3JyZWN0aW9uU3RhcnRP
ZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLnB0cigpKTsKKyAgICBhdXRvIGNvcnJlY3Rpb25T
dGFydFBvc2l0aW9uID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOworICAgIGF1dG8gY29ycmVjdGlv
blN0YXJ0IHsgbWFrZUJvdW5kYXJ5UG9pbnQoY29ycmVjdGlvblN0YXJ0UG9zaXRpb24pIH07Cisg
ICAgYXV0byBwYXJhZ3JhcGhTdGFydCB7IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3Jh
cGgoY29ycmVjdGlvblN0YXJ0UG9zaXRpb24pKSB9OworICAgIGlmICghY29ycmVjdGlvblN0YXJ0
IHx8ICFwYXJhZ3JhcGhTdGFydCkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gdHJlZVNjb3Bl
Um9vdCA9IG1ha2VSZWYoY29ycmVjdGlvblN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJv
b3ROb2RlKCkpOworICAgIEJvdW5kYXJ5UG9pbnQgdHJlZVNjb3BlU3RhcnQgeyB0cmVlU2NvcGVS
b290LmdldCgpLCAwIH07CisgICAgYXV0byBjb3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3JhcGggPSBj
aGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKmNvcnJlY3Rpb25TdGFydCB9KTsKKyAg
ICBhdXRvIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlID0gY2hhcmFjdGVyQ291bnQoeyB0cmVl
U2NvcGVTdGFydCwgKnBhcmFncmFwaFN0YXJ0IH0pOwogCi0gICAgLy8gQ2xvbmUgdGhlIHJhbmdl
LCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9y
aWdpbmFsIHJhbmdlIGFyb3VuZC4KLSAgICBhdXRvIHJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFu
Z2UuY2xvbmVSYW5nZSgpOworICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxl
ciBvZiBtYXkga2VlcCBhIHJlZmVybmVjZSB0byB0aGUgb3JpZ2luYWwgcmFuZ2UgYW5kIG1vZGlm
eSBpdC4KKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2UuY2xvbmVS
YW5nZSgpLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CiAKLSAgICBDb250YWluZXJOb2RlJiByb290
Tm9kZSA9IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVy
KCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBpbnQgcGFyYWdyYXBoU3RhcnRJbmRleCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoUmFuZ2U6OmNyZWF0ZShyb290Tm9kZS5kb2N1bWVu
dCgpLCAmcm9vdE5vZGUsIDAsICZwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5z
dGFydENvbnRhaW5lcigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFy
dE9mZnNldCgpKS5wdHIoKSk7Ci0gICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRl
KHJhbmdlV2l0aEFsdGVybmF0aXZlLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CiAgICAgLy8gUmVj
YWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLCBzaW5jZSBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00sIHN1Y2ggdGhhdCB0aGUgb3JpZ2lu
YWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQu
IFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKLSAgICBhdXRvIHVwZGF0ZWRQYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2Nh
dGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXgsIGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoICsgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOworICAgIGF1dG8g
dXBkYXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBUZXh0SXRlcmF0b3I6
OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHRyZWVTY29wZVJvb3QucHRyKCksIHBhcmFncmFw
aE9mZnNldEluVHJlZVNjb3BlLCBjb3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3JhcGggKyBhbHRlcm5h
dGl2ZS5sZW5ndGgoKSk7CiAgICAgaWYgKCF1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuOwotCiAgICAgc2V0RW5kKHVwZGF0ZWRQYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9
IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKnVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUu
bGVuZ3RoKCkpOwotICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFu
Z2UuZ2V0KCkpOworICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoKnVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLCBjb3JyZWN0
aW9uT2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKIAogICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0g
YWx0ZXJuYXRpdmUpCisgICAgaWYgKHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKSAh
PSBhbHRlcm5hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKTsKLQorICAgIGF1dG8mIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdl
LT5vd25lckRvY3VtZW50KCkubWFya2VycygpOwogICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDog
bWFya2VyVHlwZXNUb0FkZCkKLSAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIoKnJlcGxhY2VtZW50
UmFuZ2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZl
VGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKKyAgICAgICAgbWFya2Vycy5hZGRN
YXJrZXIocmVwbGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JB
cHBsaWVkQWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
aW5kZXggZmUwN2Y1NjE2MDk3MWIzMGNiODNlMTBiMzJjMjVkNzA2ZDAxYmMwYi4uMDlhMzc0OWVh
MmI3YzNlNDZmOWU5NmIzNDBjYmU5NGYxM2I5NDkxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTIyMywxOSArMjIzLDE0IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmRvQXBwbHkoKQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKIHsKLSAgICAvLyB1cGRhdGUgZG9jdW1l
bnQgbGF5b3V0IG9uY2UgYmVmb3JlIHJlbW92aW5nIHN0eWxlcwotICAgIC8vIHNvIHRoYXQgd2Ug
YXZvaWQgdGhlIGV4cGVuc2Ugb2YgdXBkYXRpbmcgYmVmb3JlIGVhY2ggYW5kIGV2ZXJ5IGNhbGwK
LSAgICAvLyB0byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlCisgICAgLy8gVXBkYXRlIGRvY3VtZW50
IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMgc28gdGhhdCB3ZSBhdm9pZCB0aGUg
ZXhwZW5zZSBvZgorICAgIC8vIHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBldmVyeSBjYWxsIHRv
IGNoZWNrIGEgY29tcHV0ZWQgc3R5bGUuCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIC8vIGdldCBwb3NpdGlvbnMgd2Ugd2FudCB0
byB1c2UgZm9yIGFwcGx5aW5nIHN0eWxlCiAgICAgUG9zaXRpb24gc3RhcnQgPSBzdGFydFBvc2l0
aW9uKCk7CiAgICAgUG9zaXRpb24gZW5kID0gZW5kUG9zaXRpb24oKTsKLSAgICBpZiAoY29tcGFy
ZVBvc2l0aW9ucyhlbmQsIHN0YXJ0KSA8IDApIHsKLSAgICAgICAgUG9zaXRpb24gc3dhcCA9IHN0
YXJ0OwotICAgICAgICBzdGFydCA9IGVuZDsKLSAgICAgICAgZW5kID0gc3dhcDsKLSAgICB9Cisg
ICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBzdGFydCkgPCAwKQorICAgICAgICBzdGQ6OnN3
YXAoc3RhcnQsIGVuZCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHN0YXJ0
KTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChlbmQpOwpAQCAtMjQ2LDE0ICsyNDEs
MTggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHls
ZSYgc3R5bGUpCiAgICAgLy8gU2F2ZSBhbmQgcmVzdG9yZSB0aGUgc2VsZWN0aW9uIGVuZHBvaW50
cyB1c2luZyB0aGVpciBpbmRpY2VzIGluIHRoZSBlZGl0YWJsZSByb290LCBzaW5jZQogICAgIC8v
IGFkZEJsb2NrU3R5bGVJZk5lZWRlZCBtYXkgbW92ZVBhcmFncmFwaHMsIHdoaWNoIGNhbiByZW1v
dmUgdGhlc2UgZW5kcG9pbnRzLgogICAgIC8vIENhbGN1bGF0ZSBzdGFydCBhbmQgZW5kIGluZGlj
ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHRyZWUgdGhhdCB0aGV5J3JlIGluLgotICAgIGF1dG8q
IHNjb3BlID0gaGlnaGVzdEVkaXRhYmxlUm9vdCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQo
KSk7CisgICAgYXV0byBzY29wZSA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdCh2aXNp
YmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpOwogICAgIGlmICghc2NvcGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gc3RhcnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwg
Zmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBhdXRvIGVuZFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlKSwgdmlzaWJsZUVu
ZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpbnQg
c3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5wdHIoKSwg
dHJ1ZSk7Ci0gICAgaW50IGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRS
YW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgQm91bmRhcnlQb2ludCBzY29wZVN0YXJ0IHsgKnNjb3Bl
LCAwIH07CisgICAgYXV0byBzdGFydEJvdW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludCh2
aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7
CisgICAgYXV0byBlbmRCb3VuZGFyeVBvaW50ID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZUVu
ZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAo
IXN0YXJ0Qm91bmRhcnlQb2ludCB8fCAhZW5kQm91bmRhcnlQb2ludCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyBzY29wZVN0YXJ0LCAq
c3RhcnRCb3VuZGFyeVBvaW50IH0sIHRydWUpOworICAgIGF1dG8gZW5kSW5kZXggPSBjaGFyYWN0
ZXJDb3VudCh7IHNjb3BlU3RhcnQsICplbmRCb3VuZGFyeVBvaW50IH0sIHRydWUpOwogCiAgICAg
VmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0KHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVN0
YXJ0KSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhTdGFydChlbmRPZlBhcmFn
cmFwaChwYXJhZ3JhcGhTdGFydCkubmV4dCgpKTsKQEAgLTI4NSw4ICsyODQsOCBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKICAg
ICB9CiAgICAgCiAgICAgewotICAgICAgICBhdXRvIHN0YXJ0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6
OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBzdGFydEluZGV4LCAwLCB0cnVlKTsK
LSAgICAgICAgYXV0byBlbmRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25B
bmRMZW5ndGgoc2NvcGUsIGVuZEluZGV4LCAwLCB0cnVlKTsKKyAgICAgICAgYXV0byBzdGFydFJh
bmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZS5nZXQo
KSwgc3RhcnRJbmRleCwgMCwgdHJ1ZSk7CisgICAgICAgIGF1dG8gZW5kUmFuZ2UgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLmdldCgpLCBlbmRJbmRleCwg
MCwgdHJ1ZSk7CiAgICAgICAgIGlmIChzdGFydFJhbmdlICYmIGVuZFJhbmdlKQogICAgICAgICAg
ICAgdXBkYXRlU3RhcnRFbmQoc3RhcnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBlbmRSYW5nZS0+
c3RhcnRQb3NpdGlvbigpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDdkZGIwYWIyNTIxOTQ5MzIwNTU4ZWQ0MTE4NGI1
MTBjYTk2MGVlNTYuLjBlZjM5Mjc5ZTQ3MjA4NjUwOGJmZjU3YTJiYmIzNjMxMGQ5ZTg2OTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBA
IC0xNDE3LDcgKzE0MTcsNiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIAogICAgIGlu
dCBzdGFydEluZGV4ID0gLTE7CiAgICAgaW50IGVuZEluZGV4ID0gLTE7Ci0gICAgaW50IGRlc3Rp
bmF0aW9uSW5kZXggPSAtMTsKICAgICBib29sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCA9IGVuZGlu
Z1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKTsKICAgICBpZiAocHJlc2VydmVTZWxlY3Rpb24g
JiYgIWVuZGluZ1NlbGVjdGlvbigpLmlzTm9uZSgpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlU3RhcnQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTE0
MzIsMTggKzE0MzEsMjIgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgICAgICBpZiAoc3RhcnRJblBhcmFn
cmFwaCkgewotICAgICAgICAgICAgICAgIGF1dG8gc3RhcnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQ
YXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KSk7CisgICAgICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IG1ha2VCb3VuZGFyeVBv
aW50KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpKTsKKyAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uU3Rh
cnQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpw
YXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0IH0sIHRydWUpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBlbmRJbmRleCA9IDA7CiAgICAgICAgICAgICBpZiAoZW5kSW5QYXJhZ3Jh
cGgpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGVuZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCgpLCBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCksIHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAgICAgZW5kSW5kZXggPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKGVuZFJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaFRv
TW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVF
bmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVjdGlvbkVuZCkKKyAgICAgICAgICAg
ICAgICAgICAgZW5kSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNl
bGVjdGlvbkVuZCB9LCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAg
ICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVQYXJhZ3JhcGggPSBzdGFydE9mUGFyYWdy
YXBoVG9Nb3ZlLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICBWaXNp
YmxlUG9zaXRpb24gYWZ0ZXJQYXJhZ3JhcGgoZW5kT2ZQYXJhZ3JhcGhUb01vdmUubmV4dChDYW5u
b3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkpOwogCkBAIC0xNDc4LDkgKzE0ODEsOSBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICAvLyBUaGUgbW92ZWQgcGFyYWdyYXBoIHNob3VsZCBh
c3N1bWUgdGhlIGJsb2NrIHN0eWxlIG9mIHRoZSBkZXN0aW5hdGlvbi4KICAgICAgICAgc3R5bGVJ
bkVtcHR5UGFyYWdyYXBoLT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKICAgICB9Ci0gICAgCisK
ICAgICAvLyBGSVhNRSAoNTA5ODkzMSk6IFdlIHNob3VsZCBhZGQgYSBuZXcgaW5zZXJ0IGFjdGlv
biAiV2ViVmlld0luc2VydEFjdGlvbk1vdmVkIiBhbmQgY2FsbCBzaG91bGRJbnNlcnRGcmFnbWVu
dCBoZXJlLgotICAgIAorCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
c3RhcnQsIGVuZCwgRE9XTlNUUkVBTSkpOwogICAgIGZyYW1lKCkuZWRpdG9yKCkuY2xlYXJNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAgICBkZWxldGVTZWxl
Y3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwpAQCAtMTUwOSw4ICsxNTEyLDcgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICBpZiAoIWVkaXRhYmxlUm9vdCkKICAgICAgICAg
ZWRpdGFibGVSb290ID0gJmRvY3VtZW50KCk7CiAKLSAgICBhdXRvIHN0YXJ0VG9EZXN0aW5hdGlv
blJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKGVk
aXRhYmxlUm9vdC5nZXQoKSksIGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGRlc3RpbmF0aW9uSW5kZXggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHN0YXJ0VG9EZXN0aW5hdGlvblJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uSW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKmVkaXRhYmxlUm9vdCwg
MCB9LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSkgfSwgdHJ1ZSk7CiAKICAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihkZXN0aW5hdGlvbiwgb3JpZ2luYWxJc0RpcmVjdGlvbmFsKSk7
CiAgICAgQVNTRVJUKGVuZGluZ1NlbGVjdGlvbigpLmlzQ2FyZXRPclJhbmdlKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggOGQ2YmRmNDc4YWJmN2E4OWVlMDZkMWYwYzVjNzI5
YzBlYTVhNzQwZC4uNzU4MmE4OWQzYmMyYmY0N2UyZDQzNDhjYTYyZGY4OGUwZDg5OTUwNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0xMDgzLDE1ICsxMDgzLDIzIEBAIGludCBp
bmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Np
dGlvbiwgUmVmUHRyPENvbnRhCiAgICAgICAgICAgICBzY29wZSA9ICZkb2N1bWVudDsKICAgICB9
CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgZmlyc3RQb3NpdGlv
bkluTm9kZShzY29wZS5nZXQoKSksIHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSwgdHJ1
ZSk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZpcnN0UG9zaXRpb25Jbk5v
ZGUoc2NvcGUuZ2V0KCkpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0
aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0
LCAqZW5kIH0sIHRydWUpOwogfQogCiAvLyBGSVhNRTogTWVyZ2UgdGhpcyBmdW5jdGlvbiB3aXRo
IHRoZSBvbmUgYWJvdmUuCiBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oTm9kZSYgbm9kZSwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGJvb2wgZm9yU2VsZWN0aW9u
UHJlc2VydmF0aW9uKQogewotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUuZG9j
dW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZSgmbm9kZSksIHZpc2libGVQb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICByZXR1cm4gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0
aW9uKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbklu
Tm9kZSgmbm9kZSkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAg
IGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY2hh
cmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uKTsK
IH0KIAogVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNl
dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgb2Zmc2V0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IDhjMjM0YTRkOTE5
NDA4ZGRhYTdkNzE1MTA4Yjg0YzFmYzMwMmY2ZmEuLmFkODI3ODg5Y2FiNTg1ZDMwMTU5NmE2M2Fi
ZGVjNmZmNGI3NWUzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHAKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFw
aDo6aW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCkKIAogaW50IFRleHRDaGVja2luZ1Bh
cmFncmFwaDo6cmFuZ2VMZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKCZwYXJhZ3JhcGhSYW5nZSgpKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291
bnQocGFyYWdyYXBoUmFuZ2UoKSk7CiB9CiAKIFJhbmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6
OnBhcmFncmFwaFJhbmdlKCkgY29uc3QKQEAgLTE2NSwxNCArMTY1LDExIEBAIFJlZjxSYW5nZT4g
VGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5nZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQg
Y2hhcmFjdGVyQ291CiAKIEV4Y2VwdGlvbk9yPGludD4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpv
ZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFwb3Np
dGlvbi5jb250YWluZXJOb2RlKCkpCisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50
KHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VC
b3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKLQotICAgIGF1dG8gcmFuZ2UgPSBvZmZz
ZXRBc1JhbmdlKCkuY2xvbmVSYW5nZSgpOwotICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UtPnNldEVu
ZCgqcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAq
c3RhcnQsICplbmQgfSk7CiB9CiAKIGJvb2wgVGV4dENoZWNraW5nUGFyYWdyYXBoOjppc0VtcHR5
KCkgY29uc3QKQEAgLTIwMCwyMSArMTk3LDIxIEBAIGNvbnN0IFN0cmluZyYgVGV4dENoZWNraW5n
UGFyYWdyYXBoOjp0ZXh0KCkgY29uc3QKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNr
aW5nU3RhcnQoKSBjb25zdAogewogICAgIGlmICghbV9jaGVja2luZ1N0YXJ0KQotICAgICAgICBt
X2NoZWNraW5nU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKCZvZmZzZXRBc1Jhbmdl
KCkpOworICAgICAgICBtX2NoZWNraW5nU3RhcnQgPSBjaGFyYWN0ZXJDb3VudChvZmZzZXRBc1Jh
bmdlKCkpOwogICAgIHJldHVybiAqbV9jaGVja2luZ1N0YXJ0OwogfQogCiBpbnQgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjpjaGVja2luZ0VuZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NoZWNraW5n
RW5kKQotICAgICAgICBtX2NoZWNraW5nRW5kID0gY2hlY2tpbmdTdGFydCgpICsgVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChtX2NoZWNraW5nUmFuZ2UucHRyKCkpOworICAgICAgICBtX2NoZWNr
aW5nRW5kID0gY2hlY2tpbmdTdGFydCgpICsgY2hlY2tpbmdMZW5ndGgoKTsKICAgICByZXR1cm4g
Km1fY2hlY2tpbmdFbmQ7CiB9CiAKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5n
TGVuZ3RoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fY2hlY2tpbmdMZW5ndGgpCi0gICAgICAgIG1f
Y2hlY2tpbmdMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fY2hlY2tpbmdSYW5n
ZS5wdHIoKSk7CisgICAgICAgIG1fY2hlY2tpbmdMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2No
ZWNraW5nUmFuZ2UpOwogICAgIHJldHVybiAqbV9jaGVja2luZ0xlbmd0aDsKIH0KIApAQCAtMjIz
LDggKzIyMCwxMiBAQCBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNl
bWVudFN0YXJ0KCkgY29uc3QKICAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KQog
ICAgICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKIAotICAgIGF1dG8g
c3RhcnRPZmZzZXRSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBt
X2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgbV9hdXRv
bWF0aWNSZXBsYWNlbWVudFN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydE9m
ZnNldFJhbmdlLnB0cigpKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocGFy
YWdyYXBoUmFuZ2UoKS5zdGFydFBvc2l0aW9uKCkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5k
YXJ5UG9pbnQobV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwor
ICAgIGlmICghc3RhcnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2F1dG9t
YXRpY1JlcGxhY2VtZW50U3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsK
ICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKIH0KIApAQCAtMjMzLDgg
KzIzNCw3IEBAIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50
TGVuZ3RoKCkgY29uc3QKICAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCkKICAg
ICAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwogCi0gICAgYXV0byBl
bmRPZmZzZXRSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1
dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgIG1fYXV0b21hdGlj
UmVwbGFjZW1lbnRMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldFJh
bmdlLnB0cigpKSAtIGF1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQoKTsKKyAgICBtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobV9hdXRvbWF0aWNSZXBsYWNlbWVu
dFJhbmdlKTsKICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7CiB9CiAK
QEAgLTMyMywyNSArMzIzLDIzIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgLy8gc2lu
Y2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KICAgICBSZWY8
UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gbV9yYW5nZS0+Y2xvbmVSYW5nZSgpOwogICAgIHNldFN0
YXJ0KHBhcmFncmFwaFJhbmdlLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSkpOwotICAgIGludCB0b3RhbFJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChwYXJhZ3JhcGhSYW5nZS5wdHIoKSk7CisgICAgYXV0byB0b3RhbFJhbmdlTGVu
Z3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwogICAgIHNldEVuZChwYXJhZ3Jh
cGhSYW5nZS5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7
CiAgICAgCi0gICAgUmVmPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGludCByYW5n
ZVN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLnB0
cigpKTsKLSAgICBpbnQgdG90YWxMZW5ndGhQcm9jZXNzZWQgPSAwOworICAgIGF1dG8gcmFuZ2VT
dGFydE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFw
aFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKSB9KTsKKyAgICBDaGFyYWN0ZXJDb3VudCB0b3RhbExlbmd0aFByb2Nlc3Nl
ZCA9IDA7CiAgICAgCiAgICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CiAgICAgYm9vbCBs
YXN0SXRlcmF0aW9uID0gZmFsc2U7CiAgICAgd2hpbGUgKHRvdGFsTGVuZ3RoUHJvY2Vzc2VkIDwg
dG90YWxSYW5nZUxlbmd0aCkgewogICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNlYXJj
aCByYW5nZSBieSBwYXJhZ3JhcGhzLCBjaGVja2luZyBlYWNoIG9uZSBmb3Igc3BlbGxpbmcgYW5k
IGdyYW1tYXIuCi0gICAgICAgIGludCBjdXJyZW50TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChwYXJhZ3JhcGhSYW5nZS5wdHIoKSk7CisgICAgICAgIGF1dG8gY3VycmVudExlbmd0
aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKICAgICAgICAgaW50IGN1cnJlbnRT
dGFydE9mZnNldCA9IGZpcnN0SXRlcmF0aW9uID8gcmFuZ2VTdGFydE9mZnNldCA6IDA7CiAgICAg
ICAgIGludCBjdXJyZW50RW5kT2Zmc2V0ID0gY3VycmVudExlbmd0aDsKICAgICAgICAgaWYgKGlu
U2FtZVBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5l
bmRQb3NpdGlvbigpKSkgewogICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIg
b2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBl
bmQgb2YgdGhlIHBhcmFncmFwaCwKICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0
byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgICAgICAgICBhdXRvIGVuZE9mZnNl
dEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgoZW5kT2Zmc2V0QXNSYW5nZS5wdHIoKSk7CisgICAgICAgICAgICBjdXJy
ZW50RW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdy
YXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5l
bmRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5kT2Zmc2V0
KSB7CkBAIC0zOTksMTAgKzM5Nyw4IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRG
aXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAKICAgICAg
ICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1h
ciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdy
YW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWxsaW5n
T2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9u
KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3Jh
cGhPZmZzZXRBc1JhbmdlLnB0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAg
c3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9y
YW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdl
LT5zdGFydFBvc2l0aW9uKCkpIH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5n
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxs
aW5nT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxs
ZWRXb3JkOwpAQCAtNDEwLDEwICs0MDYsOCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpm
aW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmICFiYWRH
cmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgZ3JhbW1h
clBocmFzZU9mZnNldCA9IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0
ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBtX3JhbmdlLT5z
dGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCisgICAgICAg
ICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsg
Km1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRh
cnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAg
ICAgICAgICAgb3V0SXNTcGVsbGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBvdXRG
aXJzdEZvdW5kT2Zmc2V0ID0gZ3JhbW1hclBocmFzZU9mZnNldDsKICAgICAgICAgICAgICAgICAg
ICAgZmlyc3RGb3VuZEl0ZW0gPSBiYWRHcmFtbWFyUGhyYXNlOwpAQCAtNTU2LDcgKzU1MCw3IEBA
IGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gQmFkIGdyYW1tYXIgYXQgc3RhcnQgb2YgcmFu
Z2UsIGJ1dCBlbmQgb2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVuZCBvZiByYW5n
ZQotICAgIGlmIChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1fcmFuZ2UucHRyKCkpKQorICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3JhbW1h
ckRldGFpbC5sZW5ndGgpICE9IGNoYXJhY3RlckNvdW50KG1fcmFuZ2UpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBk
aXNwbGF5aW5nIHRoaXMgZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBp
cyBvbiBzY3JlZW4pLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4
IGU4NDQxMmIyNzY4MzU2NmYzMDNhNmQxYjkyZTY3ZjMyMTJkOGQyZmQuLmU4NmViZjE5MTkwMmVi
NTMxYjg3NDVjZDc1ZjllNzhmNTQ0OTlmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHAKQEAgLTIzNDMsMTIgKzIzNDMsMTAgQEAgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6
bGVuZ3RoKCkgY29uc3QKIAogLy8gLS0tLS0tLS0KIAotaW50IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoY29uc3QgUmFuZ2UqIHJhbmdlLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikK
K0NoYXJhY3RlckNvdW50IGNoYXJhY3RlckNvdW50KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
Ym9vbCBzcGFjZXNGb3JSZXBsYWNlZEVsZW1lbnRzKQogewotICAgIGlmICghcmFuZ2UpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgZm9yIChUZXh0SXRl
cmF0b3IgaXQoKnJhbmdlLCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24gPyBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRl
ZmF1bHRCZWhhdmlvcik7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpCisgICAgQ2hhcmFjdGVy
Q291bnQgbGVuZ3RoID0gMDsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyYW5nZSwgc3BhY2Vz
Rm9yUmVwbGFjZWRFbGVtZW50cyA/IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5B
bGxWaXNpYmxlUG9zaXRpb25zIDogVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsgIWl0LmF0
RW5kKCk7IGl0LmFkdmFuY2UoKSkKICAgICAgICAgbGVuZ3RoICs9IGl0LnRleHQoKS5sZW5ndGgo
KTsKICAgICByZXR1cm4gbGVuZ3RoOwogfQpAQCAtMjQ1NiwyMSArMjQ1NCwxNiBAQCBib29sIFRl
eHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSogc2NvcGUsIGNv
bnN0IFJhbmdlKiByYW5nZQogCiAgICAgLy8gVGhlIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhh
dCB0aGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCByYW5nZXMgdGhhdAogICAgIC8vIGNvbmNlbnRy
YXRlIG9uIGEgZ2l2ZW4gYXJlYSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gcm9vdC4gVGhpcyBp
cyBkb25lCi0gICAgLy8gYmVjYXVzZSBvZiB0ZXh0IGZpZWxkcyBhbmQgdGV4dGFyZWFzLiBUaGUg
RE9NIGZvciB0aG9zZSBpcyBub3QKLSAgICAvLyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnQgRE9N
LCBzbyBlbnN1cmUgdGhhdCB0aGUgcmFuZ2UgZG9lcyBub3QgY3Jvc3MgYQotICAgIC8vIGJvdW5k
YXJ5IG9mIG9uZSBvZiB0aG9zZS4KKyAgICAvLyBiZWNhdXNlIG9mIHRleHQgZmllbGRzIGFuZCB0
ZXh0YXJlYXMuIFRoZSBET00gZm9yIHRob3NlIGlzIG5vdCBkaXJlY3RseQorICAgIC8vIGluIHRo
ZSBkb2N1bWVudCBET00sIHNvIGVuc3VyZSB0aGF0IHRoZSByYW5nZSBkb2VzIG5vdCBjcm9zcyBh
IGJvdW5kYXJ5CisgICAgLy8gb2Ygb25lIG9mIHRob3NlLgogICAgIGlmICgmcmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5zdGFydENvbnRhaW5lcigpLmlzRGVzY2Vu
ZGFudE9mKHNjb3BlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgmcmFuZ2UtPmVu
ZENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+ZW5kQ29udGFpbmVyKCkuaXNEZXNjZW5k
YW50T2Yoc2NvcGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWY8UmFuZ2U+IHRl
c3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCAmcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQo
JnRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgbG9jYXRpb24gPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSk7Ci0KLSAgICB0ZXN0UmFu
Z2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7Ci0g
ICAgQVNTRVJUKCZ0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxl
bmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKSAtIGxvY2F0
aW9uOworICAgIGxvY2F0aW9uID0gY2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJh
bmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSB9IH0pOworICAgIGxl
bmd0aCA9IGNoYXJhY3RlckNvdW50KHsgeyAqc2NvcGUsIDAgfSwgeyByYW5nZS0+ZW5kQ29udGFp
bmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSB9IH0pIC0gbG9jYXRpb247CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4IDE1N2YxZGEx
ZDBlNmM5NTNkOWRlZGM0ZWZhY2UxM2U5ODBlMzEzNGUuLjk2ZWNhZWU0OTNjZDczNGRiZTk4OWQ5
Y2VhY2Y1ZDk5ZjY5Zjg4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApA
QCAtMzYsNyArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSYW5nZTsKIGNsYXNz
IFJlbmRlclRleHRGcmFnbWVudDsKIAorLy8gRklYTUU6IERlbGV0ZSB0aGlzIG92ZXJsb2FkIGFm
dGVyIG1vdmluZyBhbGwgdGhlIGNhbGxlcnMgdG8gdGhlIFNpbXBsZVJhbmdlIHZlcnNpb24uCiBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFJhbmdlKiwgVGV4dEl0ZXJhdG9y
QmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3Ry
aW5nID0gZmFsc2UpOworCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFNp
bXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVo
YXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwogV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShjb25zdCBTaW1wbGVSYW5nZSYsIFRl
eHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlz
RGlzcGxheVN0cmluZyA9IGZhbHNlKTsKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHRV
c2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvckZvclRlc3RpbmcoY29uc3QgU2ltcGxlUmFuZ2UmKTsK
QEAgLTEwMCw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVGV4dEl0ZXJhdG9yQ29weWFi
bGVUZXh0JiBjb3B5YWJsZVRleHQoKSBjb25zdCB7IEFTU0VSVCghYXRFbmQoKSk7IHJldHVybiBt
X2NvcHlhYmxlVGV4dDsgfQogICAgIHZvaWQgYXBwZW5kVGV4dFRvU3RyaW5nQnVpbGRlcihTdHJp
bmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdCB7IGNvcHlhYmxlVGV4dCgpLmFwcGVuZFRvU3RyaW5n
QnVpbGRlcihidWlsZGVyKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGludCByYW5n
ZUxlbmd0aChjb25zdCBSYW5nZSosIGJvb2wgc3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cyA9IGZh
bHNlKTsKKyAgICAvLyBGSVhNRTogTW92ZSB0aGVzZSB0byBTaW1wbGVSYW5nZSwgQ2hhcmFjdGVy
UmFuZ2UsIGFuZCBDaGFyYWN0ZXJDb3VudCBhbmQgbW92ZSBvdXQgb2YgdGhpcyBjbGFzcyB0byB0
aGUgdG9wIGxldmVsIChib3R0b20gb2YgdGhpcyBmaWxlKS4KICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChDb250YWluZXJO
b2RlKiBzY29wZSwgaW50IHJhbmdlTG9jYXRpb24sIGludCByYW5nZUxlbmd0aCwgYm9vbCBzcGFj
ZXNGb3JSZXBsYWNlZEVsZW1lbnRzID0gZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBib29sIGdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNjb3BlLCBjb25zdCBS
YW5nZSosIHNpemVfdCYgbG9jYXRpb24sIHNpemVfdCYgbGVuZ3RoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPFJhbmdlPiBzdWJyYW5nZShSYW5nZSYgZW50aXJlUmFuZ2UsIGludCBj
aGFyYWN0ZXJPZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCk7CkBAIC0yODcsNCArMjg5LDEzIEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZExvb2tBaGVhZCB7IHRydWUgfTsKIH07CiAKK3VzaW5n
IENoYXJhY3RlckNvdW50ID0gc2l6ZV90OworCitzdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2UgeworICAg
IENoYXJhY3RlckNvdW50IGxvY2F0aW9uIHsgMCB9OworICAgIENoYXJhY3RlckNvdW50IGxlbmd0
aCB7IDAgfTsKK307CisKK1dFQkNPUkVfRVhQT1JUIENoYXJhY3RlckNvdW50IGNoYXJhY3RlckNv
dW50KGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCBzcGFjZXNGb3JSZXBsYWNlZEVsZW1lbnRzID0g
ZmFsc2UpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggNmI5MGZmZGJlNTRhZWNlODYzMzUxMzEyYTI1YjEy
YWU4ZDJjZTFhMC4uOTczMDJjZjUyYTQzOWUwN2FkZjBjOGVjOWI4YTFkY2ViYWNjMTFmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29weXJp
Z2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtODE5LDYgKzgxOSwxMSBAQCBib29sIFZpc2libGVQb3Np
dGlvbjo6ZXF1YWxzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3RoZXIpIGNvbnN0CiAgICAgcmV0
dXJuIG1fYWZmaW5pdHkgPT0gb3RoZXIubV9hZmZpbml0eSAmJiBtX2RlZXBQb3NpdGlvbi5lcXVh
bHMob3RoZXIubV9kZWVwUG9zaXRpb24pOwogfQogCitPcHRpb25hbDxCb3VuZGFyeVBvaW50PiBt
YWtlQm91bmRhcnlQb2ludChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAg
IHJldHVybiBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKK30K
KwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIEVBZmZpbml0eSBh
ZmZpbml0eSkKIHsKICAgICBzd2l0Y2ggKGFmZmluaXR5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCA0ODU2NjgyNGVkNzNmZGFjZDI1NzA4ZGUzMTkzMTRl
NjE5MmMwMmYwLi5mODRiY2RmZDcyZjViYzQ1NzYzM2RhNDgzMjcyMWU1Mjc3YTI0ODUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDYg
QEAKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgog
Ci1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgUmFuZ2U7CkBAIC00OSw5ICs0NSw2IEBAIGNsYXNzIFJhbmdlOwogLy8g
cG9zaXRpb24gaXMgbm90IGF0IGEgbGluZSBicmVhay4KICNkZWZpbmUgVlBfVVBTVFJFQU1fSUZf
UE9TU0lCTEUgVVBTVFJFQU0KIAotY2xhc3MgSW5saW5lQm94OwotY2xhc3MgTm9kZTsKLQogY2xh
c3MgVmlzaWJsZVBvc2l0aW9uIHsKIHB1YmxpYzoKICAgICAvLyBOT1RFOiBVUFNUUkVBTSBhZmZp
bml0eSB3aWxsIGJlIHVzZWQgb25seSBpZiBwb3MgaXMgYXQgZW5kIG9mIGEgd3JhcHBlZCBsaW5l
LApAQCAtODUsMjEgKzc4LDE2IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMg
bm90IGhhbmRsZSBbdGFibGUsIDBdIGNvcnJlY3RseS4KICAgICBFbGVtZW50KiByb290RWRpdGFi
bGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkgPyBt
X2RlZXBQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAw
OyB9Ci0gICAgCi0gICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94KiYgaW5s
aW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAotICAgIHsKLSAgICAgICAgbV9kZWVwUG9z
aXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIGlubGluZUJveCwgY2FyZXRP
ZmZzZXQpOwotICAgIH0KIAotICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFRleHREaXJl
Y3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQmIGNhcmV0
T2Zmc2V0KSBjb25zdAotICAgIHsKLSAgICAgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94
QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRP
ZmZzZXQpOwotICAgIH0KKyAgICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChJbmxpbmVCb3gq
JiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZz
ZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiwgaW50JiBjYXJl
dE9mZnNldCkgY29uc3Q7CiAKICAgICAvLyBSZWN0IGlzIGxvY2FsIHRvIHRoZSByZXR1cm5lZCBy
ZW5kZXJlcgogICAgIFdFQkNPUkVfRVhQT1JUIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoUmVu
ZGVyT2JqZWN0KiYpIGNvbnN0OworCiAgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zv
cm1lZCkgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRzCiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVj
dCBhYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3Q7
CisKICAgICAvLyBBYnMgeC95IHBvc2l0aW9uIG9mIHRoZSBjYXJldCBpZ25vcmluZyB0cmFuc2Zv
cm1zLgogICAgIC8vIEZJWE1FOiBuYXZpZ2F0aW9uIHdpdGggdHJhbnNmb3JtcyBzaG91bGQgYmUg
c21hcnRlci4KICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgbGluZURpcmVjdGlvblBvaW50Rm9yQmxv
Y2tEaXJlY3Rpb25OYXZpZ2F0aW9uKCkgY29uc3Q7CkBAIC0xMDcsNyArOTUsNyBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGFic29sdXRlU2VsZWN0aW9uQm91bmRzRm9y
TGluZSgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBpcyBhIHRlbnRhdGl2ZSBlbmhhbmNlbWVudCBv
ZiBvcGVyYXRvcj09IHRvIGFjY291bnQgZm9yIGFmZmluaXR5LgotICAgIC8vIEZJWE1FOiBDb21i
aW5lIHRoaXMgZnVuY3Rpb24gd2l0aCBvcGVyYXRvcj09CisgICAgLy8gRklYTUU6IENvbWJpbmUg
dGhpcyBmdW5jdGlvbiB3aXRoIG9wZXJhdG9yPT0uCiAgICAgYm9vbCBlcXVhbHMoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJikgY29uc3Q7CiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCkBAIC0x
MTUsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9ybWF0Rm9yRGVidWdnZXIoY2hhciog
YnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogICAgIHZvaWQgc2hvd1RyZWVGb3JUaGlz
KCkgY29uc3Q7CiAjZW5kaWYKLSAgICAKKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXQoY29uc3Qg
UG9zaXRpb24mLCBFQWZmaW5pdHkpOwogICAgIFBvc2l0aW9uIGNhbm9uaWNhbFBvc2l0aW9uKGNv
bnN0IFBvc2l0aW9uJik7CkBAIC0xMjcsMjMgKzExNSw1MCBAQCBwcml2YXRlOgogICAgIEVBZmZp
bml0eSBtX2FmZmluaXR5OwogfTsKIAorYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZp
c2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBvcGVyYXRvcjwo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIG9w
ZXJhdG9yPihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
K2Jvb2wgb3BlcmF0b3I8PShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKK2Jvb2wgb3BlcmF0b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mKTsKKworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2lu
dD4gbWFrZUJvdW5kYXJ5UG9pbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisKK1dFQkNPUkVf
RVhQT1JUIFJlZlB0cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBzZXRTdGFydChSYW5nZSosIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpOworYm9vbCBzZXRFbmQoUmFuZ2UqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKK1Zpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVB
ZmZpbml0eSk7CitWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdl
KiwgRUFmZmluaXR5KTsKKworV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKworYm9vbCBpc0ZpcnN0VmlzaWJs
ZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKK2Jv
b2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IE5vZGUqKTsKKworYm9vbCBhcmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKK1dFQkNP
UkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKworLy8gaW5saW5lcworCiAvLyBGSVhNRTogVGhpcyBz
aG91bGRuJ3QgaWdub3JlIGFmZmluaXR5LgogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1
cm4gYS5kZWVwRXF1aXZhbGVudCgpID09IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0KLSAKKwogaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQotICAgIAorCiBpbmxp
bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA8IGIuZGVlcEVx
dWl2YWxlbnQoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKSAKK2lubGluZSBib29sIG9wZXJhdG9y
Pihjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsK
ICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgpID4gYi5kZWVwRXF1aXZhbGVudCgpOwogfQpA
QCAtMTUzLDI2ICsxNjgsMjAgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBWaXNpYmxl
UG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKICAgICByZXR1cm4gYS5kZWVw
RXF1aXZhbGVudCgpIDw9IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0KIAotaW5saW5lIGJvb2wgb3Bl
cmF0b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
YikgCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkg
Pj0gYi5kZWVwRXF1aXZhbGVudCgpOwotfSAgICAKLQotV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJh
bmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJik7Ci1ib29sIHNldFN0YXJ0KFJhbmdlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1i
b29sIHNldEVuZChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKLVZpc2li
bGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UqLCBFQWZmaW5pdHkpOwot
Ci1XRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOwotCi1ib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOwotYm9vbCBpc0xhc3RWaXNpYmxl
UG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOworfQog
Ci1ib29sIGFyZVZpc2libGVQb3NpdGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitpbmxpbmUgdm9pZCBWaXNpYmxlUG9z
aXRpb246OmdldElubGluZUJveEFuZE9mZnNldChJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYg
Y2FyZXRPZmZzZXQpIGNvbnN0Cit7CisgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KG1fYWZmaW5pdHksIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOworfQogCi1XVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKLVdFQkNP
UkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2lubGluZSB2b2lkIFZpc2libGVQb3NpdGlvbjo6Z2V0
SW5saW5lQm94QW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5l
Qm94KiYgaW5saW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAoreworICAgIG1fZGVlcFBv
c2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9u
LCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggOTEwOWFiOTU0OTA2
OWYzNjA0ZjA5ODZhYzk4ZThiOTk0NDlhMTRhZS4uYWZmMzZkNDgxODg3MjZmMjhiMGJjMzc5OTkx
OWFlN2MwZWYyZTcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApA
QCAtMTkwMSwyMCArMTkwMSwxMyBAQCBSZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZH
cmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUZXh0R3JhbgogICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKHByZXZCb3VuZGFyeS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCktPmRvY3VtZW50KCksIHByZXZCb3VuZGFyeSwgbmV4dEJvdW5kYXJ5KTsKIH0KIAotaW50
IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBjb25z
dCBWaXNpYmxlUG9zaXRpb24mIG90aGVyKQorcHRyZGlmZl90IGRpc3RhbmNlQmV0d2VlblBvc2l0
aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikK
IHsKLSAgICBpZiAodnAuaXNOdWxsKCkgfHwgb3RoZXIuaXNOdWxsKCkpCisgICAgaWYgKGEuaXNO
dWxsKCkgfHwgYi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIHRoaXNJ
c1N0YXJ0ID0gKHZwIDwgb3RoZXIpOwotCi0gICAgLy8gU3RhcnQgbXVzdCBjb21lIGZpcnN0IGlu
IHRoZSBSYW5nZSBjb25zdHJ1Y3Rvci4KLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSh2
cC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNJc1N0YXJ0ID8gdnAgOiBvdGhl
ciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNJc1N0YXJ0
ID8gb3RoZXIgOiB2cCkpOwotICAgIGludCBkaXN0YW5jZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgocmFuZ2UucHRyKCkpOwotCi0gICAgcmV0dXJuICh0aGlzSXNTdGFydCA/IC1kaXN0YW5j
ZSA6IGRpc3RhbmNlKTsKKyAgICByZXR1cm4gYSA8IGIKKyAgICAgICAgPyAtY2hhcmFjdGVyQ291
bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoYSksICptYWtlQm91bmRhcnlQb2ludChiKSB9KQorICAg
ICAgICA6IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGIpLCAqbWFrZUJvdW5k
YXJ5UG9pbnQoYSkgfSk7CiB9CiAKIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBv
bmVCZWZvcmUsIFVDaGFyMzImIHR3b0JlZm9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVV
bml0cy5oCmluZGV4IDY3MTdlYjExZGRkYmQ4NjhlNDQxNGMzOTgwMzM1MmEwMzE2YWZlM2UuLmNl
OGM1MGY1NzkzNjBlMDFjZmRjODUyZmVhNTgxZjllNDI1YTQ4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlVW5pdHMuaApAQCAtMTAyLDcgKzEwMiw3IEBAIFdFQkNPUkVfRVhQT1JUIGJv
b2wgYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdy
YW51bGFyCiBXRUJDT1JFX0VYUE9SVCBib29sIHdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlv
bik7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25PZk5leHRCb3VuZGFy
eU9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBT
ZWxlY3Rpb25EaXJlY3Rpb24pOwogV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBlbmNsb3Np
bmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51
bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb24pOwotV0VCQ09SRV9FWFBPUlQgaW50IGRpc3RhbmNl
QmV0d2VlblBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKK1dFQkNPUkVfRVhQT1JUIHB0cmRpZmZfdCBkaXN0YW5jZUJldHdlZW5Qb3NpdGlv
bnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBjbG9zZXN0V29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbik7CiBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNoYXJhY3RlcnNBcm91bmRQb3NpdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24mLCBVQ2hhcjMyJiBvbmVBZnRlciwgVUNoYXIzMiYgb25lQmVmb3JlLCBVQ2hhcjMy
JiB0d29CZWZvcmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCmluZGV4IDEwM2U1NTNiMjM3YTkxOTdiYzM4ZDI0MjE2MDI0NmM2ZDIzMjI2MzUuLjJi
OTMxN2IxNzEzZjI2MGEyZGFmMzhjNWIxZmJhNGUwODRhYjdjYTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTcxLDE1ICs3MSwxOCBAQCB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRl
eHQ+IGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
biwgUmVmUHRyPFJhbmdlPiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91
bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQogewogICAgIFN0cmlu
ZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZS5nZXQoKSk7Ci0g
ICAgaW50IGhpdExvY2F0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uo
Y29udGV4dFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSk7CisgICAgYXV0
byBzdGFydCA9IGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIGlmIChzdGFydC5p
c051bGwoKSB8fCBwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBD
RkluZGV4IGhpdExvY2F0aW9uID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
c3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pIH0pOwogCi0gICAgUmV0YWluUHRy
PEREU2Nhbm5lclJlZj4gc2Nhbm5lciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5l
clR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOwotICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJl
Zj4gc2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgp
LCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOworICAgIGF1
dG8gc2Nhbm5lciA9IGFkb3B0Q0YoRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFy
ZCwgMCwgbnVsbHB0cikpOworICAgIGF1dG8gc2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVy
eUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmlu
Zy5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3Ry
aW5nLmxlbmd0aCgpKSkpOwogCiAgICAgaWYgKCFERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5n
ZXQoKSwgc2NhblF1ZXJ5LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBuaWw7CiAKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gcmVzdWx0cyA9IGFkb3B0
Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBERFNjYW5u
ZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXApKTsKKyAgICBhdXRvIHJlc3VsdHMgPSBhZG9w
dENGKEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlvbnMoc2Nhbm5lci5nZXQoKSwgRERTY2Fu
bmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwKSk7CiAKICAgICAvLyBGaW5kIHRoZSBERFJl
c3VsdFJlZiB0aGF0IGludGVyc2VjdHMgdGhlIGhpdFRlc3RSZXN1bHQncyBWaXNpYmxlUG9zaXRp
b24uCiAgICAgRERSZXN1bHRSZWYgbWFpblJlc3VsdCA9IG51bGxwdHI7CkBAIC0xMDAsNyArMTAz
LDcgQEAgc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0
aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbgogICAgIH0KIAogICAgIGlmICghbWFpblJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBS
ZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NE
REFjdGlvbkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsKICAgICBbYWN0aW9uQ29udGV4dCBzZXRB
bGxSZXN1bHRzOkBbIChfX2JyaWRnZSBpZCltYWluUmVzdWx0IF1dOwpAQCAtMTEyLDkgKzExNSw5
IEBAIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlv
bldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24KICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1h
aW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIHF1YWQgOiBxdWFkcykKICAgICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gudW5pdGUo
ZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSkp
OwotICAgIAorCiAgICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7Ci0gICAg
CisKICAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IDg3OTcyMjAyODQ2OGYwM2Uw
MmVhZTU5YjU1YTI5YTIzZGVjZTkyZWUuLmQ2NDhmZDcwZmMzOGZjOTJjMjRlNTE3ODkwNDdjZWY2
MjYzZmE1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlv
bmFyeUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25h
cnlMb29rdXAubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNjQsMTIgKzI2NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBz
dGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAorCiAgICAgaWYgKCFSZXZl
YWxMaWJyYXJ5KCkgfHwgIVJldmVhbENvcmVMaWJyYXJ5KCkgfHwgIWdldFJWSXRlbUNsYXNzKCkp
CiAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgIAotICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0
ZWRSYW5nZSkKKworICAgIGlmICghc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAg
ICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwogCiAgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBo
YXZlIHRoZSByYW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQg
b3B0aW9ucy4KQEAgLTI3OSwyMCArMjc4LDIyIEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwg
TlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAg
ICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFy
YWdyYXBocyBvZiB0ZXh0LgogICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdy
YXBoKHNlbGVjdGlvblN0YXJ0KTsKICAgICBhdXRvIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdy
YXBoKHNlbGVjdGlvbkVuZCk7CisgICAgaWYgKHBhcmFncmFwaFN0YXJ0LmlzTnVsbCgpIHx8IHBh
cmFncmFwaEVuZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisK
KyAgICBhdXRvIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rp
b25TdGFydCkgfSk7CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJhY3Rl
ckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFy
eVBvaW50KHNlbGVjdGlvbkVuZCkgfSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFr
ZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50KTsK
IAotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0g
ICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCht
YWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwotICAgIE5TUmFu
Z2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5n
dGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOwotICAgIAogICAgIFJl
ZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBwYXJhZ3JhcGhFbmQpOwogICAgIFN0cmluZyBpdGVtU3RyaW5nID0gcGxhaW5UZXh0KGZ1bGxD
aGFyYWN0ZXJSYW5nZS5nZXQoKSk7CiAgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0
TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3Rl
ZFJhbmdlOnJhbmdlVG9QYXNzXSk7CiAgICAgTlNSYW5nZSBoaWdobGlnaHRSYW5nZSA9IGl0ZW0u
Z2V0KCkuaGlnaGxpZ2h0UmFuZ2U7Ci0gICAgCisKICAgICByZXR1cm4geyBUZXh0SXRlcmF0b3I6
OnN1YnJhbmdlKCpmdWxsQ2hhcmFjdGVyUmFuZ2UsIGhpZ2hsaWdodFJhbmdlLmxvY2F0aW9uLCBo
aWdobGlnaHRSYW5nZS5sZW5ndGgpLCBuaWwgfTsKLSAgICAKKwogICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci0gICAgCisKICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIH0KIApA
QCAtMzIyLDQzICszMjMsNDAgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25h
cnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQKIAogICAgIGF1dG8g
c2VsZWN0aW9uID0gZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgTlNSYW5nZSBzZWxlY3Rpb25S
YW5nZTsKLSAgICBpbnQgaGl0SW5kZXg7CisgICAgTlNVSW50ZWdlciBoaXRJbmRleDsKICAgICBS
ZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZTsKICAgICAKICAgICBpZiAoc2VsZWN0aW9u
LnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbikgewog
ICAgICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwog
ICAgICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAg
ICAgIAorCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1
cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFy
dCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICBhdXRvIHBhcmFn
cmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CiAgICAgICAgIAotICAgICAg
ICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwg
c2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBhdXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtl
UmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci0gICAgICAgIAogICAgICAgICBm
dWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVu
ZCk7CiAgICAgICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICAgICAgcmV0dXJu
IHsgbnVsbHB0ciwgbmlsIH07CiAKLSAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5n
ZShUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlVG9TZWxlY3Rpb25TdGFydC5nZXQoKSks
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxl
Y3Rpb25FbmQpLmdldCgpKSk7Ci0gICAgICAgIAotICAgICAgICBoaXRJbmRleCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwb3NpdGlvbikuZ2V0
KCkpOworICAgICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50
KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50
KHNlbGVjdGlvblN0YXJ0KSB9KSwKKyAgICAgICAgICAgIGNoYXJhY3RlckNvdW50KHsgKm1ha2VC
b3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlv
bkVuZCkgfSkpOworICAgICAgICBoaXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3Vu
ZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9
KTsKICAgICB9IGVsc2UgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFjY291
bnRpbmdGb3JMaW5lUnVsZXMgeyBwb3NpdGlvbiB9OwogICAgICAgICBzZWxlY3Rpb25BY2NvdW50
aW5nRm9yTGluZVJ1bGVzLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsK
ICAgICAgICAgcG9zaXRpb24gPSBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzLnN0YXJ0
KCk7CisKICAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSAyNTAgY2hh
cmFjdGVycyBvZiB0ZXh0IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBvaW50LgogICAgICAgICBmdWxs
Q2hhcmFjdGVyUmFuZ2UgPSByYW5nZUV4cGFuZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMo
cG9zaXRpb24sIDI1MCk7Ci0gICAgICAgIAogICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5n
ZSkKICAgICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwotICAgICAgICAKKwogICAg
ICAgICBzZWxlY3Rpb25SYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgICAg
ICBoaXRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxDaGFy
YWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOworICAgICAgICBo
aXRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGZ1bGxDaGFyYWN0
ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9
KTsKICAgICB9Ci0gICAgCisKICAgICBOU1JhbmdlIHNlbGVjdGVkUmFuZ2UgPSBbZ2V0UlZTZWxl
Y3Rpb25DbGFzcygpIHJldmVhbFJhbmdlQXRJbmRleDpoaXRJbmRleCBzZWxlY3RlZFJhbmdlczpA
W1tOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOnNlbGVjdGlvblJhbmdlXV0gc2hvdWxkVXBkYXRlU2Vs
ZWN0aW9uOm5pbF07Ci0gICAgCisKICAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dCgq
ZnVsbENoYXJhY3RlclJhbmdlKTsKICAgICBSZXRhaW5QdHI8UlZJdGVtPiBpdGVtID0gYWRvcHRO
UyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVtU3RyaW5nIHNlbGVjdGVk
UmFuZ2U6c2VsZWN0ZWRSYW5nZV0pOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVt
LmdldCgpLmhpZ2hsaWdodFJhbmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAppbmRleCA5YzFhZTg4ODk1MWZiM2JiMjU2ZWQ3ZTA5
ZTI0MTc2YmM4ZDNjMzg5Li5hMmI4MTgyODc3YjI4YWYyOWM4YTA2Mzk1NGQzNzRjZDVhYTVhNWRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5k
SU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5k
SU9TLmNwcApAQCAtNDgsOSArNDgsNyBAQCBEaWN0YXRpb25Db21tYW5kSU9TOjpEaWN0YXRpb25D
b21tYW5kSU9TKERvY3VtZW50JiBkb2N1bWVudCwgVmVjdG9yPFZlY3RvcjxTdHJpbgogCiB2b2lk
IERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogewotICAgIFZpc2libGVQb3NpdGlvbiBp
bnNlcnRpb25Qb3NpdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKLQot
ICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IDA7CisgICAgQ2hhcmFjdGVyQ291bnQgcmVzdWx0
TGVuZ3RoID0gMDsKICAgICBmb3IgKGF1dG8mIGludGVycHJldGF0aW9ucyA6IG1fZGljdGF0aW9u
UGhyYXNlcykgewogICAgICAgICBjb25zdCBTdHJpbmcmIGZpcnN0SW50ZXJwcmV0YXRpb24gPSBp
bnRlcnByZXRhdGlvbnNbMF07CiAgICAgICAgIHJlc3VsdExlbmd0aCArPSBmaXJzdEludGVycHJl
dGF0aW9uLmxlbmd0aCgpOwpAQCAtNjIsMjAgKzYwLDIzIEBAIHZvaWQgRGljdGF0aW9uQ29tbWFu
ZElPUzo6ZG9BcHBseSgpCiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVFbmQoKSkpOwogICAgIH0KIAotICAgIFZpc2li
bGVQb3NpdGlvbiBhZnRlclJlc3VsdHMoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKTsK
KyAgICAvLyBGSVhNRTogQWRkIHRoZSByZXN1bHQgbWFya2VyIHVzaW5nIGEgUG9zaXRpb24gY2Fj
aGVkIGJlZm9yZSByZXN1bHRzIGFyZSBpbnNlcnRlZCwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGNo
YXJhY3RlciBjb3VudHMuCiAKLSAgICBFbGVtZW50KiByb290ID0gYWZ0ZXJSZXN1bHRzLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBhdXRvIGVuZFBvc2l0aW9uID0gZW5kaW5nU2VsZWN0aW9u
KCkudmlzaWJsZUVuZCgpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9z
aXRpb24pOworICAgIGF1dG8qIHJvb3QgPSBlbmRQb3NpdGlvbi5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgaWYgKCFlbmQgfHwgIXJvb3QpCisgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJ
WE1FOiBBZGQgdGhlIHJlc3VsdCBtYXJrZXIgdXNpbmcgYSBQb3NpdGlvbiBjYWNoZWQgYmVmb3Jl
IHJlc3VsdHMgYXJlIGluc2VydGVkLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gVGV4dEl0ZXJhdG9y
cy4KLSAgICBhdXRvIHJhbmdlVG9FbmQgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigoTm9kZSAqKXJvb3QsIDApLCBhZnRlclJlc3VsdHMuZGVl
cEVxdWl2YWxlbnQoKSk7Ci0gICAgaW50IGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChyYW5nZVRvRW5kLnB0cigpLCB0cnVlKTsKLSAgICBpbnQgc3RhcnRJbmRleCA9IGVuZElu
ZGV4IC0gcmVzdWx0TGVuZ3RoOworICAgIGF1dG8gZW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQo
eyB7ICpyb290LCAwIH0sIFdURk1vdmUoKmVuZCkgfSk7CisgICAgaWYgKGVuZE9mZnNldCA8IHJl
c3VsdExlbmd0aCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0YXJ0SW5kZXggPj0gMCkg
ewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUZyb21Mb2NhdGlvbkFuZExlbmd0aChkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLCBzdGFy
dEluZGV4LCBlbmRJbmRleCwgdHJ1ZSk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHRSYW5nZSk7IC8v
IEZJWE1FOiBXaGF0IGd1YXJhbnRlZXMgdGhpcz8KLSAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKCpyZXN1bHRSYW5nZSwgbV9tZXRhZGF0YSk7Ci0g
ICAgfQorICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0
aW9uQW5kTGVuZ3RoKHJvb3QsIGVuZE9mZnNldCAtIHJlc3VsdExlbmd0aCwgZW5kT2Zmc2V0KTsK
KyAgICBpZiAoIXJlc3VsdFJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5hZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoKnJlc3VsdFJhbmdlLCBtX21ldGFk
YXRhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggMTYxNTkwN2Q2
OTExMGM2ODVmNzczMDczMThiYjJhNTU3MTk2OGE0ZS4uNTEzNWI5MDZkZWUxOGUwMTc3OWVjNjEx
NDc0MzFjNzk1ZTM4YTU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksMTAgKzg5LDEyIEBAIHN0ZDo6dHVw
bGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKGNvCiAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5nIHRvIHVzZSB0
aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgogICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKICAgICBhdXRvIHBhcmFncmFw
aEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisgICAgaWYgKHBhcmFncmFwaFN0
YXJ0LmlzTnVsbCgpIHx8IHBhcmFncmFwaEVuZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsg
bnVsbHB0ciwgbmlsIH07CiAKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25T
dGFydCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdl
dCgpKTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxl
Y3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
KTsKKyAgICBhdXRvIGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpt
YWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxl
Y3Rpb25TdGFydCkgfSk7CisgICAgYXV0byBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCA9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KHNlbGVjdGlvbkVuZCkgfSk7CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5T
TWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkNoYXJhY3RlckNvdW50
KTsKIAogICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICB0b2tlblJhbmdlKHBs
YWluVGV4dChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCkuZ2V0KCkpLCBy
YW5nZVRvUGFzcywgJm9wdGlvbnMpOwpAQCAtMTMzLDcgKzEzNSwxMiBAQCBzdGQ6OnR1cGxlPFJl
ZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0
VGVzdFJlc3VsdAogICAgIGlmICghZnVsbENoYXJhY3RlclJhbmdlKQogICAgICAgICByZXR1cm4g
eyBudWxscHRyLCBuaWwgfTsKIAotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5n
ZShUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKSwgMCk7CisgICAgYXV0byBmdWxsQ2hh
cmFjdGVyU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSk7CisgICAgYXV0byBwb3NpdGlvbkJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9p
bnQocG9zaXRpb24pOworICAgIGlmICghZnVsbENoYXJhY3RlclN0YXJ0IHx8ICFwb3NpdGlvbkJv
dW5kYXJ5KQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKKworICAgIE5TUmFuZ2Ug
cmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCh7ICpmdWxsQ2hhcmFjdGVy
U3RhcnQsICpwb3NpdGlvbkJvdW5kYXJ5IH0pLCAwKTsKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlv
bnMgPSBuaWw7CiAgICAgTlNSYW5nZSBleHRyYWN0ZWRSYW5nZSA9IHRva2VuUmFuZ2UocGxhaW5U
ZXh0KGZ1bGxDaGFyYWN0ZXJSYW5nZS5nZXQoKSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBlZGUwYjRhMDA4YWM5OTljMDRh
NGNjNjhmN2FlZDlhYTJkYjZjZWFmLi45ODY3ZDA2M2E2N2I0MGMzN2RiYjRiZTE0YzcyMWQwNjU4
NGNhZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC02NTQsMTAgKzY1
NCwxMyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50VHJpcGxlQ2xp
Y2soY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UgogICAgIHJldHVybiB1cGRhdGVTZWxlY3Rp
b25Gb3JNb3VzZURvd25EaXNwYXRjaGluZ1NlbGVjdFN0YXJ0KHRhcmdldE5vZGUsIGV4cGFuZFNl
bGVjdGlvblRvUmVzcGVjdFNlbGVjdE9uTW91c2VEb3duKCp0YXJnZXROb2RlLCBuZXdTZWxlY3Rp
b24pLCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7CiB9CiAKLXN0YXRpYyBpbnQgdGV4dERpc3RhbmNl
KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKK3N0YXRpYyBDaGFy
YWN0ZXJDb3VudCB0ZXh0RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3Np
dGlvbiYgZW5kKQogewotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmFuY2hv
ck5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIHRydWUpOworICAgIGF1dG8gc3RhcnRCb3VuZGFy
eSA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KTsKKyAgICBhdXRvIGVuZEJvdW5kYXJ5ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kKTsKKyAgICBpZiAoIXN0YXJ0Qm91bmRhcnkgfHwgIWVuZEJvdW5k
YXJ5KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3Rh
cnRCb3VuZGFyeSwgKmVuZEJvdW5kYXJ5IH0sIHRydWUpOwogfQogCiBib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2soY29uc3QgTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9F
ZGl0aW5nUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcApp
bmRleCAxYWZhZTVlYmJmNWU2M2Q5YmVkZjMwMzlkZjQ0NTFjOWI1NTNhNjM4Li5iODk5MzNmZmEx
YmYyODQzYzI2ZmRiZDY2ZDI5MjZlZDAwYzVmNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9FZGl0aW5nUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRp
bmdSYW5nZS5jcHAKQEAgLTU4LDE4ICs1OCwxNyBAQCBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IEVk
aXRpbmdSYW5nZTo6dG9SYW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IEVkaXRpbgog
CiAgICAgQVNTRVJUKGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyA9PSBFZGl0aW5nUmFuZ2VJc1Jl
bGF0aXZlVG86OlBhcmFncmFwaCk7CiAKLSAgICBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisgICAgYXV0byYgc2VsZWN0aW9uID0g
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAg
aWYgKCFwYXJhZ3JhcGhSYW5nZSkKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5k
YXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpKTsKKyAg
ICBpZiAoIXBhcmFncmFwaFN0YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRv
JiByb290Tm9kZSA9IHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3RO
b2RlKCk7CiAKLSAgICBhdXRvJiByb290Tm9kZSA9IHBhcmFncmFwaFJhbmdlLmdldCgpLT5zdGFy
dENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0gICAgaW50IHBhcmFncmFwaFN0
YXJ0SW5kZXggPSBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKFdlYkNvcmU6OlJh
bmdlOjpjcmVhdGUocm9vdE5vZGUuZG9jdW1lbnQoKSwgJnJvb3ROb2RlLCAwLCAmcGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydE9mZnNldCgpKS5w
dHIoKSk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRp
b25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3JhcGhTdGFydEluZGV4ICsgc3RhdGljX2Nhc3Q8
aW50PihyYW5nZS5sb2NhdGlvbiksIGxlbmd0aCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydElu
ZGV4ID0gV2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQoeyB7IHJvb3ROb2RlLCAwIH0sICpwYXJhZ3Jh
cGhTdGFydCB9KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXggKyByYW5nZS5s
b2NhdGlvbiwgbGVuZ3RoKTsKIH0KIAogRWRpdGluZ1JhbmdlIEVkaXRpbmdSYW5nZTo6ZnJvbVJh
bmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlLCBF
ZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmNwcAppbmRleCA5ZTI0NzU4Y2Q5MmNmNzUwODZmY2MyMTgyNGIzNWM4ODA3MTIz
MjczLi41MmJiN2M3NjNkMDBiMDAzZDgxY2QwZThiMTlmOTg5ZmNhYjFiYTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmNwcApAQCAtNjUsOCArNjUsNiBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCiBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVUZXh0Q2hlY2tpbmdSZXF1ZXN0SUQoKQogewpA
QCAtMzYxLDYgKzM1OSw3IEBAIFdlYkNvcmU6OkRPTVBhc3RlQWNjZXNzUmVzcG9uc2UgV2ViRWRp
dG9yQ2xpZW50OjpyZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoY29uc3QgU3RyCiB9CiAKICNpZiAhUExB
VEZPUk0oQ09DT0EpICYmICFVU0UoR0xJQikKKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKG1fcGFnZS0+
aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQpKQpAQCAtMzcxLDYgKzM3MCw3IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVu
dCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKwogI2VuZGlmIC8vICFQTEFURk9STShD
T0NPQSkgJiYgIVVTRShHTElCKQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlk
QmVnaW5FZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCkBAIC00MjAsNiArNDIwLDcgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqIGVsZW1lbnQp
CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogdm9pZCBXZWJFZGl0b3JDbGllbnQ6
Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpAQCAtNDI5LDYgKzQzMCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzdWJGcmFtZVNjcm9s
bFBvc2l0aW9uQ2hhbmdlZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKwogI2VuZGlm
CiAKIHN0YXRpYyBib29sIGdldEFjdGlvblR5cGVGb3JLZXlFdmVudChLZXlib2FyZEV2ZW50KiBl
dmVudCwgV0tJbnB1dEZpZWxkQWN0aW9uVHlwZSYgdHlwZSkKQEAgLTU0OSwyMCArNTUxLDI1IEBA
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3IHRl
eHQsIFZlY3RvcjxXZWJDb3JlOjpHcmFtCiAgICAgKmJhZEdyYW1tYXJMZW5ndGggPSByZXN1bHRM
ZW5ndGg7CiB9CiAKLXN0YXRpYyBpbnQzMl90IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3N0YXRpYyBD
aGFyYWN0ZXJDb3VudCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlv
blN0YXJ0KTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7CisgICAgYXV0byBzZWxlY3Rp
b25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxl
Y3Rpb25TdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpOwor
ICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdy
YXBoKHNlbGVjdGlvblN0YXJ0KSk7CisgICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IHx8
ICFwYXJhZ3JhcGhTdGFydCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNoYXJhY3Rl
ckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsKIH0K
IAogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCisKIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBz
dHJpbmdWaWV3LCBPcHRpb25TZXQ8V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdU
eXBlcywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKICAgICBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIG1fcGFnZS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3RyaW5nVmlldy50
b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGNoZWNraW5nVHlwZXMsIGluc2VydGlvblBvaW50RnJv
bUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDaGVja1RleHRPZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOwogICAgIHJldHVybiBy
ZXN1bHRzOwogfQorCiAjZW5kaWYKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNv
bnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCkBAIC02MTYsMTUgKzYyMywxMyBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0ZShFbGVtZW50KiBlbGVtZW50
KQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24oKQogewot
I2lmIFBMQVRGT1JNKEdUSykKLSNpZiBQTEFURk9STShYMTEpCisjaWYgUExBVEZPUk0oR1RLKSAm
JiBQTEFURk9STShYMTEpCiAgICAgaWYgKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheSgp
LnR5cGUoKSA9PSBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OlgxMSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAjZW5kaWYKLSNpZiBQTEFURk9STShXQVlMQU5EKQorI2lmIFBMQVRGT1JNKEdUSykgJiYg
UExBVEZPUk0oV0FZTEFORCkKICAgICBpZiAoUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6V2F5bGFuZCkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0jZW5kaWYKICNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggNjNjNzU3N2E1YzAw
NTdjZWM4YmY4NWYzMzUwYWQ5MWRlMTZlNThlNS4uMTQ5ZjFhZDZjMzE3NGU3NzgxYzVhNDYwZTli
MDgxMTY3NThjYzQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKQEAgLTU0MzQsNiArNTQzNCw3IEBAIHZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBv
c2l0aW9uQXN5bmMoKQogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCiAjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXUEUpCisKIHN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWVGb3JFZGl0
aW5nKFdlYlBhZ2UmIHBhZ2UpCiB7CiAgICAgRnJhbWUmIHRhcmdldEZyYW1lID0gcGFnZS5jb3Jl
UGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTU0NzMs
NyArNTQ3NCw3IEBAIHZvaWQgV2ViUGFnZTo6ZGVsZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZz
ZXQsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50KQogCiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9
IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICBhdXRvIHN1cnJvdW5kaW5nUmFuZ2UgPSBt
YWtlUmFuZ2Uoc3RhcnRPZkVkaXRhYmxlQ29udGVudChzZWxlY3Rpb25TdGFydCksIHNlbGVjdGlv
blN0YXJ0KTsKLSAgICBhdXRvIGN1cnNvclBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChzdXJyb3VuZGluZ1JhbmdlLmdldCgpKTsKKyAgICBhdXRvIGN1cnNvclBvc2l0aW9uID0g
V2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQoKnN1cnJvdW5kaW5nUmFuZ2UpOwogICAgIGF1dG8mIHJv
b3ROb2RlID0gc3Vycm91bmRpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5y
b290Tm9kZSgpOwogICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgY3Vyc29yUG9zaXRpb24gKyBvZmZzZXQs
IGNoYXJhY3RlckNvdW50KTsKICAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQpAQCAtNTQ4NSw2ICs1
NDg2LDcgQEAgdm9pZCBXZWJQYWdlOjpkZWxldGVTdXJyb3VuZGluZyhpbnQ2NF90IG9mZnNldCwg
dW5zaWduZWQgY2hhcmFjdGVyQ291bnQpCiAgICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNldEln
bm9yZVNlbGVjdGlvbkNoYW5nZXMoZmFsc2UpOwogICAgIHNlbmRFZGl0b3JTdGF0ZVVwZGF0ZSgp
OwogfQorCiAjZW5kaWYKIAogdm9pZCBXZWJQYWdlOjpkaWRBcHBseVN0eWxlKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXgg
MzE1MmMzN2Y0ZjRkY2YyZmQxMDVhNjQ0ZmQxZTA3MGM5NjgxNWJmMS4uZjRmODQ4ZjM3OGEzNGRh
M2Y3ZWIyZWY4YWFhOWYyMGUyNTY5NjE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTE5ODksMTMgKzE5ODksMTYgQEAg
dm9pZCBXZWJQYWdlOjpzdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRT
dG9yZSkKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VOZWFy
UG9zaXRpb25NYXRjaGVzVGV4dChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25z
dCBTdHJpbmcmIG1hdGNoVGV4dCwgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSkKK3N0YXRp
YyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG1hdGNoVGV4dCwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewotICAgIGlmICghc2VsZWN0aW9uUmFu
Z2UpCisgICAgYXV0byBsaXZlUmFuZ2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOworICAgIGlm
ICghbGl2ZVJhbmdlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGF1dG8gcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCksIHNlbGVj
dGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIHVuc2lnbmVkIHRhcmdldE9mZnNldCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIHRydWUpOwotICAgIHJldHVybiBm
aW5kQ2xvc2VzdFBsYWluVGV4dCgqc2VsZWN0aW9uUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJn
ZXRPZmZzZXQpOworICAgIFNpbXBsZVJhbmdlIHJhbmdlIHsgKmxpdmVSYW5nZSB9OworICAgIGF1
dG8gYm91bmRhcnlQb2ludCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICBpZiAo
IWJvdW5kYXJ5UG9pbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJu
IGZpbmRDbG9zZXN0UGxhaW5UZXh0KHJhbmdlLCBtYXRjaFRleHQsIHsgfSwgY2hhcmFjdGVyQ291
bnQoeyByYW5nZS5zdGFydCwgKmJvdW5kYXJ5UG9pbnQgfSwgdHJ1ZSkpOwogfQogCiB2b2lkIFdl
YlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC0yMDIyLDcgKzIw
MjUsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChp
bnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZQogCiAgICAgaWYgKHBsYWluVGV4dEZvckRp
c3BsYXkocmFuZ2UucHRyKCkpICE9IHRleHQpIHsKICAgICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBm
b3IgYSByYW5nZSB3aGljaCBpcyB0aGUgY2xvc2VzdCB0byB0aGUgcG9zaXRpb24gd2l0aGluIHRo
ZSBzZWxlY3Rpb24gcmFuZ2UgdGhhdCBtYXRjaGVzIHRoZSBwYXNzZWQgaW4gdGV4dC4KLSAgICAg
ICAgaWYgKGF1dG8gd29yZFJhbmdlID0gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChzdGFy
dFBvc2l0aW9uLCB0ZXh0LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkpIHsKKyAgICAg
ICAgaWYgKGF1dG8gd29yZFJhbmdlID0gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChzdGFy
dFBvc2l0aW9uLCB0ZXh0LCBzZWxlY3Rpb24pKSB7CiAgICAgICAgICAgICBpZiAoIXdvcmRSYW5n
ZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgICAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uo
KndvcmRSYW5nZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggM2EwZGM0NTIwMTc2YzRjYjM5ZDE4Y2Q1
MTAyMmEwNGViMDdjZDc4Mi4uMmM1ODk2ZGY3ODU3NTg2NjEwZDJhM2E2NTU2ZDU4MTljZjZmZmU5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KQEAgLTE0MCwxOSArMTQwLDIyIEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1FZGl0
b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQsIEluY2x1ZGVQb3N0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rp
b24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNl
bGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHBvc3RMYXlvdXREYXRh
ID0gcmVzdWx0LnBvc3RMYXlvdXREYXRhKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlv
blN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBz
ZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotICAgIFZpc2libGVQb3NpdGlv
biBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAg
IFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25F
bmQpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50
KHNlbGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IG1ha2VCb3VuZGFyeVBv
aW50KHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBt
YWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7CisKKyAg
ICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfHwgIXNlbGVjdGlvbkVuZCB8fCAhcGFyYWdy
YXBoU3RhcnQpCisgICAgICAgIHJldHVybjsKIAotICAgIHBvc3RMYXlvdXREYXRhLmNhbmRpZGF0
ZVJlcXVlc3RTdGFydFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFu
Z2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgcG9zdExheW91
dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtl
UmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpIC0gcG9zdExheW91dERh
dGEuY2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb247CisgICAgcG9zdExheW91dERhdGEuY2Fu
ZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhT
dGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAgcG9zdExheW91dERhdGEuc2Vs
ZWN0ZWRUZXh0TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqc2VsZWN0aW9uU3RhcnRCb3VuZGFy
eSwgKnNlbGVjdGlvbkVuZCB9KTsKICAgICBwb3N0TGF5b3V0RGF0YS5wYXJhZ3JhcGhDb250ZXh0
Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9IHBsYWluVGV4dChmcmFtZS5lZGl0b3IoKS5jb250ZXh0UmFu
Z2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkuZ2V0KCkpOwogICAgIHBvc3RMYXlvdXREYXRhLnN0cmlu
Z0ZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFtZS5lZGl0b3IoKS5zdHJpbmdGb3JDYW5kaWRhdGVS
ZXF1ZXN0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA3YzUwNmZjNmE3YTMxYmYzNzdjYTY1
ZGM2NTEwNDRmNDFjZjlkZjEwLi5jYTQ3OTMxMDU0YjgwMjYyNjg3M2UzZjUzZmI1ZWUzMDU0ZTk4
NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMDMxLDE2ICsxMDMxLDE5IEBAIHN0YXRpYyBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjb3JlKE5TQXJyYXkgKmluY29taW5nUmVzdWx0cywg
T3B0aW9uU2V0PFRleHRDCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKLXN0YXRpYyBpbnQgaW5z
ZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBj
dXJyZW50U2VsZWN0aW9uKQorc3RhdGljIE5TVUludGVnZXIgaW5zZXJ0aW9uUG9pbnRGcm9tQ3Vy
cmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Cisg
ICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBh
dXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25T
dGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0
T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKKyAgICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91
bmRhcnkgfHwgIXBhcmFncmFwaFN0YXJ0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
Y2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5
IH0pOwogfQogCiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNo
ZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZT4gY29yZUNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJl
bnRTZWxlY3Rpb24pCiB7Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gQHsgTlNUZXh0Q2hl
Y2tpbmdJbnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50
ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24p
XSB9OworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0
aW9uUG9pbnRLZXkgOiBAKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVu
dFNlbGVjdGlvbikpIH07CiAgICAgcmV0dXJuIGNvcmUoW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRT
cGVsbENoZWNrZXJdIGNoZWNrU3RyaW5nOnN0cmluZy5jcmVhdGVOU1N0cmluZ1dpdGhvdXRDb3B5
aW5nKCkuZ2V0KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCgpKSB0eXBlczoo
bnNUZXh0Q2hlY2tpbmdUeXBlcyhjb3JlQ2hlY2tpbmdUeXBlcykgfCBOU1RleHRDaGVja2luZ1R5
cGVPcnRob2dyYXBoeSkgb3B0aW9uczpvcHRpb25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3Bl
bGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTpOVUxMIHdvcmRDb3VudDpOVUxMXSwg
Y29yZUNoZWNraW5nVHlwZXMpOwogfQogCkBAIC0xMDgzLDcgKzEwODYsNyBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBT
dHJpbmcmIGNvbnRleAogICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9IG5pbDsKICAgICBOU09ydGhv
Z3JhcGh5KiBvcnRob2dyYXBoeSA9IG5pbDsKICAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9
IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOwotICAgIE5TRGljdGlvbmFyeSAq
b3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVy
IG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVj
dGlvbihjdXJyZW50U2VsZWN0aW9uKV0gfTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBA
eyBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5IDogQChpbnNlcnRpb25Qb2ludEZyb21D
dXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSB9OwogICAgIGlmIChjb250ZXh0Lmxl
bmd0aCgpKSB7CiAgICAgICAgIFtjaGVja2VyIGNoZWNrU3RyaW5nOmNvbnRleHQgcmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0
aG9ncmFwaHkgb3B0aW9uczpvcHRpb25zIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVj
a2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOwog
ICAgICAgICBsYW5ndWFnZSA9IFtjaGVja2VyIGxhbmd1YWdlRm9yV29yZFJhbmdlOk5TTWFrZVJh
bmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIGluU3RyaW5nOmNvbnRleHQgb3J0aG9ncmFwaHk6b3J0
aG9ncmFwaHldOwpAQCAtMTExNiwyNCArMTExOSwyMCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZQogICAgIGlmICghW21fd2ViVmlldyBzaG91bGRSZXF1ZXN0Q2FuZGlkYXRlc10pCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoIXNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
RnJhbWUqIGZyYW1lID0gY29yZShbbV93ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CisK
KyAgICBhdXRvKiBmcmFtZSA9IGNvcmUoW21fd2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0p
OwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbGFzdFNlbGVjdGlv
bkZvclJlcXVlc3RlZENhbmRpZGF0ZXMgPSBzZWxlY3Rpb247CiAKLSAgICBWaXNpYmxlUG9zaXRp
b24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25T
dGFydCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVuZCA9IGVuZE9mUGFyYWdyYXBo
KHNlbGVjdGlvbkVuZCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBj
aGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVj
dGlvblN0YXJ0KSksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSk7CisgICAg
YXV0byBzZWxlY3Rpb25MZW5ndGggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2lu
dChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb24udmlzaWJsZUVu
ZCgpKSB9KTsKIAotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5n
ZXQoKSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpOwot
ICAgIG1fcmFuZ2VGb3JDYW5kaWRhdGVzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25T
dGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKKyAg
ICBtX3JhbmdlRm9yQ2FuZGlkYXRlcyA9IE5TTWFrZVJhbmdlKHNlbGVjdGlvblN0YXJ0T2Zmc2V0
SW5QYXJhZ3JhcGgsIHNlbGVjdGlvbkxlbmd0aCk7CiAgICAgbV9wYXJhZ3JhcGhDb250ZXh0Rm9y
Q2FuZGlkYXRlUmVxdWVzdCA9IHBsYWluVGV4dChmcmFtZS0+ZWRpdG9yKCkuY29udGV4dFJhbmdl
Rm9yQ2FuZGlkYXRlUmVxdWVzdCgpLmdldCgpKTsKIAogICAgIE5TVGV4dENoZWNraW5nVHlwZXMg
Y2hlY2tpbmdUeXBlcyA9IE5TVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgTlNUZXh0Q2hlY2tp
bmdUeXBlUmVwbGFjZW1lbnQgfCBOU1RleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggYmMzYmViZGYyNjJm
YTRlY2ZiMDE4NzhiM2MyYjBjNTVjM2VhOTAxNS4uZTRjNmFhMDA1YjlmOWQ4OTlmODE2YTNhZGMx
NDlmNTE0ZmIxYTM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCkBAIC04MzUsMjQgKzgzNSwxOSBAQCAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9j
b252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOgogICAg
ICAgICAvLyBUaGF0IGZpdHMgd2l0aCBBcHBLaXQncyBpZGVhIG9mIGFuIGlucHV0IGNvbnRleHQu
CiAgICAgICAgIGF1dG8qIGVsZW1lbnQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFl
bGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2Nh
dGlvbkFuZExlbmd0aChlbGVtZW50LCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7
CiAgICAgfQogCiAgICAgQVNTRVJUKHJhbmdlSXNSZWxhdGl2ZVRvID09IFdlYlJhbmdlSXNSZWxh
dGl2ZVRvOjpQYXJhZ3JhcGgpOwogCi0gICAgY29uc3QgYXV0byYgc2VsZWN0aW9uID0gX3ByaXZh
dGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtl
Qm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSk7CisgICAgaWYgKCFwYXJhZ3JhcGhT
dGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byYgcm9vdE5vZGUgPSBwYXJh
Z3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwogCi0gICAgUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkp
OwotICAgIGlmICghcGFyYWdyYXBoUmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYXV0byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhSYW5nZS5nZXQoKS0+c3RhcnRDb250YWluZXIo
KS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwotICAgIGludCBwYXJhZ3JhcGhTdGFydEluZGV4ID0g
V2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRl
KHJvb3ROb2RlLmRvY3VtZW50KCksICZyb290Tm9kZSwgMCwgJnBhcmFncmFwaFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRPZmZzZXQoKSkucHRyKCkpOwotICAg
IHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3Ro
KCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCArIHN0YXRpY19jYXN0PGludD4obnNyYW5n
ZS5sb2NhdGlvbiksIG5zcmFuZ2UubGVuZ3RoKTsKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0SW5k
ZXggPSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCh7IHsgcm9vdE5vZGUsIDAgfSwgKnBhcmFncmFw
aFN0YXJ0IH0pOworICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCArIG5zcmFuZ2Uu
bG9jYXRpb24sIG5zcmFuZ2UubGVuZ3RoKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfY29udmVydE5T
UmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjMzNhNDQyMDhhZDk5Yzg2
ZDgxZGE2ZWViMjAwNmFjNWQ1Mjc5ODZmLi4zNzBkMTBjNmE4N2Q1NTAxMDk0OGIyNTdjYWZiMGJh
MzFmYzdjYmY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDMtMjEgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoIHRvIG5vdCByZXF1aXJlIGEgbGl2ZSByYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5MjA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBlZGl0aW5nL21hYy9zcGVsbGluZy9hdXRvY29y
cmVjdGlvbi1jb250cmFjdGlvbi1leHBlY3RlZC50eHQ6IFVwZGF0ZSB0aGVzZSBleHBlY3RlZAor
ICAgICAgICByZXN1bHRzIGJlY2F1c2Ugb2YgY2hhbmdlcyB0byBkZWxlZ2F0ZSBjYWxsYmFja3Mu
IFRoZSB0ZXN0IGlzIHN0aWxsIHBhc3NpbmcgYW5kIHRoaXMKKyAgICAgICAgY2hhbmdlIGlzIG9u
bHkgaW4gdGhlIGxlZ2FjeSBXZWJLaXQgY2FzZSAodGhlcmUgaXMgYSBzZXBhcmF0ZSByZXN1bHQg
Zm9yIG1vZGVybiBXZWJLaXQpLgorICAgICAgICBUaGlzIHNlZW1zIHRvIGJlIGEgcHJvZ3Jlc3Np
b24sIG5vdCBldmlkZW5jZSBvZiBhIGJ1Zy4KKwogMjAyMC0wMy0yMSAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBMYXlvdXRUZXN0IGZhc3Qvc2Nyb2xs
aW5nL3Njcm9sbC1jb250YWluZXItaG9yaXpvbnRhbGx5Lmh0bWwgZnJlcXVlbnRseSB0aW1lcyBv
dXQgJiBmYWlscwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9tYWMvc3BlbGxpbmcv
YXV0b2NvcnJlY3Rpb24tY29udHJhY3Rpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRp
dGluZy9tYWMvc3BlbGxpbmcvYXV0b2NvcnJlY3Rpb24tY29udHJhY3Rpb24tZXhwZWN0ZWQudHh0
CmluZGV4IDYzODFlMjYzZGJkNGRhYzQwY2FlOTFlY2JlMmYxZmZiY2U5YTMxOWMuLmFiZjNkNTUw
YTA4N2RhYTkxYjA1YzkyOGY3NDgwODg5NzQwY2VmYmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvbWFjL3NwZWxsaW5nL2F1dG9jb3JyZWN0aW9uLWNvbnRyYWN0aW9uLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL21hYy9zcGVsbGluZy9hdXRvY29ycmVjdGlv
bi1jb250cmFjdGlvbi1leHBlY3RlZC50eHQKQEAgLTE1MSwyMSArMTUxLDggQEAgRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20g
NiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQog
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5p
dHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCi1FRElUSU5HIERFTEVHQVRFOiBzaG91
bGRJbnNlcnRUZXh0OndvdWxkIHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5z
ZXJ0QWN0aW9uVHlwZWQKLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxs
U2VsZWN0aW5nOkZBTFNFCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOnJhbmdlIGZyb20gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGls
bFNlbGVjdGluZzpGQUxTRQotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5n
ZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKLUVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24K
LUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENo
YW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0
aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdl
IGZyb20gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJh
bmdlOnJhbmdlIGZyb20gOCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvIDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpG
QUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5n
ZSBmcm9tIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byA4IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6
RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRF
OiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gOCBvZiAjdGV4dCA+IERJ
ViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDggb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gOSBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDkgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlv
bkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpAQCAtMTg2LDYgKzE3Mywx
OSBAQCBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VO
b3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFu
Z2U6cmFuZ2UgZnJvbSAxMyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvIDEzIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGls
bFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJ
TkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxNCBv
ZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDE0IG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5n
ZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydFRleHQ6d291bGQgcmVwbGFjaW5nRE9NUmFuZ2U6
cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGdp
dmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZAorRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTog
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlv
bkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90
aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNo
b3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0g
c3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFu
Z2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNl
bGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxMyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDEzIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmlj
YXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9E
T01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG8gMCBvZiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldl
YlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394226</attachid>
            <date>2020-03-22 12:46:33 -0700</date>
            <delta_ts>2020-03-22 14:14:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209207-20200322124631.patch</filename>
            <type>text/plain</type>
            <size>99075</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjVmMjVlYzRhZDljMzBk
MGNiMmM3MjIyNmYxNjkyYzBlNDUxOWQxNi4uY2U1YmJhNDY5MDAxOTUxOTc1MDk1NzdlZGYzMmZh
NmM5ZjM1YzEzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTAzLTIxICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVuYW1lZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoIHRvIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJh
bmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChX
ZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmlj
YXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSHlwZXJsaW5rLmNwcDoKKyAgICAgICAgKHJhbmdlTGVuZ3RoRm9yT2JqZWN0KTogRGl0dG8u
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252
ZXJ0VG9OU1JhbmdlOl0pOiBEaXR0by4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5oOiBF
eHBvcnQgYW5vdGhlciBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICBVc2UgY2hh
cmFjdGVyQ291bnQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnJh
bmdlTGVuZ3RoIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6Om9mZnNldFRvIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdFbmQgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5n
dGggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwgY29uc3QpOiBEaXR0by4KKworICAg
ICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFj
dGVyQ291bnQpOiBMaWtlIHRoZSBiYW92ZSBidXQgdGhlIGFyZ3VtZW50IGlzIFNpbXBsZVJhbmdl
CisgICAgICAgIGFuZCByZXR1cm4gaXMgQ2hhcmFjdGVyQ291bnQuIEV2ZW4gdGhvdWdoIGVhY2gg
aW5kaXZpZHVhbCBub2RlIGlzIGxpbWl0ZWQKKyAgICAgICAgdG8gMzItYml0IHNpemUsIHJhbmdl
cyBjb3ZlcmluZyBtdWx0aXBsZSBub2RlcyBjb3VsZCBoYXZlIGEgY291bnQgb2YKKyAgICAgICAg
Y2hhcmFjdGVycyB0aGF0IGV4Y2VlZHMgMzIgYml0cywgc28gQ2hhcmFjdGVyQ291bnQgaXMgc2l6
ZV90LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKworICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmg6IEFkZGVkIGNoYXJhY3RlckNvdW50IGZ1bmN0aW9uLAorICAgICAgICBDaGFy
YWN0ZXJDb3VudCBhbmQgQ2hhcmFjdGVyUmFuZ2UgdHlwZXMuIFJlbW92ZWQgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aC4KKyAgICAgICAgQWRkZWQgRklYTUUgY29tbWVudHMgYWJvdXQgdGhlIG5l
eHQgc3RlcHMuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludCk6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmg6IEFkZGVkIG1ha2VCb3VuZGFyeVBvaW50LiBBbHNvIHJlbW92
ZWQKKyAgICAgICAgZXh0cmFuZW91cyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgbW92ZWQgc29t
ZSBmdW5jdGlvbiBib2RpZXMgb3V0IG9mIHRoZQorICAgICAgICBjbGFzcyBkZWZpbml0aW9uLgor
CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBwdHJkaWZm
X3QuCisgICAgICAgIFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVVbml0cy5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RpY3Rpb25hcnlMb29rdXAubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0
aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rh
dGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dERpc3RhbmNlKTogRGl0
dG8uCisKIDIwMjAtMDMtMjIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbTEZDXSBJbnRyb2R1Y2UgSW5pdGlhbENvbnRhaW5pbmdCb3ggY2xhc3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggMTI5YzcwZmZkY2NiYzJhZWFkNDU1YjdhOWM5NGZhMTY3Y2Q2NzViMi4uNmUxYmIzNDYzNDJi
OGUwZDExYTY5YTA1M2E2YzYzYmMwOTc0YmVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAor
MjAyMC0wMy0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hh
bmdlIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVpcmUgYSBsaXZlIHJhbmdl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyMDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJl
ZC9FZGl0aW5nUmFuZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0aW5nUmFuZ2U6OnRvUmFu
Z2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjppbnNlcnRpb25Qb2lu
dEZyb21DdXJyZW50U2VsZWN0aW9uKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0bworICAgICAgICBD
aGFyYWN0ZXJDb3VudCBhbmQgdXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OnN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKTogVHdlYWtlZCAjaWYuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
Ojp0YXJnZXRGcmFtZUZvckVkaXRpbmcpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogRGl0dG8uCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0Ojpy
YW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
bGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogRGl0dG8uCisKIDIwMjAtMDMtMjIgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQgLVtVSVdpbmRv
d1NjZW5lIGludGVyZmFjZU9yaWVudGF0aW9uXSB3aGVuIGRldGVybWluaW5nIGRldmljZSBvcmll
bnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDdhYTliZGQ0ZjgzNmE5MjA3
NTI3MTIyNDBkY2U3ZTA1OWMwNjVlY2IuLjI2Yjc0MWQ1MjMyMGRmYjVjZDhhZjQwYWZmYmEzNmNk
NmU4YzgwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAyMC0wMy0xNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hh
bmdlIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVpcmUgYSBsaXZlIHJhbmdl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyMDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKGluc2VydGlvblBvaW50RnJv
bUN1cnJlbnRTZWxlY3Rpb24pOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChXZWJFZGl0
b3JDbGllbnQ6OnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RP
TVJhbmdlOnJhbmdlSXNSZWxhdGl2ZVRvOl0pOiBEaXR0by4KKwogMjAyMC0wMy0yMCAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBFbnN1cmUgbWVkaWEgY2FjaGUg
ZGlyZWN0b3J5IGlzIGNyZWF0ZWQgYmVmb3JlIHBhc3NpbmcgdG8gQVZVUkxBc3NldC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDI4ODAz
NDAxOTZkMTY5YTNkZjFjMDBhZGZhOGY5NmY4NGM0ZDgyYjIuLmY0ZDVjMWUzMzU5ZDNhNTFmNjAz
ZjVhYWQ0MGMyNjZmNTYyMjQ1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTkzOCwxOCArMTkzOCwxNiBAQCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5nZShjb25zdCBT
aW1wbGVSYW5nZQogICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBtYXRjaFRleHQubGVuZ3RoKCk7
CiAgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRo
T2Zmc2V0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihvcmlnaW5hbFJhbmdlLnN0YXJ0KSwg
LXRleHRMZW5ndGgpOwogICAgIGF1dG8gZW5kUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQ
b3NpdGlvbldpdGhPZmZzZXQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFu
Z2Uuc3RhcnQpLCAyICogdGV4dExlbmd0aCk7Ci0KICAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc051
bGwoKSkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShvcmlnaW5hbFJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKSk7CiAgICAgaWYgKGVuZFBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICBlbmRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JBZnRl
ck5vZGUob3JpZ2luYWxSYW5nZS5lbmQuY29udGFpbmVyLnB0cigpKTsKIAotICAgIGF1dG8gc2Vh
cmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKTsKLSAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIFNpbXBsZVJh
bmdlIHNlYXJjaFJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH07CisgICAgaWYgKHNlYXJjaFJhbmdlLmNvbGxh
cHNlZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byByYW5nZSA9
IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgc3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpKTsKLSAgICB1bnNpZ25lZCB0YXJnZXRP
ZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVlKTsKKyAg
ICBhdXRvIHRhcmdldE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgc2VhcmNoUmFuZ2Uuc3RhcnQs
IG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwgdHJ1ZSk7CiAgICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxh
aW5UZXh0KHNlYXJjaFJhbmdlLCBtYXRjaFRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KTsKIH0KIApA
QCAtMTk5MiwxMiArMTk5MCwxMSBAQCBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cihjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldDEsIGNvbgogc3RhdGljIE5v
ZGUqIHJlc2V0Tm9kZUFuZE9mZnNldEZvclJlcGxhY2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUs
IGludCYgb2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpCiB7CiAgICAgLy8gVXNlIHRoaXMgZnVu
Y3Rpb24gdG8gaW5jbHVkZSB0aGUgcmVwbGFjZWQgbm9kZSBpdHNlbGYgaW4gdGhlIHJhbmdlIHdl
IGFyZSBjcmVhdGluZy4KLSAgICBpZiAoIXJlcGxhY2VkTm9kZSkKKyAgICBhdXRvIG5vZGVSYW5n
ZSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKHJlcGxhY2VkTm9kZSk7Cisg
ICAgaWYgKCFub2RlUmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIFJl
ZlB0cjxSYW5nZT4gbm9kZVJhbmdlID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVu
dHMocmVwbGFjZWROb2RlKTsKLSAgICBpbnQgbm9kZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgobm9kZVJhbmdlLmdldCgpKTsKLSAgICBvZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCA8
PSBub2RlTGVuZ3RoID8gcmVwbGFjZWROb2RlLT5jb21wdXRlTm9kZUluZGV4KCkgOiByZXBsYWNl
ZE5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7CisgICAgYm9vbCBpc0luTm9kZSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjaGFyYWN0ZXJDb3VudCkgPD0gV2ViQ29yZTo6Y2hhcmFjdGVyQ291
bnQoKm5vZGVSYW5nZSk7CisgICAgb2Zmc2V0ID0gcmVwbGFjZWROb2RlLT5jb21wdXRlTm9kZUlu
ZGV4KCkgKyAoaXNJbk5vZGUgPyAwIDogMSk7CiAgICAgcmV0dXJuIHJlcGxhY2VkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogfQogCkBAIC0yNDEzLDE0ICsyNDEwLDE2IEBAIENoYXJhY3Rlck9mZnNldCBB
WE9iamVjdENhY2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYg
Y2hhcmFjCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKICAgICAKICAgICAvLyBX
ZSBkb24ndCBhbHdheXMgbW92ZSBvbmUgJ2NoYXJhY3RlcicgYXQgYSB0aW1lIHNpbmNlIHRoZXJl
IG1pZ2h0IGJlIGNvbXBvc2VkIGNoYXJhY3RlcnMuCi0gICAgaW50IG5leHRPZmZzZXQgPSBQb3Np
dGlvbjo6dW5jaGVja2VkTmV4dE9mZnNldChjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVy
T2Zmc2V0Lm9mZnNldCk7CisgICAgdW5zaWduZWQgbmV4dE9mZnNldCA9IFBvc2l0aW9uOjp1bmNo
ZWNrZWROZXh0T2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJPZmZzZXQub2Zm
c2V0KTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dCA9IGNoYXJhY3Rlck9mZnNldEZvck5vZGVB
bmRPZmZzZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCBuZXh0T2Zmc2V0KTsKICAgICAKICAgICAv
LyBUbyBiZSBjb25zaXN0ZW50IHdpdGggVmlzaWJsZVBvc2l0aW9uLCB3ZSBzaG91bGQgY29uc2lk
ZXIgdGhlIGNhc2UgdGhhdCBjdXJyZW50IG5vZGUgZW5kIHRvIG5leHQgbm9kZSBzdGFydCBjb3Vu
dHMgMSBvZmZzZXQuCiAgICAgaWYgKCFpZ25vcmVOZXh0Tm9kZVN0YXJ0ICYmICFuZXh0LmlzTnVs
bCgpICYmICFpc1JlcGxhY2VkTm9kZU9yQlIobmV4dC5ub2RlKSAmJiBuZXh0Lm5vZGUgIT0gY2hh
cmFjdGVyT2Zmc2V0Lm5vZGUpIHsKLSAgICAgICAgaW50IGxlbmd0aCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgocmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9m
ZnNldCwgbmV4dCkuZ2V0KCkpOwotICAgICAgICBpZiAobGVuZ3RoID4gbmV4dE9mZnNldCAtIGNo
YXJhY3Rlck9mZnNldC5vZmZzZXQpCi0gICAgICAgICAgICBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0
Rm9yTm9kZUFuZE9mZnNldCgqbmV4dC5ub2RlLCAwLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFy
dCk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJP
ZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgbmV4dCkpIHsKKyAgICAgICAgICAgIGF1dG8gbGVuZ3Ro
ID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlKTsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPiBuZXh0
T2Zmc2V0IC0gY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCkKKyAgICAgICAgICAgICAgICBuZXh0ID0g
Y2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqbmV4dC5ub2RlLCAwLCBUcmF2ZXJzZU9w
dGlvbkluY2x1ZGVTdGFydCk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgcmV0dXJuIG5l
eHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVj
dENhY2hlQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0
Q2FjaGVBdGsuY3BwCmluZGV4IGZlMTI2MGQ3ZmRjZjY4ODk4YWQ4NTU3ODRiMDUxZDNkNzIxZDEw
NmYuLmQxNTZhZWNlODY4NWVkMzQ0Yzk1NWVkMjdhZDkwOTAzNjM2MWU4ODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3Bw
CkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpub2RlVGV4dENoYW5nZVBs
YXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamUKICAgICAgICAgLy8g
dGhlIGN1cnJlbnQgYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8gZW5zdXJlIHdlIGVtaXQgdGhlCiAg
ICAgICAgIC8vIHJpZ2h0IG9mZnNldCAoZS5nLiBtdWx0aWxpbmUgdGV4dCBhcmVhcykuCiAgICAg
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBub2RlLT5wYXJlbnROb2Rl
KCksIDAsIG5vZGUsIDApOwotICAgICAgICBvZmZzZXRUb0VtaXQgPSBvZmZzZXQgKyBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpKTsKKyAgICAgICAgb2Zmc2V0VG9FbWl0ID0g
b2Zmc2V0ICsgY2hhcmFjdGVyQ291bnQocmFuZ2UuZ2V0KCkpOwogICAgIH0KIAogICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZSh3cmFwcGVyLCBkZXRhaWwuZGF0YSgpLCBvZmZzZXRUb0VtaXQsIHRl
eHRUb0VtaXQubGVuZ3RoKCksIHRleHRUb0VtaXQudXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJs
aW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVIeXBlcmxpbmsuY3BwCmluZGV4IGE0NjFjMWZhZGFmOGM3MjVkY2RiNGZlOWU1ZjgwMGZiOGI2
ODI5ZWQuLjhkOTZkMmE2MTcyNWNiMDM1YmNhZjIwOGMzOTczMTQ4Mjk0ODlkNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBl
cmxpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVIeXBlcmxpbmsuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIEF0a09iamVj
dCogd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0dldE9iamVjdChBdGtIeXBlcmxpbmsqIGxpbmss
IGdpbnQgaW4KIHN0YXRpYyBnaW50IHJhbmdlTGVuZ3RoRm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlP
YmplY3QmIG9iaiwgUmFuZ2UqIHJhbmdlKQogewogICAgIC8vIFRoaXMgaXMgZ29pbmcgdG8gYmUg
dGhlIGFjdHVhbCBsZW5ndGggaW4gbW9zdCBvZiB0aGUgY2FzZXMKLSAgICBpbnQgYmFzZUxlbmd0
aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UsIHRydWUpOworICAgIGludCBiYXNl
TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCB0cnVlKTsKIAogICAgIC8vIENoZWNrIHdo
ZXRoZXIgdGhlIGN1cnJlbnQgaHlwZXJsaW5rIGJlbG9uZ3MgdG8gYSBsaXN0IGl0ZW0uCiAgICAg
Ly8gSWYgc28sIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIGxlbmd0aCBvZiB0aGUgaXRlbSdzIG1h
cmtlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCmluZGV4IGIyNzE1YzdjNTNj
YWU5ZDA0YWYzZTRjMGY5M2FmOTc1ZjYzZGI1MjUuLjE1NGRjM2MwMjc3NmRhNDg4MzQ3YzJiYTAx
ZGZmNTgyNTZiODVhMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKQEAg
LTQxMCw5ICs0MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0
KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libAogCiAgICAgLy8gU2V0IHZh
bHVlcyBmb3Igc3RhcnQgb2Zmc2V0cyBhbmQgY2FsY3VsYXRlIGluaXRpYWwgcmFuZ2UgbGVuZ3Ro
LgogICAgIC8vIFRoZXNlIHZhbHVlcyBtaWdodCBiZSBhZGp1c3RlZCBsYXRlciB0byBjb3ZlciBz
cGVjaWFsIGNhc2VzLgotICAgIHN0YXJ0T2Zmc2V0ID0gd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0
KGNvcmVPYmplY3QsIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBhcmVudC5wdHIo
KSwgdHJ1ZSkpOworICAgIHN0YXJ0T2Zmc2V0ID0gd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0KGNv
cmVPYmplY3QsIGNoYXJhY3RlckNvdW50KHJhbmdlSW5QYXJlbnQuZ2V0KCksIHRydWUpKTsKICAg
ICBhdXRvIG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZVJh
bmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgaW50IHJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChub2RlUmFuZ2UucHRyKCksIHRydWUpOworICAgIGludCByYW5nZUxl
bmd0aCA9IGNoYXJhY3RlckNvdW50KG5vZGVSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAKICAgICAvLyBT
cGVjaWFsIGNhc2VzIHRoYXQgYXJlIG9ubHkgcmVsZXZhbnQgd2hlbiB3b3JraW5nIHdpdGggKl9F
TkQgYm91bmRhcmllcy4KICAgICBpZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBTVFJFQU0p
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA1NjM5MmMwYmQ4M2QxYTJhN2NiNzZhNzU0YjllYjg4
M2YyMGNmZjVlLi4zOTRkNDg2M2YwM2EyZjhhNTQzMTRmYWIwNzc5MmI2YWUyZjAxZjM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZVV0aWwuY3BwCkBAIC0yNDcsMTAgKzI0NywxMCBAQCBBWENvcmVPYmplY3QqIG9iamVj
dEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9i
amVjdAogICAgICAgICBvZmZzZXQgPSAwOwogICAgIGVsc2UgaWYgKCFpc1N0YXJ0T2ZMaW5lKGVu
ZFBvc2l0aW9uKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLnByZXZpb3VzKCkpOwotICAgICAgICBvZmZzZXQgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKSArIDE7CisgICAgICAg
IG9mZnNldCA9IChyYW5nZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgdHJ1ZSkgOiAwKSArIDE7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0gICAgICAgIG9mZnNldCA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOworICAgICAgICBvZmZzZXQgPSByYW5n
ZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgdHJ1ZSkgOiAwOwogICAgIH0KIAogICAgIHJldHVy
biBmaXJzdFVuaWdub3JlZFBhcmVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0KaW5kZXggMTAxZWIyZDgyNzk3OTRkYTkxMzRkMjgxMTgwZGVhNWNhYjgwZGM1ZC4uMWZh
ZTVhZmM5YjkyNjFhZDdhZjVhMThhNTNmZmYzNDQ4YWM2ZDI2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTIzMTAsMzAgKzIzMTAsMzAgQEAgLSAoTlNBcnJh
eSAqKWFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzIGF0dHJpYnV0
ZWQ6KEJPT0wpYXR0cmkKICAgICByZXR1cm4gW2FycmF5IGF1dG9yZWxlYXNlXTsKIH0KIAotLSAo
TlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UgKilyYW5nZQorLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooUmFuZ2UgKilsaXZlUmFuZ2UKIHsKLSAgICBpZiAoIXJhbmdlKQorICAg
IGlmICghbGl2ZVJhbmdlKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwg
MCk7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9j
dW1lbnQoKTsKLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1lKCkt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBFbGVt
ZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpOworICAgIFNpbXBsZVJhbmdlIHJhbmdlIHsgKmxpdmVSYW5nZSB9Owor
CisgICAgYXV0byYgZG9jdW1lbnQgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpOworICAgIGF1dG8q
IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisKKyAgICBhdXRvKiByb290RWRpdGFibGVF
bGVtZW50ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBhdXRvKiBzY29wZSA9IHJvb3RFZGl0YWJsZUVsZW1lbnQgPyByb290RWRpdGFi
bGVFbGVtZW50IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFzY29wZSkK
KyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCiAgICAgLy8gTW91
c2UgZXZlbnRzIG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBm
b3IgYSBwb3J0aW9uIG9mIHRoZSB2aWV3Ci0gICAgLy8gdGhhdCBpcyBub3QgaW5zaWRlIHRoZSBj
dXJyZW50IGVkaXRhYmxlIHJlZ2lvbi4gIFRoZXNlIGNoZWNrcyBlbnN1cmUgd2UgZG9uJ3QgcHJv
ZHVjZQorICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3VycmVudCBlZGl0YWJsZSByZWdp
b24uIFRoZXNlIGNoZWNrcyBlbnN1cmUgd2UgZG9uJ3QgcHJvZHVjZQogICAgIC8vIHBvdGVudGlh
bGx5IGludmFsaWQgZGF0YSB3aGVuIHJlc3BvbmRpbmcgdG8gc3VjaCByZXF1ZXN0cy4KLSAgICBp
ZiAoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250
YWluZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5n
ZShOU05vdEZvdW5kLCAwKTsKLSAgICBpZiAoJnJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29w
ZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICBp
ZiAoIXNjb3BlLT5jb250YWlucyhyYW5nZS5zdGFydC5jb250YWluZXIucHRyKCkpIHx8ICFzY29w
ZS0+Y29udGFpbnMocmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSkpCiAgICAgICAgIHJldHVybiBO
U01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIGF1dG8gdGVzdFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsICZyYW5nZS0+c3RhcnRDb250YWlu
ZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwotICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsKLSAgICB0ZXN0UmFuZ2UtPnNldEVu
ZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgQVNTRVJU
KCZ0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGludCBlbmRQb3Np
dGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsKLSAgICBy
ZXR1cm4gTlNNYWtlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0
aW9uKTsKKyAgICByZXR1cm4gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwg
MCB9LCByYW5nZS5zdGFydCB9KSwgY2hhcmFjdGVyQ291bnQocmFuZ2UpKTsKIH0KIAogLSAoUmVm
UHRyPFJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuaAppbmRleCAxMjdmMmYxODk0NjRjMTBjNDlhNTU0NDg2NmVhYzQ5NGQ0ZTg4
YjIzLi5hY2Q5ODU1YTg5MTljMzc2ZTE1N2QxY2VkOWM1ZGVlZDdhMTk1NzI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuaApAQCAtNDIsNyArNDIsNyBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2Ugewog
CiAgICAgYm9vbCBjb2xsYXBzZWQoKSBjb25zdCB7IHJldHVybiBzdGFydCA9PSBlbmQ7IH0KIAot
ICAgIFNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoY29uc3QgQm91bmRhcnlQb2ludCYs
IGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZShC
b3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5UG9pbnQmJik7CiAKICAgICAvLyBDb252ZW5pZW5jZSBv
dmVybG9hZHMgdG8gaGVscCB3aXRoIHRyYW5zaXRpb24gZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZl
IHJhbmdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCmluZGV4IGVjMjIxNmQ3YWQ5ZjJjMzkxMDg2ZThlZTA3MTU3ZDJlY2Jh
MDk1ZDIuLmI3YTA4ODFlNmY0Y2UzNmY2NTk1NTZmYzRhYmNhMzYxNmQxMTNhMzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cApAQCAtNTgwLDUyICs1ODAsMzggQEAgU3RyaW5nIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
Om1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChBbHQKIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29u
c3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBBbHRlcm5hdGl2ZVRl
eHRUeXBlIGFsdGVybmF0aXZlVHlwZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlc1RvQWRkKQogewotICAgIGF1dG8gcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKLQotICAgIHNldFN0YXJ0KHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24ucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFu
Z2Uuc3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24ucHRyKCksIGVuZE9mUGFyYWdyYXBoKHJhbmdlLmVuZFBvc2l0aW9uKCkpKTsK
LQogICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KLSAgICAvLyBI
b3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUgaXMgbm90IHZhbGlkIGFueW1vcmUuCi0gICAgLy8gU28gYmVmb3Jl
IHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0
IHBvc2l0aW9uIG9mIHJhbmdlV2l0aEFsdGVybmF0aXZlCi0gICAgLy8gcmVsYXRpdmUgdG8gdGhl
IHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCi0gICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4g
SW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBh
IHJhbmdlCi0gICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRv
IHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZS4KLSAgICBhdXRvIGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCks
IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7Ci0K
LSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdl
LnN0YXJ0UG9zaXRpb24oKTsKLSAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVy
bmF0aXZlLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gc2V0RW5k
UmVzdWx0ID0gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQo
KnN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSwgc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29tcHV0ZU9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKTsKLSAgICBpZiAoc2V0RW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm47CisgICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsc3Rv
cmUgdGhlIHN0YXJ0IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbgorICAg
IC8vIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4KIAogICAgIC8vIFRha2Ugbm90ZSBvZiB0
aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBh
ZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBpbnQgY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5wdHIoKSk7CisgICAgYXV0byBjb3JyZWN0aW9u
U3RhcnRQb3NpdGlvbiA9IHJhbmdlLnN0YXJ0UG9zaXRpb24oKTsKKyAgICBhdXRvIGNvcnJlY3Rp
b25TdGFydCB7IG1ha2VCb3VuZGFyeVBvaW50KGNvcnJlY3Rpb25TdGFydFBvc2l0aW9uKSB9Owor
ICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgeyBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdy
YXBoKGNvcnJlY3Rpb25TdGFydFBvc2l0aW9uKSkgfTsKKyAgICBpZiAoIWNvcnJlY3Rpb25TdGFy
dCB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHRyZWVTY29w
ZVJvb3QgPSBtYWtlUmVmKGNvcnJlY3Rpb25TdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5y
b290Tm9kZSgpKTsKKyAgICBCb3VuZGFyeVBvaW50IHRyZWVTY29wZVN0YXJ0IHsgdHJlZVNjb3Bl
Um9vdC5nZXQoKSwgMCB9OworICAgIGF1dG8gY29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBoID0g
Y2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpjb3JyZWN0aW9uU3RhcnQgfSk7Cisg
ICAgYXV0byBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSA9IGNoYXJhY3RlckNvdW50KHsgdHJl
ZVNjb3BlU3RhcnQsICpwYXJhZ3JhcGhTdGFydCB9KTsKIAotICAgIC8vIENsb25lIHRoZSByYW5n
ZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBv
cmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgYXV0byByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJh
bmdlLmNsb25lUmFuZ2UoKTsKKyAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxs
ZXIgb2YgbWF5IGtlZXAgYSByZWZlcm5lY2UgdG8gdGhlIG9yaWdpbmFsIHJhbmdlIGFuZCBtb2Rp
ZnkgaXQuCisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlLmNsb25l
UmFuZ2UoKSwgYWx0ZXJuYXRpdmUpLT5hcHBseSgpOwogCi0gICAgQ29udGFpbmVyTm9kZSYgcm9v
dE5vZGUgPSBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5l
cigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0gICAgaW50IHBhcmFncmFwaFN0YXJ0SW5kZXgg
PSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKFJhbmdlOjpjcmVhdGUocm9vdE5vZGUuZG9jdW1l
bnQoKSwgJnJvb3ROb2RlLCAwLCAmcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+
c3RhcnRDb250YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3Rh
cnRPZmZzZXQoKSkucHRyKCkpOwotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgYWx0ZXJuYXRpdmUpLT5hcHBseSgpOwogICAgIC8vIFJl
Y2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdp
bmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlk
LiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5NTI2Ci0gICAgYXV0byB1cGRhdGVkUGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9j
YXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3JhcGhTdGFydEluZGV4LCBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaCArIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKKyAgICBhdXRv
IHVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCh0cmVlU2NvcGVSb290LnB0cigpLCBwYXJhZ3Jh
cGhPZmZzZXRJblRyZWVTY29wZSwgY29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBoICsgYWx0ZXJu
YXRpdmUubGVuZ3RoKCkpOwogICAgIGlmICghdXBkYXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKLQogICAgIHNldEVuZCh1cGRhdGVkUGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCp1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbiwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZl
Lmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJh
bmdlLmdldCgpKTsKKyAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKCp1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiwgY29ycmVj
dGlvbk9mZnNldEluUGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSk7CiAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgotICAgIGlmIChuZXdUZXh0ICE9
IGFsdGVybmF0aXZlKQorICAgIGlmIChwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSkg
IT0gYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciYgbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCk7Ci0KKyAgICBhdXRvJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5n
ZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKTsKICAgICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6
IG1hcmtlclR5cGVzVG9BZGQpCi0gICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKCpyZXBsYWNlbWVu
dFJhbmdlLCBtYXJrZXJUeXBlLCBtYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJrZXJUeXBlKSk7CisgICAgICAgIG1hcmtlcnMuYWRk
TWFya2VyKHJlcGxhY2VtZW50UmFuZ2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9y
QXBwbGllZEFsdGVybmF0aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CmluZGV4IGZlMDdmNTYxNjA5NzFiMzBjYjgzZTEwYjMyYzI1ZDcwNmQwMWJjMGIuLjA5YTM3NDll
YTJiN2MzZTQ2ZjllOTZiMzQwY2JlOTRmMTNiOTQ5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0yMjMsMTkgKzIyMywxNCBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjpkb0FwcGx5KCkKIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiB7Ci0gICAgLy8gdXBkYXRlIGRvY3Vt
ZW50IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMKLSAgICAvLyBzbyB0aGF0IHdl
IGF2b2lkIHRoZSBleHBlbnNlIG9mIHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBldmVyeSBjYWxs
Ci0gICAgLy8gdG8gY2hlY2sgYSBjb21wdXRlZCBzdHlsZQorICAgIC8vIFVwZGF0ZSBkb2N1bWVu
dCBsYXlvdXQgb25jZSBiZWZvcmUgcmVtb3Zpbmcgc3R5bGVzIHNvIHRoYXQgd2UgYXZvaWQgdGhl
IGV4cGVuc2Ugb2YKKyAgICAvLyB1cGRhdGluZyBiZWZvcmUgZWFjaCBhbmQgZXZlcnkgY2FsbCB0
byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlLgogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICAvLyBnZXQgcG9zaXRpb25zIHdlIHdhbnQg
dG8gdXNlIGZvciBhcHBseWluZyBzdHlsZQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRQb3Np
dGlvbigpOwogICAgIFBvc2l0aW9uIGVuZCA9IGVuZFBvc2l0aW9uKCk7Ci0gICAgaWYgKGNvbXBh
cmVQb3NpdGlvbnMoZW5kLCBzdGFydCkgPCAwKSB7Ci0gICAgICAgIFBvc2l0aW9uIHN3YXAgPSBz
dGFydDsKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0gICAgICAgIGVuZCA9IHN3YXA7Ci0gICAgfQor
ICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGVuZCwgc3RhcnQpIDwgMCkKKyAgICAgICAgc3RkOjpz
d2FwKHN0YXJ0LCBlbmQpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFy
dCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQoZW5kKTsKQEAgLTI0NiwxNCArMjQx
LDE4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5
bGUmIHN0eWxlKQogICAgIC8vIFNhdmUgYW5kIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2lu
dHMgdXNpbmcgdGhlaXIgaW5kaWNlcyBpbiB0aGUgZWRpdGFibGUgcm9vdCwgc2luY2UKICAgICAv
LyBhZGRCbG9ja1N0eWxlSWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBjYW4gcmVt
b3ZlIHRoZXNlIGVuZHBvaW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRp
Y2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KLSAgICBhdXRv
KiBzY29wZSA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50
KCkpOworICAgIGF1dG8gc2NvcGUgPSBtYWtlUmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3Qodmlz
aWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKTsKICAgICBpZiAoIXNjb3BlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUpLCB2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHZpc2libGVF
bmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaW50
IHN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0UmFuZ2UucHRyKCks
IHRydWUpOwotICAgIGludCBlbmRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZW5k
UmFuZ2UucHRyKCksIHRydWUpOworICAgIEJvdW5kYXJ5UG9pbnQgc2NvcGVTdGFydCB7ICpzY29w
ZSwgMCB9OworICAgIGF1dG8gc3RhcnRCb3VuZGFyeVBvaW50ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkp
OworICAgIGF1dG8gZW5kQm91bmRhcnlQb2ludCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVF
bmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYg
KCFzdGFydEJvdW5kYXJ5UG9pbnQgfHwgIWVuZEJvdW5kYXJ5UG9pbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwg
KnN0YXJ0Qm91bmRhcnlQb2ludCB9LCB0cnVlKTsKKyAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFj
dGVyQ291bnQoeyBzY29wZVN0YXJ0LCAqZW5kQm91bmRhcnlQb2ludCB9LCB0cnVlKTsKIAogICAg
IFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydChzdGFydE9mUGFyYWdyYXBoKHZpc2libGVT
dGFydCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoU3RhcnQoZW5kT2ZQYXJh
Z3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CkBAIC0yODUsOCArMjg0LDggQEAgdm9pZCBB
cHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiAg
ICAgfQogICAgIAogICAgIHsKLSAgICAgICAgYXV0byBzdGFydFJhbmdlID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZSwgc3RhcnRJbmRleCwgMCwgdHJ1ZSk7
Ci0gICAgICAgIGF1dG8gZW5kUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9u
QW5kTGVuZ3RoKHNjb3BlLCBlbmRJbmRleCwgMCwgdHJ1ZSk7CisgICAgICAgIGF1dG8gc3RhcnRS
YW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUuZ2V0
KCksIHN0YXJ0SW5kZXgsIDAsIHRydWUpOworICAgICAgICBhdXRvIGVuZFJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZS5nZXQoKSwgZW5kSW5kZXgs
IDAsIHRydWUpOwogICAgICAgICBpZiAoc3RhcnRSYW5nZSAmJiBlbmRSYW5nZSkKICAgICAgICAg
ICAgIHVwZGF0ZVN0YXJ0RW5kKHN0YXJ0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgZW5kUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCA3ZGRiMGFiMjUyMTk0OTMyMDU1OGVkNDExODRi
NTEwY2E5NjBlZTU2Li4wZWYzOTI3OWU0NzIwODY1MDhiZmY1N2EyYmJiMzYzMTBkOWU4Njk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApA
QCAtMTQxNyw3ICsxNDE3LDYgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFn
cmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAKICAgICBp
bnQgc3RhcnRJbmRleCA9IC0xOwogICAgIGludCBlbmRJbmRleCA9IC0xOwotICAgIGludCBkZXN0
aW5hdGlvbkluZGV4ID0gLTE7CiAgICAgYm9vbCBvcmlnaW5hbElzRGlyZWN0aW9uYWwgPSBlbmRp
bmdTZWxlY3Rpb24oKS5pc0RpcmVjdGlvbmFsKCk7CiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9u
ICYmICFlbmRpbmdTZWxlY3Rpb24oKS5pc05vbmUoKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVN0YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0x
NDMyLDE4ICsxNDMxLDIyIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3Jh
cGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKHN0YXJ0SW5QYXJh
Z3JhcGgpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KGRvY3VtZW50KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0UmFuZ2UucHRyKCksIHRydWUpOworICAgICAg
ICAgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpOworICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVjdGlvblN0
YXJ0KQorICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAq
cGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydCB9LCB0cnVlKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgZW5kSW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKGVuZEluUGFyYWdy
YXBoKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChlbmRSYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg
YXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGhU
b01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxl
RW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgICAg
ICAgICAgICAgIGlmIChwYXJhZ3JhcGhTdGFydCAmJiBzZWxlY3Rpb25FbmQpCisgICAgICAgICAg
ICAgICAgICAgIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpz
ZWxlY3Rpb25FbmQgfSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCisKICAgICBWaXNpYmxlUG9zaXRpb24gYmVmb3JlUGFyYWdyYXBoID0gc3RhcnRPZlBhcmFn
cmFwaFRvTW92ZS5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGFmdGVyUGFyYWdyYXBoKGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLm5leHQoQ2Fu
bm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpKTsKIApAQCAtMTQ3OCw5ICsxNDgxLDkgQEAgdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBzdGFydE9mUGFyYWdyYXAKICAgICAgICAgLy8gVGhlIG1vdmVkIHBhcmFncmFwaCBzaG91bGQg
YXNzdW1lIHRoZSBibG9jayBzdHlsZSBvZiB0aGUgZGVzdGluYXRpb24uCiAgICAgICAgIHN0eWxl
SW5FbXB0eVBhcmFncmFwaC0+cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgfQotICAgIAor
CiAgICAgLy8gRklYTUUgKDUwOTg5MzEpOiBXZSBzaG91bGQgYWRkIGEgbmV3IGluc2VydCBhY3Rp
b24gIldlYlZpZXdJbnNlcnRBY3Rpb25Nb3ZlZCIgYW5kIGNhbGwgc2hvdWxkSW5zZXJ0RnJhZ21l
bnQgaGVyZS4KLSAgICAKKwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KHN0YXJ0LCBlbmQsIERPV05TVFJFQU0pKTsKICAgICBmcmFtZSgpLmVkaXRvcigpLmNsZWFyTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgZGVsZXRlU2Vs
ZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKQEAgLTE1MDksOCArMTUxMiw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgaWYgKCFlZGl0YWJsZVJvb3QpCiAgICAgICAg
IGVkaXRhYmxlUm9vdCA9ICZkb2N1bWVudCgpOwogCi0gICAgYXV0byBzdGFydFRvRGVzdGluYXRp
b25SYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShl
ZGl0YWJsZVJvb3QuZ2V0KCkpLCBkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBkZXN0aW5hdGlvbkluZGV4ID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChzdGFydFRvRGVzdGluYXRpb25SYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAg
YXV0byBkZXN0aW5hdGlvbkluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyB7ICplZGl0YWJsZVJvb3Qs
IDAgfSwgKm1ha2VCb3VuZGFyeVBvaW50KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpIH0sIHRydWUpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oZGVzdGluYXRpb24sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCkp
OwogICAgIEFTU0VSVChlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IDhkNmJkZjQ3OGFiZjdhODllZTA2ZDFmMGM1Yzcy
OWMwZWE1YTc0MGQuLjc1ODJhODlkM2JjMmJmNDdlMmQ0MzQ4Y2E2MmRmODhlMGQ4OTk1MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTA4MywxNSArMTA4MywyMyBAQCBpbnQg
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpb24sIFJlZlB0cjxDb250YQogICAgICAgICAgICAgc2NvcGUgPSAmZG9jdW1lbnQ7CiAgICAg
fQogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIGZpcnN0UG9zaXRp
b25Jbk5vZGUoc2NvcGUuZ2V0KCkpLCBwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KSk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIHRy
dWUpOworICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChmaXJzdFBvc2l0aW9uSW5O
b2RlKHNjb3BlLmdldCgpKSk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChwb3Np
dGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5k
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFy
dCwgKmVuZCB9LCB0cnVlKTsKIH0KIAogLy8gRklYTUU6IE1lcmdlIHRoaXMgZnVuY3Rpb24gd2l0
aCB0aGUgb25lIGFib3ZlLgogaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKE5vZGUmIG5vZGUs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBib29sIGZvclNlbGVjdGlv
blByZXNlcnZhdGlvbikKIHsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLmRv
Y3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoJm5vZGUpLCB2aXNpYmxlUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgcmV0dXJuIFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIGZvclNlbGVjdGlvblByZXNlcnZh
dGlvbik7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZpcnN0UG9zaXRpb25J
bk5vZGUoJm5vZGUpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAg
ICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNo
YXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbik7
CiB9CiAKIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZz
ZXQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgaW50IG9mZnNldCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCA4YzIzNGE0ZDkx
OTQwOGRkYWE3ZDcxNTEwOGI4NGMxZmMzMDJmNmZhLi5hZDgyNzg4OWNhYjU4NWQzMDE1OTZhNjNh
YmRlYzZmZjRiNzVlMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuY3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGg6OmludmFsaWRhdGVQYXJhZ3JhcGhSYW5nZVZhbHVlcygpCiAKIGludCBUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OnJhbmdlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCgmcGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgcmV0dXJuIGNoYXJhY3RlckNv
dW50KHBhcmFncmFwaFJhbmdlKCkpOwogfQogCiBSYW5nZSYgVGV4dENoZWNraW5nUGFyYWdyYXBo
OjpwYXJhZ3JhcGhSYW5nZSgpIGNvbnN0CkBAIC0xNjUsMTQgKzE2NSwxMSBAQCBSZWY8UmFuZ2U+
IFRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwgaW50
IGNoYXJhY3RlckNvdQogCiBFeGNlcHRpb25PcjxpbnQ+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6
b2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewotICAgIGlmICghcG9z
aXRpb24uY29udGFpbmVyTm9kZSgpKQorICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2lu
dChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7CisgICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0KLSAgICBhdXRvIHJhbmdlID0gb2Zm
c2V0QXNSYW5nZSgpLmNsb25lUmFuZ2UoKTsKLSAgICBhdXRvIHJlc3VsdCA9IHJhbmdlLT5zZXRF
bmQoKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgcG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsg
KnN0YXJ0LCAqZW5kIH0pOwogfQogCiBib29sIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aXNFbXB0
eSgpIGNvbnN0CkBAIC0yMDAsMjEgKzE5NywyMSBAQCBjb25zdCBTdHJpbmcmIFRleHRDaGVja2lu
Z1BhcmFncmFwaDo6dGV4dCgpIGNvbnN0CiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVj
a2luZ1N0YXJ0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fY2hlY2tpbmdTdGFydCkKLSAgICAgICAg
bV9jaGVja2luZ1N0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCgmb2Zmc2V0QXNSYW5n
ZSgpKTsKKyAgICAgICAgbV9jaGVja2luZ1N0YXJ0ID0gY2hhcmFjdGVyQ291bnQob2Zmc2V0QXNS
YW5nZSgpKTsKICAgICByZXR1cm4gKm1fY2hlY2tpbmdTdGFydDsKIH0KIAogaW50IFRleHRDaGVj
a2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdFbmQoKSBjb25zdAogewogICAgIGlmICghbV9jaGVja2lu
Z0VuZCkKLSAgICAgICAgbV9jaGVja2luZ0VuZCA9IGNoZWNraW5nU3RhcnQoKSArIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobV9jaGVja2luZ1JhbmdlLnB0cigpKTsKKyAgICAgICAgbV9jaGVj
a2luZ0VuZCA9IGNoZWNraW5nU3RhcnQoKSArIGNoZWNraW5nTGVuZ3RoKCk7CiAgICAgcmV0dXJu
ICptX2NoZWNraW5nRW5kOwogfQogCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2lu
Z0xlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NoZWNraW5nTGVuZ3RoKQotICAgICAgICBt
X2NoZWNraW5nTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX2NoZWNraW5nUmFu
Z2UucHRyKCkpOworICAgICAgICBtX2NoZWNraW5nTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobV9j
aGVja2luZ1JhbmdlKTsKICAgICByZXR1cm4gKm1fY2hlY2tpbmdMZW5ndGg7CiB9CiAKQEAgLTIy
Myw4ICsyMjAsMTIgQEAgaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6YXV0b21hdGljUmVwbGFj
ZW1lbnRTdGFydCgpIGNvbnN0CiAgICAgaWYgKG1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCkK
ICAgICAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQ7CiAKLSAgICBhdXRv
IHN0YXJ0T2Zmc2V0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSwg
bV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIG1fYXV0
b21hdGljUmVwbGFjZW1lbnRTdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRP
ZmZzZXRSYW5nZS5wdHIoKSk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHBh
cmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsK
KyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9hdXRv
bWF0aWNSZXBsYWNlbWVudFN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7
CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQ7CiB9CiAKQEAgLTIzMyw4
ICsyMzQsNyBAQCBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVu
dExlbmd0aCgpIGNvbnN0CiAgICAgaWYgKG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGgpCiAg
ICAgICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aDsKIAotICAgIGF1dG8g
ZW5kT2Zmc2V0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSwgbV9h
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICBtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRPZmZzZXRS
YW5nZS5wdHIoKSkgLSBhdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KCk7CisgICAgbV9hdXRvbWF0
aWNSZXBsYWNlbWVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50KG1fYXV0b21hdGljUmVwbGFjZW1l
bnRSYW5nZSk7CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwogfQog
CkBAIC0zMjMsMjUgKzMyMywyMyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmly
c3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgIC8vIHNp
bmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCiAgICAgUmVm
PFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25lUmFuZ2UoKTsKICAgICBzZXRT
dGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpKTsKLSAgICBpbnQgdG90YWxSYW5nZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UucHRyKCkpOworICAgIGF1dG8gdG90YWxSYW5nZUxl
bmd0aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKICAgICBzZXRFbmQocGFyYWdy
YXBoUmFuZ2UucHRyKCksIGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkp
OwogICAgIAotICAgIFJlZjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFy
YWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBpbnQgcmFu
Z2VTdGFydE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgob2Zmc2V0QXNSYW5nZS5w
dHIoKSk7Ci0gICAgaW50IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKKyAgICBhdXRvIHJhbmdl
U3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3Jh
cGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgQ2hhcmFjdGVyQ291bnQgdG90YWxMZW5ndGhQcm9jZXNz
ZWQgPSAwOwogICAgIAogICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwogICAgIGJvb2wg
bGFzdEl0ZXJhdGlvbiA9IGZhbHNlOwogICAgIHdoaWxlICh0b3RhbExlbmd0aFByb2Nlc3NlZCA8
IHRvdGFsUmFuZ2VMZW5ndGgpIHsKICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWFy
Y2ggcmFuZ2UgYnkgcGFyYWdyYXBocywgY2hlY2tpbmcgZWFjaCBvbmUgZm9yIHNwZWxsaW5nIGFu
ZCBncmFtbWFyLgotICAgICAgICBpbnQgY3VycmVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UucHRyKCkpOworICAgICAgICBhdXRvIGN1cnJlbnRMZW5n
dGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7CiAgICAgICAgIGludCBjdXJyZW50
U3RhcnRPZmZzZXQgPSBmaXJzdEl0ZXJhdGlvbiA/IHJhbmdlU3RhcnRPZmZzZXQgOiAwOwogICAg
ICAgICBpbnQgY3VycmVudEVuZE9mZnNldCA9IGN1cnJlbnRMZW5ndGg7CiAgICAgICAgIGlmIChp
blNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+
ZW5kUG9zaXRpb24oKSkpIHsKICAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVy
IG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSB0byB0aGUg
ZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCiAgICAgICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQg
dG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgICAgICAgICAgYXV0byBlbmRPZmZz
ZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIo
KS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5l
bmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldEFzUmFuZ2UucHRyKCkpOworICAgICAgICAgICAgY3Vy
cmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+
ZW5kUG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAgICBsYXN0SXRlcmF0aW9uID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0IDwgY3VycmVudEVuZE9mZnNl
dCkgewpAQCAtMzk5LDEwICszOTcsOCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogCiAgICAg
ICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkgJiYgKCFjaGVja0dyYW1t
YXIgfHwgYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkgfHwgc3BlbGxpbmdMb2NhdGlvbiA8PSBn
cmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBzcGVsbGlu
Z09mZnNldCA9IHNwZWxsaW5nTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gcGFyYWdyYXBoT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlv
bigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdy
YXBoT2Zmc2V0QXNSYW5nZS5wdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KG1f
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGlu
ZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVs
bGluZ09mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVs
bGVkV29yZDsKQEAgLTQxMCwxMCArNDA2LDggQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiAhYmFk
R3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGdyYW1t
YXJQaHJhc2VPZmZzZXQgPSBncmFtbWFyUGhyYXNlTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gcGFyYWdyYXBoT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVh
dGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgbV9yYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlLnB0cigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7
ICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5k
YXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAg
ICAgICAgICAgIG91dElzU3BlbGxpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgb3V0
Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7CiAgICAgICAgICAgICAgICAg
ICAgIGZpcnN0Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKQEAgLTU1Niw3ICs1NTAsNyBA
QCBib29sIFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEJhZCBncmFtbWFyIGF0IHN0YXJ0IG9mIHJh
bmdlLCBidXQgZW5kIG9mIGJhZCBncmFtbWFyIGlzIGJlZm9yZSBvciBhZnRlciBlbmQgb2YgcmFu
Z2UKLSAgICBpZiAoZ3JhbW1hckRldGFpbC5sZW5ndGggIT0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtX3JhbmdlLnB0cigpKSkKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdyYW1t
YXJEZXRhaWwubGVuZ3RoKSAhPSBjaGFyYWN0ZXJDb3VudChtX3JhbmdlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8gYmUg
ZGlzcGxheWluZyB0aGlzIGVycm9yICh3aGV0aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFuZWwg
aXMgb24gc2NyZWVuKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRl
eCBlODQ0MTJiMjc2ODM1NjZmMzAzYTZkMWI5MmU2N2YzMjEyZDhkMmZkLi5lODZlYmYxOTE5MDJl
YjUzMWI4NzQ1Y2Q3NWY5ZTc4ZjU0NDk5ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCkBAIC0yMzQzLDEyICsyMzQzLDEwIEBAIHNpemVfdCBTZWFyY2hCdWZmZXI6
Omxlbmd0aCgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tCiAKLWludCBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKGNvbnN0IFJhbmdlKiByYW5nZSwgYm9vbCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24p
CitDaGFyYWN0ZXJDb3VudCBjaGFyYWN0ZXJDb3VudChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IGJvb2wgc3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cykKIHsKLSAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIGZvciAoVGV4dEl0
ZXJhdG9yIGl0KCpyYW5nZSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uID8gVGV4dEl0ZXJhdG9y
RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBUZXh0SXRlcmF0b3JE
ZWZhdWx0QmVoYXZpb3IpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKQorICAgIENoYXJhY3Rl
ckNvdW50IGxlbmd0aCA9IDA7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQocmFuZ2UsIHNwYWNl
c0ZvclJlcGxhY2VkRWxlbWVudHMgPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7ICFpdC5h
dEVuZCgpOyBpdC5hZHZhbmNlKCkpCiAgICAgICAgIGxlbmd0aCArPSBpdC50ZXh0KCkubGVuZ3Ro
KCk7CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTI0NTYsMjEgKzI0NTQsMTYgQEAgYm9vbCBU
ZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNjb3BlLCBj
b25zdCBSYW5nZSogcmFuZ2UKIAogICAgIC8vIFRoZSBjcml0aWNhbCBhc3N1bXB0aW9uIGlzIHRo
YXQgdGhpcyBvbmx5IGdldHMgY2FsbGVkIHdpdGggcmFuZ2VzIHRoYXQKICAgICAvLyBjb25jZW50
cmF0ZSBvbiBhIGdpdmVuIGFyZWEgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIHJvb3QuIFRoaXMg
aXMgZG9uZQotICAgIC8vIGJlY2F1c2Ugb2YgdGV4dCBmaWVsZHMgYW5kIHRleHRhcmVhcy4gVGhl
IERPTSBmb3IgdGhvc2UgaXMgbm90Ci0gICAgLy8gZGlyZWN0bHkgaW4gdGhlIGRvY3VtZW50IERP
TSwgc28gZW5zdXJlIHRoYXQgdGhlIHJhbmdlIGRvZXMgbm90IGNyb3NzIGEKLSAgICAvLyBib3Vu
ZGFyeSBvZiBvbmUgb2YgdGhvc2UuCisgICAgLy8gYmVjYXVzZSBvZiB0ZXh0IGZpZWxkcyBhbmQg
dGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBpcyBub3QgZGlyZWN0bHkKKyAgICAvLyBpbiB0
aGUgZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUgdGhhdCB0aGUgcmFuZ2UgZG9lcyBub3QgY3Jvc3Mg
YSBib3VuZGFyeQorICAgIC8vIG9mIG9uZSBvZiB0aG9zZS4KICAgICBpZiAoJnJhbmdlLT5zdGFy
dENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0Rlc2Nl
bmRhbnRPZihzY29wZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoJnJhbmdlLT5l
bmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLmlzRGVzY2Vu
ZGFudE9mKHNjb3BlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmPFJhbmdlPiB0
ZXN0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgJnJh
bmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJU
KCZ0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxvY2F0aW9uID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UucHRyKCkpOwotCi0gICAgdGVzdFJh
bmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOwot
ICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBs
ZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSkgLSBsb2Nh
dGlvbjsKKyAgICBsb2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgeyAqc2NvcGUsIDAgfSwgeyBy
YW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgfSB9KTsKKyAgICBs
ZW5ndGggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAwIH0sIHsgcmFuZ2UtPmVuZENvbnRh
aW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkgfSB9KSAtIGxvY2F0aW9uOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCAxNTdmMWRh
MWQwZTZjOTUzZDlkZWRjNGVmYWNlMTNlOTgwZTMxMzRlLi45NmVjYWVlNDkzY2Q3MzRkYmU5ODlk
OWNlYWNmNWQ5OWY2OWY4ODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgK
QEAgLTM2LDcgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmFuZ2U7CiBjbGFz
cyBSZW5kZXJUZXh0RnJhZ21lbnQ7CiAKKy8vIEZJWE1FOiBEZWxldGUgdGhpcyBvdmVybG9hZCBh
ZnRlciBtb3ZpbmcgYWxsIHRoZSBjYWxsZXJzIHRvIHRoZSBTaW1wbGVSYW5nZSB2ZXJzaW9uLgog
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5nZSosIFRleHRJdGVyYXRv
ckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0
cmluZyA9IGZhbHNlKTsKKwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dChjb25zdCBT
aW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJl
aGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9IGZhbHNlKTsKIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgYm9vbCBp
c0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0
VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3JGb3JUZXN0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJik7
CkBAIC0xMDAsNyArMTAyLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFRleHRJdGVyYXRvckNvcHlh
YmxlVGV4dCYgY29weWFibGVUZXh0KCkgY29uc3QgeyBBU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4g
bV9jb3B5YWJsZVRleHQ7IH0KICAgICB2b2lkIGFwcGVuZFRleHRUb1N0cmluZ0J1aWxkZXIoU3Ry
aW5nQnVpbGRlciYgYnVpbGRlcikgY29uc3QgeyBjb3B5YWJsZVRleHQoKS5hcHBlbmRUb1N0cmlu
Z0J1aWxkZXIoYnVpbGRlcik7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpbnQgcmFu
Z2VMZW5ndGgoY29uc3QgUmFuZ2UqLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBm
YWxzZSk7CisgICAgLy8gRklYTUU6IE1vdmUgdGhlc2UgdG8gU2ltcGxlUmFuZ2UsIENoYXJhY3Rl
clJhbmdlLCBhbmQgQ2hhcmFjdGVyQ291bnQgYW5kIG1vdmUgb3V0IG9mIHRoaXMgY2xhc3MgdG8g
dGhlIHRvcCBsZXZlbCAoYm90dG9tIG9mIHRoaXMgZmlsZSkuCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoQ29udGFpbmVy
Tm9kZSogc2NvcGUsIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgsIGJvb2wgc3Bh
Y2VzRm9yUmVwbGFjZWRFbGVtZW50cyA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgYm9vbCBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShOb2RlKiBzY29wZSwgY29uc3Qg
UmFuZ2UqLCBzaXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gc3VicmFuZ2UoUmFuZ2UmIGVudGlyZVJhbmdlLCBpbnQg
Y2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpOwpAQCAtMjg3LDQgKzI4OSwxMyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRMb29rQWhlYWQgeyB0cnVlIH07CiB9OwogCit1c2lu
ZyBDaGFyYWN0ZXJDb3VudCA9IHNpemVfdDsKKworc3RydWN0IENoYXJhY3RlclJhbmdlIHsKKyAg
ICBDaGFyYWN0ZXJDb3VudCBsb2NhdGlvbiB7IDAgfTsKKyAgICBDaGFyYWN0ZXJDb3VudCBsZW5n
dGggeyAwIH07Cit9OworCitXRUJDT1JFX0VYUE9SVCBDaGFyYWN0ZXJDb3VudCBjaGFyYWN0ZXJD
b3VudChjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wgc3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cyA9
IGZhbHNlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDZiOTBmZmRiZTU0YWVjZTg2MzM1MTMxMmEyNWIx
MmFlOGQyY2UxYTAuLjk3MzAyY2Y1MmE0MzllMDdhZGYwYzhlYzliOGExZGNlYmFjYzExZjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTgxOSw2ICs4MTksMTEgQEAgYm9vbCBWaXNpYmxlUG9z
aXRpb246OmVxdWFscyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIG90aGVyKSBjb25zdAogICAgIHJl
dHVybiBtX2FmZmluaXR5ID09IG90aGVyLm1fYWZmaW5pdHkgJiYgbV9kZWVwUG9zaXRpb24uZXF1
YWxzKG90aGVyLm1fZGVlcFBvc2l0aW9uKTsKIH0KIAorT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4g
bWFrZUJvdW5kYXJ5UG9pbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAg
ICByZXR1cm4gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Cit9
CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgc3RyZWFtLCBFQWZmaW5pdHkg
YWZmaW5pdHkpCiB7CiAgICAgc3dpdGNoIChhZmZpbml0eSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggNDg1NjY4MjRlZDczZmRhY2QyNTcwOGRlMzE5MzE0
ZTYxOTJjMDJmMC4uZjg0YmNkZmQ3MmY1YmM0NTc2MzNkYTQ4MzI3MjFlNTI3N2EyNDg1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCw2
IEBACiAjaW5jbHVkZSAiRWRpdGluZ0JvdW5kYXJ5LmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIK
IAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFJhbmdlOwpAQCAtNDksOSArNDUsNiBAQCBjbGFzcyBSYW5nZTsKIC8v
IHBvc2l0aW9uIGlzIG5vdCBhdCBhIGxpbmUgYnJlYWsuCiAjZGVmaW5lIFZQX1VQU1RSRUFNX0lG
X1BPU1NJQkxFIFVQU1RSRUFNCiAKLWNsYXNzIElubGluZUJveDsKLWNsYXNzIE5vZGU7Ci0KIGNs
YXNzIFZpc2libGVQb3NpdGlvbiB7CiBwdWJsaWM6CiAgICAgLy8gTk9URTogVVBTVFJFQU0gYWZm
aW5pdHkgd2lsbCBiZSB1c2VkIG9ubHkgaWYgcG9zIGlzIGF0IGVuZCBvZiBhIHdyYXBwZWQgbGlu
ZSwKQEAgLTg1LDIxICs3OCwxNiBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
IG5vdCBoYW5kbGUgW3RhYmxlLCAwXSBjb3JyZWN0bHkuCiAgICAgRWxlbWVudCogcm9vdEVkaXRh
YmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90TnVsbCgpID8g
bV9kZWVwUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDog
MDsgfQotICAgIAotICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KElubGluZUJveComIGlu
bGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG1fZGVlcFBv
c2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBpbmxpbmVCb3gsIGNhcmV0
T2Zmc2V0KTsKLSAgICB9CiAKLSAgICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChUZXh0RGly
ZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJl
dE9mZnNldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG1fZGVlcFBvc2l0aW9uLmdldElubGluZUJv
eEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0
T2Zmc2V0KTsKLSAgICB9CisgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94
KiYsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zm
c2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYsIGludCYgY2Fy
ZXRPZmZzZXQpIGNvbnN0OwogCiAgICAgLy8gUmVjdCBpcyBsb2NhbCB0byB0aGUgcmV0dXJuZWQg
cmVuZGVyZXIKICAgICBXRUJDT1JFX0VYUE9SVCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KFJl
bmRlck9iamVjdComKSBjb25zdDsKKwogICAgIC8vIEJvdW5kcyBvZiAocG9zc2libHkgdHJhbnNm
b3JtZWQpIGNhcmV0IGluIGFic29sdXRlIGNvb3JkcwogICAgIFdFQkNPUkVfRVhQT1JUIEludFJl
Y3QgYWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0
OworCiAgICAgLy8gQWJzIHgveSBwb3NpdGlvbiBvZiB0aGUgY2FyZXQgaWdub3JpbmcgdHJhbnNm
b3Jtcy4KICAgICAvLyBGSVhNRTogbmF2aWdhdGlvbiB3aXRoIHRyYW5zZm9ybXMgc2hvdWxkIGJl
IHNtYXJ0ZXIuCiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGxpbmVEaXJlY3Rpb25Qb2ludEZvckJs
b2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpIGNvbnN0OwpAQCAtMTA3LDcgKzk1LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBhYnNvbHV0ZVNlbGVjdGlvbkJvdW5kc0Zv
ckxpbmUoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgaXMgYSB0ZW50YXRpdmUgZW5oYW5jZW1lbnQg
b2Ygb3BlcmF0b3I9PSB0byBhY2NvdW50IGZvciBhZmZpbml0eS4KLSAgICAvLyBGSVhNRTogQ29t
YmluZSB0aGlzIGZ1bmN0aW9uIHdpdGggb3BlcmF0b3I9PQorICAgIC8vIEZJWE1FOiBDb21iaW5l
IHRoaXMgZnVuY3Rpb24gd2l0aCBvcGVyYXRvcj09LgogICAgIGJvb2wgZXF1YWxzKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpAQCAt
MTE1LDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIq
IGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lkIHNob3dUcmVlRm9yVGhp
cygpIGNvbnN0OwogI2VuZGlmCi0gICAgCisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KGNvbnN0
IFBvc2l0aW9uJiwgRUFmZmluaXR5KTsKICAgICBQb3NpdGlvbiBjYW5vbmljYWxQb3NpdGlvbihj
b25zdCBQb3NpdGlvbiYpOwpAQCAtMTI3LDIzICsxMTUsNTAgQEAgcHJpdmF0ZToKICAgICBFQWZm
aW5pdHkgbV9hZmZpbml0eTsKIH07CiAKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0b3I8
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBv
cGVyYXRvcj4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
Citib29sIG9wZXJhdG9yPD0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJik7Citib29sIG9wZXJhdG9yPj0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CisKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPEJvdW5kYXJ5UG9p
bnQ+IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgc2V0U3RhcnQoUmFuZ2UqLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKK2Jvb2wgc2V0RW5kKFJhbmdlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CitWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UqLCBF
QWZmaW5pdHkpOworVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5n
ZSosIEVBZmZpbml0eSk7CisKK1dFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIGVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisKK2Jvb2wgaXNGaXJzdFZpc2li
bGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBOb2RlKik7Citi
b29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBj
b25zdCBOb2RlKik7CisKK2Jvb2wgYXJlVmlzaWJsZVBvc2l0aW9uc0luU2FtZVRyZWVTY29wZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKworV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEVBZmZpbml0eSk7CitXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisKKy8vIGlubGluZXMKKwogLy8gRklYTUU6IFRoaXMg
c2hvdWxkbid0IGlnbm9yZSBhZmZpbml0eS4KIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0
dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA9PSBiLmRlZXBFcXVpdmFsZW50KCk7CiB9Ci0gCisKIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KLSAgICAKKwogaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBiKQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPCBiLmRlZXBF
cXVpdmFsZW50KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBWaXNpYmxlUG9z
aXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikgCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7
CiAgICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA+IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0K
QEAgLTE1MywyNiArMTY4LDIwIEBAIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiAgICAgcmV0dXJuIGEuZGVl
cEVxdWl2YWxlbnQoKSA8PSBiLmRlZXBFcXVpdmFsZW50KCk7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGIpIAoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgp
ID49IGIuZGVlcEVxdWl2YWxlbnQoKTsKLX0gICAgCi0KLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxS
YW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOwotYm9vbCBzZXRTdGFydChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwot
Ym9vbCBzZXRFbmQoUmFuZ2UqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLVZpc2libGVQb3Np
dGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVBZmZpbml0eSk7Ci1WaXNp
YmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsK
LQotV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKLQotYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2Rl
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKLWJvb2wgaXNMYXN0VmlzaWJs
ZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKK30K
IAotYm9vbCBhcmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworaW5saW5lIHZvaWQgVmlzaWJsZVBv
c2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQm
IGNhcmV0T2Zmc2V0KSBjb25zdAoreworICAgIG1fZGVlcFBvc2l0aW9uLmdldElubGluZUJveEFu
ZE9mZnNldChtX2FmZmluaXR5LCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKK30KIAotV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEVBZmZpbml0eSk7Ci1XRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitpbmxpbmUgdm9pZCBWaXNpYmxlUG9zaXRpb246Omdl
dElubGluZUJveEFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGlu
ZUJveComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKK3sKKyAgICBtX2RlZXBQ
b3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlv
biwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IDkxMDlhYjk1NDkw
NjlmMzYwNGYwOTg2YWM5OGU4Yjk5NDQ5YTE0YWUuLmFmZjM2ZDQ4MTg4NzI2ZjI4YjBiYzM3OTk5
MTlhZTdjMGVmMmU3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAK
QEAgLTE5MDEsMjAgKzE5MDEsMTMgQEAgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9m
R3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW4KICAgICByZXR1
cm4gUmFuZ2U6OmNyZWF0ZShwcmV2Qm91bmRhcnkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpLT5kb2N1bWVudCgpLCBwcmV2Qm91bmRhcnksIG5leHRCb3VuZGFyeSk7CiB9CiAKLWlu
dCBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBvdGhlcikKK3B0cmRpZmZfdCBkaXN0YW5jZUJldHdlZW5Qb3Np
dGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIp
CiB7Ci0gICAgaWYgKHZwLmlzTnVsbCgpIHx8IG90aGVyLmlzTnVsbCgpKQorICAgIGlmIChhLmlz
TnVsbCgpIHx8IGIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotCi0gICAgYm9vbCB0aGlz
SXNTdGFydCA9ICh2cCA8IG90aGVyKTsKLQotICAgIC8vIFN0YXJ0IG11c3QgY29tZSBmaXJzdCBp
biB0aGUgUmFuZ2UgY29uc3RydWN0b3IuCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
dnAuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzSXNTdGFydCA/IHZwIDogb3Ro
ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzSXNTdGFy
dCA/IG90aGVyIDogdnApKTsKLSAgICBpbnQgZGlzdGFuY2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHJhbmdlLnB0cigpKTsKLQotICAgIHJldHVybiAodGhpc0lzU3RhcnQgPyAtZGlzdGFu
Y2UgOiBkaXN0YW5jZSk7CisgICAgcmV0dXJuIGEgPCBiCisgICAgICAgID8gLWNoYXJhY3RlckNv
dW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGEpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoYikgfSkKKyAg
ICAgICAgOiBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChiKSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KGEpIH0pOwogfQogCiB2b2lkIGNoYXJhY3RlcnNBcm91bmRQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hhcjMyJiBvbmVBZnRlciwgVUNoYXIzMiYg
b25lQmVmb3JlLCBVQ2hhcjMyJiB0d29CZWZvcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuaAppbmRleCA2NzE3ZWIxMWRkZGJkODY4ZTQ0MTRjMzk4MDMzNTJhMDMxNmFmZTNlLi5j
ZThjNTBmNTc5MzYwZTAxY2ZkYzg1MmZlYTU4MWY5ZTQyNWE0ODM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVVuaXRzLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBXRUJDT1JFX0VYUE9SVCBi
b29sIGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRH
cmFudWxhcgogV0VCQ09SRV9FWFBPUlQgYm9vbCB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b24pOwogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRh
cnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFu
dWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKLVdFQkNPUkVfRVhQT1JUIGludCBkaXN0YW5j
ZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBwdHJkaWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRp
b25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uJik7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdv
cmRCb3VuZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pOwog
V0VCQ09SRV9FWFBPUlQgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgVUNoYXIzMiYgb25lQWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIz
MiYgdHdvQmVmb3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RGF0YURldGVjdGlvbi5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5tbQppbmRleCAxMDNlNTUzYjIzN2E5MTk3YmMzOGQyNDIxNjAyNDZjNmQyMzIyNjM1Li4y
YjkzMTdiMTcxM2YyNjBhMmRhZjM4YzViMWZiYTRlMDg0YWI3Y2E2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCkBAIC03MSwxNSArNzEsMTggQEAg
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250
ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJv
dW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKIHsKICAgICBTdHJp
bmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwot
ICAgIGludCBoaXRMb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdl
KGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOworICAgIGF1
dG8gc3RhcnQgPSBjb250ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhcnQu
aXNOdWxsKCkgfHwgcG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
Q0ZJbmRleCBoaXRMb2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKIAotICAgIFJldGFpblB0
cjxERFNjYW5uZXJSZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5u
ZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKLSAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlS
ZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0cmluZy5sZW5ndGgoKSkpKTsKKyAgICBh
dXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRh
cmQsIDAsIG51bGxwdHIpKTsKKyAgICBhdXRvIHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVl
cnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJp
bmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0
cmluZy5sZW5ndGgoKSkpKTsKIAogICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5uZXIu
Z2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHJlc3VsdHMgPSBhZG9w
dENGKEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlvbnMoc2Nhbm5lci5nZXQoKSwgRERTY2Fu
bmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwKSk7CisgICAgYXV0byByZXN1bHRzID0gYWRv
cHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nh
bm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOwogCiAgICAgLy8gRmluZCB0aGUgRERS
ZXN1bHRSZWYgdGhhdCBpbnRlcnNlY3RzIHRoZSBoaXRUZXN0UmVzdWx0J3MgVmlzaWJsZVBvc2l0
aW9uLgogICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQgPSBudWxscHRyOwpAQCAtMTAwLDcgKzEw
Myw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24KICAgICB9CiAKICAgICBpZiAoIW1haW5SZXN1
bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbmlsOwogCiAgICAg
UmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gYWN0aW9uQ29udGV4dCA9IGFkb3B0TlMoW2FsbG9j
RERBY3Rpb25Db250ZXh0SW5zdGFuY2UoKSBpbml0XSk7CiAgICAgW2FjdGlvbkNvbnRleHQgc2V0
QWxsUmVzdWx0czpAWyAoX19icmlkZ2UgaWQpbWFpblJlc3VsdCBdXTsKQEAgLTExMiw5ICsxMTUs
OSBAQCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRp
b25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBt
YWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CiAgICAgZm9yIChjb25zdCBh
dXRvJiBxdWFkIDogcXVhZHMpCiAgICAgICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LnVuaXRl
KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkp
KTsKLSAgICAKKwogICAgIGRldGVjdGVkRGF0YVJhbmdlID0gbWFpblJlc3VsdFJhbmdlOwotICAg
IAorCiAgICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCA4Nzk3MjIwMjg0NjhmMDNl
MDJlYWU1OWI1NWEyOWEyM2RlY2U5MmVlLi5kNjQ4ZmQ3MGZjMzhmYzkyYzI0ZTUxNzg5MDQ3Y2Vm
NjI2M2ZhNTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9u
YXJ5TG9va3VwLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjY0LDEyICsyNjQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
c3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1
cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKKwogICAgIGlmICghUmV2
ZWFsTGlicmFyeSgpIHx8ICFSZXZlYWxDb3JlTGlicmFyeSgpIHx8ICFnZXRSVkl0ZW1DbGFzcygp
KQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICBhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UpCisKKyAgICBpZiAoIXNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAogICAgIC8vIFNpbmNlIHdlIGFscmVhZHkg
aGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVk
IG9wdGlvbnMuCkBAIC0yNzksMjAgKzI3OCwyMiBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4s
IE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwog
ICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBh
cmFncmFwaHMgb2YgdGV4dC4KICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCk7CiAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFn
cmFwaChzZWxlY3Rpb25FbmQpOworICAgIGlmIChwYXJhZ3JhcGhTdGFydC5pc051bGwoKSB8fCBw
YXJhZ3JhcGhFbmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
CisgICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFr
ZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0
aW9uU3RhcnQpIH0pOworICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0
ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRh
cnlQb2ludChzZWxlY3Rpb25FbmQpIH0pOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01h
a2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7
CiAKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwot
ICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1Jh
bmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVu
Z3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKLSAgICAKICAgICBS
ZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgcGFyYWdyYXBoRW5kKTsKICAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxs
Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwogICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9w
dE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0
ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVt
LmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAorCiAgICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9y
OjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwg
aGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCisKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotICAgIAorCiAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiB9CiAK
QEAgLTMyMiw0MyArMzIzLDQwIEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9u
YXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0CiAKICAgICBhdXRv
IHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE5TUmFuZ2Ugc2VsZWN0aW9u
UmFuZ2U7Ci0gICAgaW50IGhpdEluZGV4OworICAgIE5TVUludGVnZXIgaGl0SW5kZXg7CiAgICAg
UmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7CiAgICAgCiAgICAgaWYgKHNlbGVjdGlv
bi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsK
ICAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsK
ICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotICAg
ICAgICAKKwogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBz
dXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCiAgICAgICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKICAgICAgICAgYXV0byBwYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwogICAgICAgICAKLSAgICAg
ICAgYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgICAgICAKICAgICAgICAg
ZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhF
bmQpOwogICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG5pbCB9OwogCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFu
Z2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkp
LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2Vs
ZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdl
dCgpKTsKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3Vu
dCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2lu
dChzZWxlY3Rpb25TdGFydCkgfSksCisgICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rp
b25FbmQpIH0pKTsKKyAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91
bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikg
fSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2Nv
dW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsKICAgICAgICAgc2VsZWN0aW9uQWNjb3Vu
dGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7
CiAgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFy
dCgpOworCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNo
YXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KICAgICAgICAgZnVs
bENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJz
KHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKICAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFu
Z2UpCiAgICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAgICAgCisKICAg
ICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICAg
ICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hh
cmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKKyAgICAgICAg
aGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChmdWxsQ2hhcmFj
dGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikg
fSk7CiAgICAgfQotICAgIAorCiAgICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJWU2Vs
ZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6
QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0ZVNl
bGVjdGlvbjpuaWxdOwotICAgIAorCiAgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQo
KmZ1bGxDaGFyYWN0ZXJSYW5nZSk7CiAgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0
TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3Rl
ZFJhbmdlOnNlbGVjdGVkUmFuZ2VdKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRl
bS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKaW5kZXggOWMxYWU4ODg5NTFmYjNiYjI1NmVkN2Uw
OWUyNDE3NmJjOGQzYzM4OS4uYTJiODE4Mjg3N2IyOGFmMjljOGEwNjM5NTRkMzc0Y2Q1YWE1YTVk
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFu
ZElPUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFu
ZElPUy5jcHAKQEAgLTQ4LDkgKzQ4LDcgQEAgRGljdGF0aW9uQ29tbWFuZElPUzo6RGljdGF0aW9u
Q29tbWFuZElPUyhEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3RvcjxWZWN0b3I8U3RyaW4KIAogdm9p
ZCBEaWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KCkKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24g
aW5zZXJ0aW9uUG9zaXRpb24oc3RhcnRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0K
LSAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSAwOworICAgIENoYXJhY3RlckNvdW50IHJlc3Vs
dExlbmd0aCA9IDA7CiAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbnMgOiBtX2RpY3RhdGlv
blBocmFzZXMpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBmaXJzdEludGVycHJldGF0aW9uID0g
aW50ZXJwcmV0YXRpb25zWzBdOwogICAgICAgICByZXN1bHRMZW5ndGggKz0gZmlyc3RJbnRlcnBy
ZXRhdGlvbi5sZW5ndGgoKTsKQEAgLTYyLDIwICs2MCwyMyBAQCB2b2lkIERpY3RhdGlvbkNvbW1h
bmRJT1M6OmRvQXBwbHkoKQogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKTsKICAgICB9CiAKLSAgICBWaXNp
YmxlUG9zaXRpb24gYWZ0ZXJSZXN1bHRzKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVFbmQoKSk7
CisgICAgLy8gRklYTUU6IEFkZCB0aGUgcmVzdWx0IG1hcmtlciB1c2luZyBhIFBvc2l0aW9uIGNh
Y2hlZCBiZWZvcmUgcmVzdWx0cyBhcmUgaW5zZXJ0ZWQsIGluc3RlYWQgb2YgcmVseWluZyBvbiBj
aGFyYWN0ZXIgY291bnRzLgogCi0gICAgRWxlbWVudCogcm9vdCA9IGFmdGVyUmVzdWx0cy5yb290
RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IGVuZGluZ1NlbGVjdGlv
bigpLnZpc2libGVFbmQoKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZFBv
c2l0aW9uKTsKKyAgICBhdXRvKiByb290ID0gZW5kUG9zaXRpb24ucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOworICAgIGlmICghZW5kIHx8ICFyb290KQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBG
SVhNRTogQWRkIHRoZSByZXN1bHQgbWFya2VyIHVzaW5nIGEgUG9zaXRpb24gY2FjaGVkIGJlZm9y
ZSByZXN1bHRzIGFyZSBpbnNlcnRlZCwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIFRleHRJdGVyYXRv
cnMuCi0gICAgYXV0byByYW5nZVRvRW5kID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oKE5vZGUgKilyb290LCAwKSwgYWZ0ZXJSZXN1bHRzLmRl
ZXBFcXVpdmFsZW50KCkpOwotICAgIGludCBlbmRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgocmFuZ2VUb0VuZC5wdHIoKSwgdHJ1ZSk7Ci0gICAgaW50IHN0YXJ0SW5kZXggPSBlbmRJ
bmRleCAtIHJlc3VsdExlbmd0aDsKKyAgICBhdXRvIGVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50
KHsgeyAqcm9vdCwgMCB9LCBXVEZNb3ZlKCplbmQpIH0pOworICAgIGlmIChlbmRPZmZzZXQgPCBy
ZXN1bHRMZW5ndGgpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdGFydEluZGV4ID49IDAp
IHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSwgc3Rh
cnRJbmRleCwgZW5kSW5kZXgsIHRydWUpOwotICAgICAgICBBU1NFUlQocmVzdWx0UmFuZ2UpOyAv
LyBGSVhNRTogV2hhdCBndWFyYW50ZWVzIHRoaXM/Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcigqcmVzdWx0UmFuZ2UsIG1fbWV0YWRhdGEpOwot
ICAgIH0KKyAgICBhdXRvIHJlc3VsdFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2Nh
dGlvbkFuZExlbmd0aChyb290LCBlbmRPZmZzZXQgLSByZXN1bHRMZW5ndGgsIGVuZE9mZnNldCk7
CisgICAgaWYgKCFyZXN1bHRSYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKCpyZXN1bHRSYW5nZSwgbV9tZXRh
ZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IDE2MTU5MDdk
NjkxMTBjNjg1Zjc3MzA3MzE4YmIyYTU1NzE5NjhhNGUuLjUxMzViOTA2ZGVlMThlMDE3NzllYzYx
MTQ3NDMxYzc5NWUzOGE1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDEwICs4OSwxMiBAQCBzdGQ6OnR1
cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUZvclNlbGVjdGlvbihjbwogICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2Ug
dGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KICAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CiAgICAgYXV0byBwYXJhZ3Jh
cGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgIGlmIChwYXJhZ3JhcGhT
dGFydC5pc051bGwoKSB8fCBwYXJhZ3JhcGhFbmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OwogCi0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9u
U3RhcnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5n
ZXQoKSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFy
dCk7CisgICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAq
bWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2Vs
ZWN0aW9uU3RhcnQpIH0pOworICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFy
YWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91
bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH0pOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBO
U01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3Vu
dCk7CiAKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CiAgICAgdG9rZW5SYW5nZShw
bGFpblRleHQobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpLmdldCgpKSwg
cmFuZ2VUb1Bhc3MsICZvcHRpb25zKTsKQEAgLTEzMyw3ICsxMzUsMTIgQEAgc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQKICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgcmV0dXJu
IHsgbnVsbHB0ciwgbmlsIH07CiAKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFu
Z2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSksIDApOworICAgIGF1dG8gZnVsbENo
YXJhY3RlclN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpOworICAgIGF1dG8gcG9zaXRpb25Cb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBv
aW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJTdGFydCB8fCAhcG9zaXRpb25C
b3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBOU1Jhbmdl
IHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQoeyAqZnVsbENoYXJhY3Rl
clN0YXJ0LCAqcG9zaXRpb25Cb3VuZGFyeSB9KSwgMCk7CiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRp
b25zID0gbmlsOwogICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSB0b2tlblJhbmdlKHBsYWlu
VGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpLCByYW5nZVRvUGFzcywgJm9wdGlvbnMpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZWRlMGI0YTAwOGFjOTk5YzA0
YTRjYzY4ZjdhZWQ5YWEyZGI2Y2VhZi4uOTg2N2QwNjNhNjdiNDBjMzdkYmI0YmUxNGM3MjFkMDY1
ODRjYWVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjU0LDEwICs2
NTQsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFRyaXBsZUNs
aWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFIKICAgICByZXR1cm4gdXBkYXRlU2VsZWN0
aW9uRm9yTW91c2VEb3duRGlzcGF0Y2hpbmdTZWxlY3RTdGFydCh0YXJnZXROb2RlLCBleHBhbmRT
ZWxlY3Rpb25Ub1Jlc3BlY3RTZWxlY3RPbk1vdXNlRG93bigqdGFyZ2V0Tm9kZSwgbmV3U2VsZWN0
aW9uKSwgUGFyYWdyYXBoR3JhbnVsYXJpdHkpOwogfQogCi1zdGF0aWMgaW50IHRleHREaXN0YW5j
ZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCitzdGF0aWMgQ2hh
cmFjdGVyQ291bnQgdGV4dERpc3RhbmNlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzdGFydC5hbmNo
b3JOb2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwotICAgIHJldHVybiBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICBhdXRvIHN0YXJ0Qm91bmRh
cnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7CisgICAgYXV0byBlbmRCb3VuZGFyeSA9IG1h
a2VCb3VuZGFyeVBvaW50KGVuZCk7CisgICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8ICFlbmRCb3Vu
ZGFyeSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnN0
YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9LCB0cnVlKTsKIH0KIAogYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
RWRpdGluZ1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAK
aW5kZXggMWFmYWU1ZWJiZjVlNjNkOWJlZGYzMDM5ZGY0NDUxYzliNTUzYTYzOC4uYjg5OTMzZmZh
MWJmMjg0M2MyNmZkYmQ2NmQyOTI2ZWQwMGM1ZjZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0
aW5nUmFuZ2UuY3BwCkBAIC01OCwxOCArNTgsMTcgQEAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBF
ZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBFZGl0aW4K
IAogICAgIEFTU0VSVChlZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPT0gRWRpdGluZ1JhbmdlSXNS
ZWxhdGl2ZVRvOjpQYXJhZ3JhcGgpOwogCi0gICAgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgIGF1dG8mIHNlbGVjdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwotICAg
IGlmICghcGFyYWdyYXBoUmFuZ2UpCisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSk7Cisg
ICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0
byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOwogCi0gICAgYXV0byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhSYW5nZS5nZXQoKS0+c3Rh
cnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwotICAgIGludCBwYXJhZ3JhcGhT
dGFydEluZGV4ID0gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChXZWJDb3JlOjpS
YW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50KCksICZyb290Tm9kZSwgMCwgJnBhcmFncmFw
aFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRPZmZzZXQoKSku
cHRyKCkpOwotICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0
aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCArIHN0YXRpY19jYXN0
PGludD4ocmFuZ2UubG9jYXRpb24pLCBsZW5ndGgpOworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnRJ
bmRleCA9IFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KHsgeyByb290Tm9kZSwgMCB9LCAqcGFyYWdy
YXBoU3RhcnQgfSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9t
TG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3JhcGhTdGFydEluZGV4ICsgcmFuZ2Uu
bG9jYXRpb24sIGxlbmd0aCk7CiB9CiAKIEVkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZyb21S
YW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJhbmdlKiByYW5nZSwg
RWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAKaW5kZXggOWUyNDc1OGNkOTJjZjc1MDg2ZmNjMjE4MjRiMzVjODgwNzEy
MzI3My4uNTJiYjdjNzYzZDAwYjAwM2Q4MWNkMGU4YjE5Zjk4OWZjYWIxYmEzMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAKQEAgLTY1LDggKzY1LDYgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVGV4dENoZWNraW5nUmVxdWVzdElEKCkKIHsK
QEAgLTM2MSw2ICszNTksNyBAQCBXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlIFdlYkVk
aXRvckNsaWVudDo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKGNvbnN0IFN0cgogfQogCiAjaWYgIVBM
QVRGT1JNKENPQ09BKSAmJiAhVVNFKEdMSUIpCisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewogICAgIGlmIChtX3BhZ2Ut
PmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KGV2ZW50KSkKQEAgLTM3MSw2ICszNzAsNyBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZl
bnQmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisKICNlbmRpZiAvLyAhUExBVEZPUk0o
Q09DT0EpICYmICFVU0UoR0xJQikKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQpAQCAtNDIwLDYgKzQyMCw3IEBAIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBlbGVtZW50
KQogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisKIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKQEAgLTQyOSw2ICs0MzAsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6c3ViRnJhbWVTY3Jv
bGxQb3NpdGlvbkNoYW5nZWQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisKICNlbmRp
ZgogCiBzdGF0aWMgYm9vbCBnZXRBY3Rpb25UeXBlRm9yS2V5RXZlbnQoS2V5Ym9hcmRFdmVudCog
ZXZlbnQsIFdLSW5wdXRGaWVsZEFjdGlvblR5cGUmIHR5cGUpCkBAIC01NDksMjAgKzU1MSwyNSBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldyB0
ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3JhbQogICAgICpiYWRHcmFtbWFyTGVuZ3RoID0gcmVzdWx0
TGVuZ3RoOwogfQogCi1zdGF0aWMgaW50MzJfdCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2Vs
ZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCitzdGF0aWMg
Q2hhcmFjdGVyQ291bnQgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewotICAgIFZpc2libGVQb3NpdGlv
biBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rp
b25TdGFydCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdl
KHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworICAgIGF1dG8gc2VsZWN0
aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2Vs
ZWN0aW9uU3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsK
KyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCkpOworICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8
fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjaGFyYWN0
ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CiB9
CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorCiBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcg
c3RyaW5nVmlldywgT3B0aW9uU2V0PFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5n
VHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICBtX3BhZ2UtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKHN0cmluZ1ZpZXcu
dG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzLCBpbnNlcnRpb25Qb2ludEZy
b21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKICAgICByZXR1cm4g
cmVzdWx0czsKIH0KKwogI2VuZGlmCiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBj
b25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQpAQCAtNjE2LDE1ICs2MjMsMTMgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdGUoRWxlbWVudCogZWxlbWVu
dCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKCkKIHsK
LSNpZiBQTEFURk9STShHVEspCi0jaWYgUExBVEZPUk0oWDExKQorI2lmIFBMQVRGT1JNKEdUSykg
JiYgUExBVEZPUk0oWDExKQogICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXko
KS50eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpYMTEpCiAgICAgICAgIHJldHVybiB0
cnVlOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKKyNpZiBQTEFURk9STShHVEspICYm
IFBMQVRGT1JNKFdBWUxBTkQpCiAgICAgaWYgKFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxh
eSgpLnR5cGUoKSA9PSBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OldheWxhbmQpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotI2VuZGlmCiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDYzYzc1NzdhNWMw
MDU3Y2VjOGJmODVmMzM1MGFkOTFkZTE2ZTU4ZTUuLjE0OWYxYWQ2YzMxNzRlNzc4MWM1YTQ2MGU5
YjA4MTE2NzU4Y2M0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCkBAIC01NDM0LDYgKzU0MzQsNyBAQCB2b2lkIFdlYlBhZ2U6OmNvbmZpcm1Db21w
b3NpdGlvbkFzeW5jKCkKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIAogI2lmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oV1BFKQorCiBzdGF0aWMgRnJhbWUqIHRhcmdldEZyYW1lRm9yRWRp
dGluZyhXZWJQYWdlJiBwYWdlKQogewogICAgIEZyYW1lJiB0YXJnZXRGcmFtZSA9IHBhZ2UuY29y
ZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CkBAIC01NDcz
LDcgKzU0NzQsNyBAQCB2b2lkIFdlYlBhZ2U6OmRlbGV0ZVN1cnJvdW5kaW5nKGludDY0X3Qgb2Zm
c2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudCkKIAogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQg
PSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAgYXV0byBzdXJyb3VuZGluZ1JhbmdlID0g
bWFrZVJhbmdlKHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9uU3RhcnQpLCBzZWxlY3Rp
b25TdGFydCk7Ci0gICAgYXV0byBjdXJzb3JQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoc3Vycm91bmRpbmdSYW5nZS5nZXQoKSk7CisgICAgYXV0byBjdXJzb3JQb3NpdGlvbiA9
IFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KCpzdXJyb3VuZGluZ1JhbmdlKTsKICAgICBhdXRvJiBy
b290Tm9kZSA9IHN1cnJvdW5kaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkudHJlZVNjb3BlKCku
cm9vdE5vZGUoKTsKICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIGN1cnNvclBvc2l0aW9uICsgb2Zmc2V0
LCBjaGFyYWN0ZXJDb3VudCk7CiAgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKQEAgLTU0ODUsNiAr
NTQ4Niw3IEBAIHZvaWQgV2ViUGFnZTo6ZGVsZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZzZXQs
IHVuc2lnbmVkIGNoYXJhY3RlckNvdW50KQogICAgIHRhcmdldEZyYW1lLT5lZGl0b3IoKS5zZXRJ
Z25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKICAgICBzZW5kRWRpdG9yU3RhdGVVcGRhdGUo
KTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgV2ViUGFnZTo6ZGlkQXBwbHlTdHlsZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3Bw
CmluZGV4IDNhN2JhYTZjMTAyZGQ3Y2Y2NjVlYzM2YmI0YjFmYmMxOGIyMjBlY2EuLmUyYWMyM2Fl
NTU3ZDdhMTdlOTY3YzAzYmI4MzAxYTc4N2Q3Y2Q0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCkBAIC0xMTYsMTIg
KzExNiwxMiBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1l
LCBFZGl0b3JTdGF0ZSYgcmVzdWx0LCBJbmNsdWRlUG9zdAogICAgICAgICAgICAgc3Vycm91bmRp
bmdSYW5nZS0+c2V0RW5kKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CiAgICAg
ICAgICAgICBjbG9uZWRSYW5nZS0+c2V0U3RhcnQoY29tcG9zaXRpb25SYW5nZS0+ZW5kUG9zaXRp
b24oKSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHQgPSBw
bGFpblRleHQoc3Vycm91bmRpbmdSYW5nZS5nZXQoKSkgKyBwbGFpblRleHQoY2xvbmVkUmFuZ2Uu
cHRyKCkpOwotICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vy
c29yUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN1cnJvdW5kaW5nUmFuZ2Uu
Z2V0KCkpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vy
c29yUG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCgqc3Vycm91bmRpbmdSYW5nZSk7CiAgICAgICAg
ICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxlY3Rpb25Qb3NpdGlvbiA9
IHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0
ID0gcGxhaW5UZXh0KHN1cnJvdW5kaW5nUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgcG9zdExh
eW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzZWxlY3Rpb25TdGFydCku
Z2V0KCkpOwotICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0U2Vs
ZWN0aW9uUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzdXJy
b3VuZGluZ1N0YXJ0LCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKS5nZXQoKSk7CisgICAgICAgICAg
ICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9IGNoYXJh
Y3RlckNvdW50KCptYWtlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgc2VsZWN0aW9uU3RhcnQpKTsK
KyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBv
c2l0aW9uID0gY2hhcmFjdGVyQ291bnQoKm1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzZWxl
Y3Rpb24udmlzaWJsZUVuZCgpKSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDMxNTJj
MzdmNGY0ZGNmMmZkMTA1YTY0NGZkMWUwNzBjOTY4MTViZjEuLmY0Zjg0OGYzNzhhMzRkYTNmN2Vi
MmVmOGFhYTlmMjBlMjU2OTYxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xOTg5LDEzICsxOTg5LDE2IEBAIHZvaWQg
V2ViUGFnZTo6c3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wgc2hvdWxkU3RvcmUp
CiAgICAgfQogfQogCi1zdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlTmVhclBvc2l0
aW9uTWF0Y2hlc1RleHQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3Ry
aW5nJiBtYXRjaFRleHQsIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UpCitzdGF0aWMgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hlc1RleHQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBtYXRjaFRleHQsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKLSAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQor
ICAgIGF1dG8gbGl2ZVJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIWxp
dmVSYW5nZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBhdXRvIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVudCgpLCBzZWxlY3Rpb25S
YW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICB1bnNpZ25lZCB0YXJnZXRPZmZzZXQgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVlKTsKLSAgICByZXR1cm4gZmluZENs
b3Nlc3RQbGFpblRleHQoKnNlbGVjdGlvblJhbmdlLCBtYXRjaFRleHQsIHsgfSwgdGFyZ2V0T2Zm
c2V0KTsKKyAgICBTaW1wbGVSYW5nZSByYW5nZSB7ICpsaXZlUmFuZ2UgfTsKKyAgICBhdXRvIGJv
dW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgaWYgKCFib3Vu
ZGFyeVBvaW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBmaW5k
Q2xvc2VzdFBsYWluVGV4dChyYW5nZSwgbWF0Y2hUZXh0LCB7IH0sIGNoYXJhY3RlckNvdW50KHsg
cmFuZ2Uuc3RhcnQsICpib3VuZGFyeVBvaW50IH0sIHRydWUpKTsKIH0KIAogdm9pZCBXZWJQYWdl
OjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCBvZmZzZXQsIGNvbnN0
IFN0cmluZyYgdGV4dCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtMjAyMiw3ICsyMDI1LDcg
QEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJf
dCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGUKIAogICAgIGlmIChwbGFpblRleHRGb3JEaXNwbGF5
KHJhbmdlLnB0cigpKSAhPSB0ZXh0KSB7CiAgICAgICAgIC8vIFRyeSB0byBzZWFyY2ggZm9yIGEg
cmFuZ2Ugd2hpY2ggaXMgdGhlIGNsb3Nlc3QgdG8gdGhlIHBvc2l0aW9uIHdpdGhpbiB0aGUgc2Vs
ZWN0aW9uIHJhbmdlIHRoYXQgbWF0Y2hlcyB0aGUgcGFzc2VkIGluIHRleHQuCi0gICAgICAgIGlm
IChhdXRvIHdvcmRSYW5nZSA9IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hlc1RleHQoc3RhcnRQb3Np
dGlvbiwgdGV4dCwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpKSB7CisgICAgICAgIGlm
IChhdXRvIHdvcmRSYW5nZSA9IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hlc1RleHQoc3RhcnRQb3Np
dGlvbiwgdGV4dCwgc2VsZWN0aW9uKSkgewogICAgICAgICAgICAgaWYgKCF3b3JkUmFuZ2UtPmNv
bGxhcHNlZCgpKQogICAgICAgICAgICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKCp3b3Jk
UmFuZ2UpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDNhMGRjNDUyMDE3NmM0Y2IzOWQxOGNkNTEwMjJh
MDRlYjA3Y2Q3ODIuLjJjNTg5NmRmNzg1NzU4NjYxMGQyYTNhNjU1NmQ1ODE5Y2Y2ZmZlOTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCkBAIC0xNDAsMTkgKzE0MCwyMiBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtRWRpdG9yU3Rh
dGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0LCBJbmNsdWRlUG9zdAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0g
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rl
ZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBwb3N0TGF5b3V0RGF0YSA9IHJl
c3VsdC5wb3N0TGF5b3V0RGF0YSgpOwogICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFy
YWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsK
KyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzZWxl
Y3Rpb25TdGFydCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtYWtlQm91bmRhcnlQb2ludChz
ZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJv
dW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkpOworCisgICAgaWYg
KCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IHx8ICFzZWxlY3Rpb25FbmQgfHwgIXBhcmFncmFwaFN0
YXJ0KQorICAgICAgICByZXR1cm47CiAKLSAgICBwb3N0TGF5b3V0RGF0YS5jYW5kaWRhdGVSZXF1
ZXN0U3RhcnRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBh
cmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAgIHBvc3RMYXlvdXREYXRh
LnNlbGVjdGVkVGV4dExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdl
KHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSAtIHBvc3RMYXlvdXREYXRhLmNh
bmRpZGF0ZVJlcXVlc3RTdGFydFBvc2l0aW9uOworICAgIHBvc3RMYXlvdXREYXRhLmNhbmRpZGF0
ZVJlcXVlc3RTdGFydFBvc2l0aW9uID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQs
ICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IH0pOworICAgIHBvc3RMYXlvdXREYXRhLnNlbGVjdGVk
VGV4dExlbmd0aCA9IGNoYXJhY3RlckNvdW50KHsgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnksICpz
ZWxlY3Rpb25FbmQgfSk7CiAgICAgcG9zdExheW91dERhdGEucGFyYWdyYXBoQ29udGV4dEZvckNh
bmRpZGF0ZVJlcXVlc3QgPSBwbGFpblRleHQoZnJhbWUuZWRpdG9yKCkuY29udGV4dFJhbmdlRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpLmdldCgpKTsKICAgICBwb3N0TGF5b3V0RGF0YS5zdHJpbmdGb3JD
YW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUuZWRpdG9yKCkuc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVz
dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggN2M1MDZmYzZhN2EzMWJmMzc3Y2E2NWRjNjUx
MDQ0ZjQxY2Y5ZGYxMC4uY2E0NzkzMTA1NGI4MDI2MjY4NzNlM2Y1M2ZiNWVlMzA1NGU5ODUxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMTAzMSwxNiArMTAzMSwxOSBAQCBzdGF0aWMgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOU0FycmF5ICppbmNvbWluZ1Jlc3VsdHMsIE9wdGlv
blNldDxUZXh0QwogICAgIHJldHVybiByZXN1bHRzOwogfQogCi1zdGF0aWMgaW50IGluc2VydGlv
blBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbikKK3N0YXRpYyBOU1VJbnRlZ2VyIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRT
ZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewotICAgIFZpc2li
bGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFw
aChzZWxlY3Rpb25TdGFydCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOworICAgIGF1
dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBz
ZWxlY3Rpb25TdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
OworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFy
YWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7CisgICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5
IHx8ICFwYXJhZ3JhcGhTdGFydCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNoYXJh
Y3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB9KTsK
IH0KIAogVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1Rl
eHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5
cGU+IGNvcmVDaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2Vs
ZWN0aW9uKQogewotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5n
SW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6
aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKV0gfTsK
KyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBv
aW50S2V5IDogQChpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxl
Y3Rpb24pKSB9OwogICAgIHJldHVybiBjb3JlKFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXSBjaGVja1N0cmluZzpzdHJpbmcuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygp
LmdldCgpIHJhbmdlOk5TTWFrZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgoKSkgdHlwZXM6KG5zVGV4
dENoZWNraW5nVHlwZXMoY29yZUNoZWNraW5nVHlwZXMpIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0
aG9ncmFwaHkpIG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hl
Y2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6TlVMTCB3b3JkQ291bnQ6TlVMTF0sIGNvcmVD
aGVja2luZ1R5cGVzKTsKIH0KIApAQCAtMTA4Myw3ICsxMDg2LDcgQEAgdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5n
JiBjb250ZXgKICAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBuaWw7CiAgICAgTlNPcnRob2dyYXBo
eSogb3J0aG9ncmFwaHkgPSBuaWw7CiAgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNT
cGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKLSAgICBOU0RpY3Rpb25hcnkgKm9wdGlv
bnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5IDogIFtOU051bWJlciBudW1i
ZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
Y3VycmVudFNlbGVjdGlvbildIH07CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gQHsgTlNU
ZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6IEAoaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVu
dFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKSkgfTsKICAgICBpZiAoY29udGV4dC5sZW5ndGgo
KSkgewogICAgICAgICBbY2hlY2tlciBjaGVja1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJh
bmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIHR5cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3Jh
cGh5IG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRv
Y3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6Jm9ydGhvZ3JhcGh5IHdvcmRDb3VudDowXTsKICAgICAg
ICAgbGFuZ3VhZ2UgPSBbY2hlY2tlciBsYW5ndWFnZUZvcldvcmRSYW5nZTpOU01ha2VSYW5nZSgw
LCBjb250ZXh0Lmxlbmd0aCgpKSBpblN0cmluZzpjb250ZXh0IG9ydGhvZ3JhcGh5Om9ydGhvZ3Jh
cGh5XTsKQEAgLTExMTYsMjQgKzExMTksMjAgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlcXVl
c3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGUKICAg
ICBpZiAoIVttX3dlYlZpZXcgc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXNdKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisgICAgaWYgKCFzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoW21fd2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOworCisgICAg
YXV0byogZnJhbWUgPSBjb3JlKFttX3dlYlZpZXcgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2xhc3RTZWxlY3Rpb25Gb3JS
ZXF1ZXN0ZWRDYW5kaWRhdGVzID0gc2VsZWN0aW9uOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3Np
dGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotICAgIFZpc2libGVQ
b3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQp
OwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxl
Y3Rpb25FbmQpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFj
dGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25T
dGFydCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOworICAgIGF1dG8g
c2VsZWN0aW9uTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2Vs
ZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uLnZpc2libGVFbmQoKSkg
fSk7CiAKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkp
OwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAgICBt
X3JhbmdlRm9yQ2FuZGlkYXRlcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQs
IGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7CisgICAgbV9y
YW5nZUZvckNhbmRpZGF0ZXMgPSBOU01ha2VSYW5nZShzZWxlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoLCBzZWxlY3Rpb25MZW5ndGgpOwogICAgIG1fcGFyYWdyYXBoQ29udGV4dEZvckNhbmRp
ZGF0ZVJlcXVlc3QgPSBwbGFpblRleHQoZnJhbWUtPmVkaXRvcigpLmNvbnRleHRSYW5nZUZvckNh
bmRpZGF0ZVJlcXVlc3QoKS5nZXQoKSk7CiAKICAgICBOU1RleHRDaGVja2luZ1R5cGVzIGNoZWNr
aW5nVHlwZXMgPSBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IE5TVGV4dENoZWNraW5nVHlw
ZVJlcGxhY2VtZW50IHwgTlNUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGJjM2JlYmRmMjYyZmE0ZWNm
YjAxODc4YjNjMmIwYzU1YzNlYTkwMTUuLmU0YzZhYTAwNWI5ZjlkODk5ZjgxNmEzYWRjMTQ5ZjUx
NGZiMWEzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQpAQCAtODM1LDI0ICs4MzUsMTkgQEAgLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVy
dFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzoKICAgICAgICAg
Ly8gVGhhdCBmaXRzIHdpdGggQXBwS2l0J3MgaWRlYSBvZiBhbiBpbnB1dCBjb250ZXh0LgogICAg
ICAgICBhdXRvKiBlbGVtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVu
dCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25B
bmRMZW5ndGgoZWxlbWVudCwgbnNyYW5nZS5sb2NhdGlvbiwgbnNyYW5nZS5sZW5ndGgpOwogICAg
IH0KIAogICAgIEFTU0VSVChyYW5nZUlzUmVsYXRpdmVUbyA9PSBXZWJSYW5nZUlzUmVsYXRpdmVU
bzo6UGFyYWdyYXBoKTsKIAotICAgIGNvbnN0IGF1dG8mIHNlbGVjdGlvbiA9IF9wcml2YXRlLT5j
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
IGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5k
YXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSkpOworICAgIGlmICghcGFyYWdyYXBoU3RhcnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBo
U3RhcnQtPmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKIAotICAgIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRPZlBhcmFncmFw
aChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKLSAg
ICBpZiAoIXBhcmFncmFwaFJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBoUmFuZ2UuZ2V0KCktPnN0YXJ0Q29udGFpbmVyKCkudHJl
ZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBpbnQgcGFyYWdyYXBoU3RhcnRJbmRleCA9IFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZShyb290
Tm9kZS5kb2N1bWVudCgpLCAmcm9vdE5vZGUsIDAsICZwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250
YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpLnB0cigpKTsKLSAgICByZXR1
cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9v
dE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXggKyBzdGF0aWNfY2FzdDxpbnQ+KG5zcmFuZ2UubG9j
YXRpb24pLCBuc3JhbmdlLmxlbmd0aCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydEluZGV4ID0g
V2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQoeyB7IHJvb3ROb2RlLCAwIH0sICpwYXJhZ3JhcGhTdGFy
dCB9KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlv
bkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXggKyBuc3JhbmdlLmxvY2F0
aW9uLCBuc3JhbmdlLmxlbmd0aCk7CiB9CiAKIC0gKERPTVJhbmdlICopX2NvbnZlcnROU1Jhbmdl
VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2Q0MDMzYmUxZmY3YTE0M2RiMzRk
ZGNiMWU4YTI1MGE4ZTBiOTE1My4uNGEzNzgyNmI1NGM3NTE5YzZhMGY5YjlkOWNlNTEzZjNjMzc3
YmZhOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAzLTIxICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9tYWMvc3BlbGxpbmcvYXV0b2NvcnJlY3Rp
b24tY29udHJhY3Rpb24tZXhwZWN0ZWQudHh0OiBVcGRhdGUgdGhlc2UgZXhwZWN0ZWQKKyAgICAg
ICAgcmVzdWx0cyBiZWNhdXNlIG9mIGNoYW5nZXMgdG8gZGVsZWdhdGUgY2FsbGJhY2tzLiBUaGUg
dGVzdCBpcyBzdGlsbCBwYXNzaW5nIGFuZCB0aGlzCisgICAgICAgIGNoYW5nZSBpcyBvbmx5IGlu
IHRoZSBsZWdhY3kgV2ViS2l0IGNhc2UgKHRoZXJlIGlzIGEgc2VwYXJhdGUgcmVzdWx0IGZvciBt
b2Rlcm4gV2ViS2l0KS4KKyAgICAgICAgVGhpcyBzZWVtcyB0byBiZSBhIHByb2dyZXNzaW9uLCBu
b3QgZXZpZGVuY2Ugb2YgYSBidWcuCisKIDIwMjAtMDMtMjEgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBBbiBhbmltYXRlZCBQTkcgcGxheXMg
dGhlIGZyYW1lcyBvbmUgdGltZSBtb3JlIHRoYW4gdGhlIGltYWdlIGxvb3BDb3VudApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9tYWMvc3BlbGxpbmcvYXV0b2NvcnJlY3Rpb24tY29u
dHJhY3Rpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9tYWMvc3BlbGxpbmcv
YXV0b2NvcnJlY3Rpb24tY29udHJhY3Rpb24tZXhwZWN0ZWQudHh0CmluZGV4IDYzODFlMjYzZGJk
NGRhYzQwY2FlOTFlY2JlMmYxZmZiY2U5YTMxOWMuLmFiZjNkNTUwYTA4N2RhYTkxYjA1YzkyOGY3
NDgwODg5NzQwY2VmYmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvbWFjL3NwZWxs
aW5nL2F1dG9jb3JyZWN0aW9uLWNvbnRyYWN0aW9uLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL21hYy9zcGVsbGluZy9hdXRvY29ycmVjdGlvbi1jb250cmFjdGlvbi1leHBl
Y3RlZC50eHQKQEAgLTE1MSwyMSArMTUxLDggQEAgRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gNiBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gNyBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZp
Y2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFu
Z2VOb3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxs
U2VsZWN0aW5nOkZBTFNFCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OndvdWxk
IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQKLUVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA3
IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCi1F
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20g
NyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQot
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9m
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKLUVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdl
Tm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9u
OldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlm
aWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpy
YW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9E
T01SYW5nZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rp
bmc6RkFMU0UKLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogd2Vi
Vmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVH
QVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gNyBvZiAjdGV4dCA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgI3RleHQgPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gOCBv
ZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDggb2YgI3Rl
eHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxF
R0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDYgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDgg
b2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA4IG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxl
Y3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3
RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxl
Y3RlZERPTVJhbmdlOnJhbmdlIGZyb20gOCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gOSBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDkgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bSBzdGlsbFNlbGVjdGluZzpGQUxTRQpAQCAtMTg2LDYgKzE3MywxOSBAQCBFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxMyBv
ZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEzIG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5n
ZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
dG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQog
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxNCBvZiAjdGV4dCA+IERJViA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNo
b3VsZEluc2VydFRleHQ6d291bGQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGdpdmVuQWN0aW9uOldlYlZpZXdJ
bnNlcnRBY3Rpb25UeXBlZAorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBz
dGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxl
Y3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVk
RE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3Vt
ZW50IHRvIDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5n
ZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFM
U0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0Rp
ZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmlj
YXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFu
Z2UgZnJvbSAxMyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDEzIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9E
T01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVj
dGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpX
ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3
ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVM
RUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxNCBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDE0IG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9t
IDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMCBvZiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9u
CiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394230</attachid>
            <date>2020-03-22 14:14:27 -0700</date>
            <delta_ts>2020-03-22 14:18:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209207-20200322141426.patch</filename>
            <type>text/plain</type>
            <size>85961</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjVmMjVlYzRhZDljMzBk
MGNiMmM3MjIyNmYxNjkyYzBlNDUxOWQxNi4uOGZmZDJiNjFhNGM0NTNlNjhiZTNiNTI1ZDEyY2Nj
ZjZmYzhiNTI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDIwLTAzLTE3ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVuYW1lZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoIHRvIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJh
bmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChX
ZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZl
cnRUb05TUmFuZ2U6XSk6IERpdHRvLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IEV4
cG9ydCBhbm90aGVyIGNvbnN0cnVjdG9yLgorCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSk6CisgICAgICAgIFVzZSBjaGFy
YWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUpOiBEaXR0
by4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6IERpdHRvLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbmRleEZv
clZpc2libGVQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6cmFu
Z2VMZW5ndGggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1Bh
cmFncmFwaDo6b2Zmc2V0VG8gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
aGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdTdGFydCBjb25zdCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0VuZCBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0xlbmd0
aCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBo
OjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRG
aXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCBjb25zdCk6IERpdHRvLgorCisgICAg
ICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0
ZXJDb3VudCk6IExpa2UgdGhlIGJhb3ZlIGJ1dCB0aGUgYXJndW1lbnQgaXMgU2ltcGxlUmFuZ2UK
KyAgICAgICAgYW5kIHJldHVybiBpcyBDaGFyYWN0ZXJDb3VudC4gRXZlbiB0aG91Z2ggZWFjaCBp
bmRpdmlkdWFsIG5vZGUgaXMgbGltaXRlZAorICAgICAgICB0byAzMi1iaXQgc2l6ZSwgcmFuZ2Vz
IGNvdmVyaW5nIG11bHRpcGxlIG5vZGVzIGNvdWxkIGhhdmUgYSBjb3VudCBvZgorICAgICAgICBj
aGFyYWN0ZXJzIHRoYXQgZXhjZWVkcyAzMiBiaXRzLCBzbyBDaGFyYWN0ZXJDb3VudCBpcyBzaXpl
X3QuCisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3Ro
RnJvbVJhbmdlKTogVXNlIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogZWRpdGluZy9UZXh0
SXRlcmF0b3IuaDogQWRkZWQgY2hhcmFjdGVyQ291bnQgZnVuY3Rpb24sCisgICAgICAgIENoYXJh
Y3RlckNvdW50IGFuZCBDaGFyYWN0ZXJSYW5nZSB0eXBlcy4gUmVtb3ZlZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoLgorICAgICAgICBBZGRlZCBGSVhNRSBjb21tZW50cyBhYm91dCB0aGUgbmV4
dCBzdGVwcy4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VCb3VuZGFyeVBvaW50KTogQWRkZWQuCisgICAgICAgICogZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uaDogQWRkZWQgbWFrZUJvdW5kYXJ5UG9pbnQuIEFsc28gcmVtb3Zl
ZAorICAgICAgICBleHRyYW5lb3VzIGZvcndhcmQgZGVjbGFyYXRpb25zIGFuZCBtb3ZlZCBzb21l
IGZ1bmN0aW9uIGJvZGllcyBvdXQgb2YgdGhlCisgICAgICAgIGNsYXNzIGRlZmluaXRpb24uCisK
KyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpk
aXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIHB0cmRpZmZf
dC4KKyAgICAgICAgVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJs
ZVVuaXRzLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVjdEl0ZW1BdFBvc2l0
aW9uV2l0aFJhbmdlKTogVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAqIGVkaXRpbmcvY29j
b2EvRGljdGlvbmFyeUxvb2t1cC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rpb25hcnlMb29r
dXA6OnJhbmdlRm9yU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9u
YXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRp
bmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0
aW9uQ29tbWFuZElPUzo6ZG9BcHBseSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvbWFjL0Rp
Y3Rpb25hcnlMb29rdXBMZWdhY3kubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdl
L0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0RGlzdGFuY2UpOiBEaXR0
by4KKwogMjAyMC0wMy0yMiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtMRkNdIEludHJvZHVjZSBJbml0aWFsQ29udGFpbmluZ0JveCBjbGFzcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCAxMjljNzBmZmRjY2JjMmFlYWQ0NTViN2E5Yzk0ZmExNjdjZDY3NWIyLi42NDRmOTZhODM4MDI0
NzNhNjhlZjY0MjZiYzEzOWY1ODFiMjM0MWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisy
MDIwLTAzLTE3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFu
Z2UgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVk
L0VkaXRpbmdSYW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRpbmdSYW5nZTo6dG9SYW5n
ZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Omluc2VydGlvblBvaW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24pOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvCisgICAgICAgIENo
YXJhY3RlckNvdW50IGFuZCB1c2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChXZWJLaXQ6Oldl
YkVkaXRvckNsaWVudDo6c3VwcG9ydHNHbG9iYWxTZWxlY3Rpb24pOiBUd2Vha2VkICNpZi4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OnRhcmdldEZyYW1lRm9yRWRpdGluZyk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OnJh
bmdlTmVhclBvc2l0aW9uTWF0Y2hlc1RleHQpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBs
YXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBEaXR0by4KKwogMjAyMC0wMy0yMiAgV2Vuc29uIEhz
aWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBBZG9wdCAtW1VJV2luZG93
U2NlbmUgaW50ZXJmYWNlT3JpZW50YXRpb25dIHdoZW4gZGV0ZXJtaW5pbmcgZGV2aWNlIG9yaWVu
dGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggN2FhOWJkZDRmODM2YTkyMDc1
MjcxMjI0MGRjZTdlMDU5YzA2NWVjYi4uMjZiNzQxZDUyMzIwZGZiNWNkOGFmNDBhZmZiYTM2Y2Q2
ZThjODA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDIwLTAzLTE3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFu
Z2UgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoaW5zZXJ0aW9uUG9pbnRGcm9t
Q3VycmVudFNlbGVjdGlvbik6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvRE9N
UmFuZ2U6cmFuZ2VJc1JlbGF0aXZlVG86XSk6IERpdHRvLgorCiAyMDIwLTAzLTIwICBKZXIgTm9i
bGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSBtZWRpYSBjYWNoZSBk
aXJlY3RvcnkgaXMgY3JlYXRlZCBiZWZvcmUgcGFzc2luZyB0byBBVlVSTEFzc2V0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggMjg4MDM0
MDE5NmQxNjlhM2RmMWMwMGFkZmE4Zjk2Zjg0YzRkODJiMi4uZjRkNWMxZTMzNTlkM2E1MWY2MDNm
NWFhZDQwYzI2NmY1NjIyNDVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xOTM4LDE4ICsxOTM4LDE2IEBAIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5nZU1hdGNoZXNUZXh0TmVhclJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlCiAgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IG1hdGNoVGV4dC5sZW5ndGgoKTsK
ICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhP
ZmZzZXQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpLCAt
dGV4dExlbmd0aCk7CiAgICAgYXV0byBlbmRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBv
c2l0aW9uV2l0aE9mZnNldChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ob3JpZ2luYWxSYW5n
ZS5zdGFydCksIDIgKiB0ZXh0TGVuZ3RoKTsKLQogICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICBzdGFydFBvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG9yaWdpbmFsUmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpKTsKICAgICBpZiAoZW5kUG9zaXRp
b24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uSW5PckFmdGVy
Tm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpOwogCi0gICAgYXV0byBzZWFy
Y2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pOwotICAgIGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgU2ltcGxlUmFu
Z2Ugc2VhcmNoUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRQb3NpdGlvbiksICptYWtl
Qm91bmRhcnlQb2ludChlbmRQb3NpdGlvbikgfTsKKyAgICBpZiAoc2VhcmNoUmFuZ2UuY29sbGFw
c2VkKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShtX2RvY3VtZW50LCBzdGFydFBvc2l0aW9uLCBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24ob3JpZ2luYWxSYW5nZS5zdGFydCkpOwotICAgIHVuc2lnbmVkIHRhcmdldE9m
ZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIHRydWUpOworICAg
IGF1dG8gdGFyZ2V0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBzZWFyY2hSYW5nZS5zdGFydCwg
b3JpZ2luYWxSYW5nZS5zdGFydCB9LCB0cnVlKTsKICAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFp
blRleHQoc2VhcmNoUmFuZ2UsIG1hdGNoVGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpOwogfQogCkBA
IC0xOTkyLDEyICsxOTkwLDExIEBAIHN0YXRpYyBib29sIGNoYXJhY3Rlck9mZnNldHNJbk9yZGVy
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0MSwgY29uCiBzdGF0aWMgTm9k
ZSogcmVzZXROb2RlQW5kT2Zmc2V0Rm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSwg
aW50JiBvZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkKIHsKICAgICAvLyBVc2UgdGhpcyBmdW5j
dGlvbiB0byBpbmNsdWRlIHRoZSByZXBsYWNlZCBub2RlIGl0c2VsZiBpbiB0aGUgcmFuZ2Ugd2Ug
YXJlIGNyZWF0aW5nLgotICAgIGlmICghcmVwbGFjZWROb2RlKQorICAgIGF1dG8gbm9kZVJhbmdl
ID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVudHMocmVwbGFjZWROb2RlKTsKKyAg
ICBpZiAoIW5vZGVSYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgUmVm
UHRyPFJhbmdlPiBub2RlUmFuZ2UgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVDb250ZW50
cyhyZXBsYWNlZE5vZGUpOwotICAgIGludCBub2RlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChub2RlUmFuZ2UuZ2V0KCkpOwotICAgIG9mZnNldCA9IGNoYXJhY3RlckNvdW50IDw9
IG5vZGVMZW5ndGggPyByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSA6IHJlcGxhY2Vk
Tm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgMTsKKyAgICBib29sIGlzSW5Ob2RlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlckNvdW50KSA8PSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3Vu
dCgqbm9kZVJhbmdlKTsKKyAgICBvZmZzZXQgPSByZXBsYWNlZE5vZGUtPmNvbXB1dGVOb2RlSW5k
ZXgoKSArIChpc0luTm9kZSA/IDAgOiAxKTsKICAgICByZXR1cm4gcmVwbGFjZWROb2RlLT5wYXJl
bnROb2RlKCk7CiB9CiAKQEAgLTI0MTMsMTQgKzI0MTAsMTYgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBj
aGFyYWMKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAogICAgIC8vIFdl
IGRvbid0IGFsd2F5cyBtb3ZlIG9uZSAnY2hhcmFjdGVyJyBhdCBhIHRpbWUgc2luY2UgdGhlcmUg
bWlnaHQgYmUgY29tcG9zZWQgY2hhcmFjdGVycy4KLSAgICBpbnQgbmV4dE9mZnNldCA9IFBvc2l0
aW9uOjp1bmNoZWNrZWROZXh0T2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJP
ZmZzZXQub2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gUG9zaXRpb246OnVuY2hl
Y2tlZE5leHRPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZz
ZXQpOwogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFu
ZE9mZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIG5leHRPZmZzZXQpOwogICAgIAogICAgIC8v
IFRvIGJlIGNvbnNpc3RlbnQgd2l0aCBWaXNpYmxlUG9zaXRpb24sIHdlIHNob3VsZCBjb25zaWRl
ciB0aGUgY2FzZSB0aGF0IGN1cnJlbnQgbm9kZSBlbmQgdG8gbmV4dCBub2RlIHN0YXJ0IGNvdW50
cyAxIG9mZnNldC4KICAgICBpZiAoIWlnbm9yZU5leHROb2RlU3RhcnQgJiYgIW5leHQuaXNOdWxs
KCkgJiYgIWlzUmVwbGFjZWROb2RlT3JCUihuZXh0Lm5vZGUpICYmIG5leHQubm9kZSAhPSBjaGFy
YWN0ZXJPZmZzZXQubm9kZSkgewotICAgICAgICBpbnQgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChyYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zm
c2V0LCBuZXh0KS5nZXQoKSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiBuZXh0T2Zmc2V0IC0gY2hh
cmFjdGVyT2Zmc2V0Lm9mZnNldCkKLSAgICAgICAgICAgIG5leHQgPSBjaGFyYWN0ZXJPZmZzZXRG
b3JOb2RlQW5kT2Zmc2V0KCpuZXh0Lm5vZGUsIDAsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0
KTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9m
ZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBuZXh0KSkgeworICAgICAgICAgICAgYXV0byBsZW5ndGgg
PSBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UpOworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IG5leHRP
ZmZzZXQgLSBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0KQorICAgICAgICAgICAgICAgIG5leHQgPSBj
aGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpuZXh0Lm5vZGUsIDAsIFRyYXZlcnNlT3B0
aW9uSW5jbHVkZVN0YXJ0KTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICByZXR1cm4gbmV4
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAppbmRleCBiMjcxNWM3YzUzY2Fl
OWQwNGFmM2U0YzBmOTNhZjk3NWY2M2RiNTI1Li4xNTRkYzNjMDI3NzZkYTQ4ODM0N2MyYmEwMWRm
ZjU4MjU2Yjg1YTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCkBAIC00
MTAsOSArNDEwLDkgQEAgc3RhdGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmwKIAogICAgIC8vIFNldCB2YWx1
ZXMgZm9yIHN0YXJ0IG9mZnNldHMgYW5kIGNhbGN1bGF0ZSBpbml0aWFsIHJhbmdlIGxlbmd0aC4K
ICAgICAvLyBUaGVzZSB2YWx1ZXMgbWlnaHQgYmUgYWRqdXN0ZWQgbGF0ZXIgdG8gY292ZXIgc3Bl
Y2lhbCBjYXNlcy4KLSAgICBzdGFydE9mZnNldCA9IHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldChj
b3JlT2JqZWN0LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlSW5QYXJlbnQucHRyKCks
IHRydWUpKTsKKyAgICBzdGFydE9mZnNldCA9IHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldChjb3Jl
T2JqZWN0LCBjaGFyYWN0ZXJDb3VudChyYW5nZUluUGFyZW50LmdldCgpLCB0cnVlKSk7CiAgICAg
YXV0byBub2RlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIG5vZGVSYW5n
ZVN0YXJ0LCBub2RlUmFuZ2VFbmQpOwotICAgIGludCByYW5nZUxlbmd0aCA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgobm9kZVJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICBpbnQgcmFuZ2VMZW5n
dGggPSBjaGFyYWN0ZXJDb3VudChub2RlUmFuZ2UuZ2V0KCksIHRydWUpOwogCiAgICAgLy8gU3Bl
Y2lhbCBjYXNlcyB0aGF0IGFyZSBvbmx5IHJlbGV2YW50IHdoZW4gd29ya2luZyB3aXRoICpfRU5E
IGJvdW5kYXJpZXMuCiAgICAgaWYgKHNlbGVjdGlvbi5hZmZpbml0eSgpID09IFVQU1RSRUFNKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggNTYzOTJjMGJkODNkMWEyYTdjYjc2YTc1NGI5ZWI4ODNm
MjBjZmY1ZS4uMzk0ZDQ4NjNmMDNhMmY4YTU0MzE0ZmFiMDc3OTJiNmFlMmYwMWYzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0
aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcApAQCAtMjQ3LDEwICsyNDcsMTAgQEAgQVhDb3JlT2JqZWN0KiBvYmplY3RG
b2N1c2VkQW5kQ2FyZXRPZmZzZXRVbmlnbm9yZWQoQVhDb3JlT2JqZWN0KiByZWZlcmVuY2VPYmpl
Y3QKICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICBlbHNlIGlmICghaXNTdGFydE9mTGluZShlbmRQ
b3NpdGlvbikpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbi5wcmV2aW91cygpKTsKLSAgICAgICAgb2Zmc2V0ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSkgKyAxOworICAgICAgICBv
ZmZzZXQgPSAocmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIHRydWUpIDogMCkgKyAxOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uoc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotICAgICAgICBvZmZzZXQgPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKTsKKyAgICAgICAgb2Zmc2V0ID0gcmFuZ2Ug
PyBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIHRydWUpIDogMDsKICAgICB9CiAKICAgICByZXR1cm4g
Zmlyc3RVbmlnbm9yZWRQYXJlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCmluZGV4IDEwMWViMmQ4Mjc5Nzk0ZGE5MTM0ZDI4MTE4MGRlYTVjYWI4MGRjNWQuLjFmYWU1
YWZjOWI5MjYxYWQ3YWY1YTE4YTUzZmZmMzQ0OGFjNmQyNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yMzEwLDMwICsyMzEwLDMwIEBAIC0gKE5TQXJyYXkg
KilhcnJheU9mVGV4dEZvclRleHRNYXJrZXJzOihOU0FycmF5ICopbWFya2VycyBhdHRyaWJ1dGVk
OihCT09MKWF0dHJpCiAgICAgcmV0dXJuIFthcnJheSBhdXRvcmVsZWFzZV07CiB9CiAKLS0gKE5T
UmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlICopcmFuZ2UKKy0gKE5TUmFuZ2UpX2NvbnZl
cnRUb05TUmFuZ2U6KFJhbmdlICopbGl2ZVJhbmdlCiB7Ci0gICAgaWYgKCFyYW5nZSkKKyAgICBp
ZiAoIWxpdmVSYW5nZSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3Vt
ZW50KCk7Ci0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGRvY3VtZW50LT5mcmFtZSgpLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgRWxlbWVu
dCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKTsKKyAgICBTaW1wbGVSYW5nZSByYW5nZSB7ICpsaXZlUmFuZ2UgfTsKKwor
ICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBm
cmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworCisgICAgYXV0byogcm9vdEVkaXRhYmxlRWxl
bWVudCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgYXV0byogc2NvcGUgPSByb290RWRpdGFibGVFbGVtZW50ID8gcm9vdEVkaXRhYmxl
RWxlbWVudCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOworICAgIGlmICghc2NvcGUpCisg
ICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAogICAgIC8vIE1vdXNl
IGV2ZW50cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9y
IGEgcG9ydGlvbiBvZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3Vy
cmVudCBlZGl0YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1
Y2UKKyAgICAvLyB0aGF0IGlzIG5vdCBpbnNpZGUgdGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9u
LiBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKICAgICAvLyBwb3RlbnRpYWxs
eSBpbnZhbGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1Y2ggcmVxdWVzdHMuCi0gICAgaWYg
KCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuaXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
TlNOb3RGb3VuZCwgMCk7Ci0gICAgaWYgKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUg
JiYgIXJhbmdlLT5lbmRDb250YWluZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCisgICAgaWYg
KCFzY29wZS0+Y29udGFpbnMocmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpKSB8fCAhc2NvcGUt
PmNvbnRhaW5zKHJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpKQogICAgICAgICByZXR1cm4gTlNN
YWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBhdXRvIHRlc3RSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCAmcmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3RhcnRD
b250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSk7Ci0gICAgdGVzdFJhbmdlLT5zZXRFbmQo
cmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOwotICAgIEFTU0VSVCgm
dGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBpbnQgZW5kUG9zaXRp
b24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSk7Ci0gICAgcmV0
dXJuIE5TTWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlv
bik7CisgICAgcmV0dXJuIE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgeyAqc2NvcGUsIDAg
fSwgcmFuZ2Uuc3RhcnQgfSksIGNoYXJhY3RlckNvdW50KHJhbmdlKSk7CiB9CiAKIC0gKFJlZlB0
cjxSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Np
bXBsZVJhbmdlLmgKaW5kZXggMTI3ZjJmMTg5NDY0YzEwYzQ5YTU1NDQ4NjZlYWM0OTRkNGU4OGIy
My4uYWNkOTg1NWE4OTE5YzM3NmUxNTdkMWNlZDljNWRlZWQ3YTE5NTcyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NpbXBsZVJhbmdlLmgKQEAgLTQyLDcgKzQyLDcgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKIAog
ICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gc3RhcnQgPT0gZW5kOyB9CiAKLSAg
ICBTaW1wbGVSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYp
OworICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBj
b25zdCBCb3VuZGFyeVBvaW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoQm91
bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOwogCiAgICAgLy8gQ29udmVuaWVuY2Ugb3Zl
cmxvYWRzIHRvIGhlbHAgd2l0aCB0cmFuc2l0aW9uIGZyb20gdXNpbmcgYSBsb3Qgb2YgbGl2ZSBy
YW5nZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLmNwcAppbmRleCBlYzIyMTZkN2FkOWYyYzM5MTA4NmU4ZWUwNzE1N2QyZWNiYTA5
NWQyLi5iN2EwODgxZTZmNGNlMzZmNjU5NTU2ZmM0YWJjYTM2MTZkMTEzYTM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
QEAgLTU4MCw1MiArNTgwLDM4IEBAIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpt
YXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0CiAKIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0
IFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgQWx0ZXJuYXRpdmVUZXh0
VHlwZSBhbHRlcm5hdGl2ZVR5cGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gbWFya2VyVHlwZXNUb0FkZCkKIHsKLSAgICBhdXRvIHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24gPSByYW5nZS5jbG9uZVJhbmdlKCk7Ci0KLSAgICBzZXRTdGFydChwYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKHJhbmdl
LnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLnB0cigpLCBlbmRPZlBhcmFncmFwaChyYW5nZS5lbmRQb3NpdGlvbigpKSk7Ci0K
ICAgICAvLyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdlV2l0aEFsdGVy
bmF0aXZlLCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAgLy8gSG93
ZXZlciwgb25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdl
V2l0aEFsdGVybmF0aXZlIGlzIG5vdCB2YWxpZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9yZSB3
ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBw
b3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZQotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBz
dGFydCBwb3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIElu
IG9yZGVyIHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSBy
YW5nZQotICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0
aGUgc3RhcnQgcG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCi0gICAgYXV0byBjb3Jy
ZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwotCi0g
ICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS5z
dGFydFBvc2l0aW9uKCk7Ci0gICAgaWYgKCFzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5h
dGl2ZS5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIHNldEVuZFJl
c3VsdCA9IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKCpz
dGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0
UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSk7Ci0gICAgaWYgKHNldEVuZFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuOworICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LHN0b3Jl
IHRoZSBzdGFydCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24KKyAgICAv
LyBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguCiAKICAgICAvLyBUYWtlIG5vdGUgb2YgdGhl
IGxvY2F0aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0
ZXIgdGhlIHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAgaW50IGNvcnJlY3Rpb25TdGFydE9m
ZnNldEluUGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3Rh
cnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UucHRyKCkpOworICAgIGF1dG8gY29ycmVjdGlvblN0
YXJ0UG9zaXRpb24gPSByYW5nZS5zdGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBjb3JyZWN0aW9u
U3RhcnQgeyBtYWtlQm91bmRhcnlQb2ludChjb3JyZWN0aW9uU3RhcnRQb3NpdGlvbikgfTsKKyAg
ICBhdXRvIHBhcmFncmFwaFN0YXJ0IHsgbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFw
aChjb3JyZWN0aW9uU3RhcnRQb3NpdGlvbikpIH07CisgICAgaWYgKCFjb3JyZWN0aW9uU3RhcnQg
fHwgIXBhcmFncmFwaFN0YXJ0KQorICAgICAgICByZXR1cm47CisgICAgYXV0byB0cmVlU2NvcGVS
b290ID0gbWFrZVJlZihjb3JyZWN0aW9uU3RhcnQtPmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9v
dE5vZGUoKSk7CisgICAgQm91bmRhcnlQb2ludCB0cmVlU2NvcGVTdGFydCB7IHRyZWVTY29wZVJv
b3QuZ2V0KCksIDAgfTsKKyAgICBhdXRvIGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFwaCA9IGNo
YXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqY29ycmVjdGlvblN0YXJ0IH0pOworICAg
IGF1dG8gcGFyYWdyYXBoT2Zmc2V0SW5UcmVlU2NvcGUgPSBjaGFyYWN0ZXJDb3VudCh7IHRyZWVT
Y29wZVN0YXJ0LCAqcGFyYWdyYXBoU3RhcnQgfSk7CiAKLSAgICAvLyBDbG9uZSB0aGUgcmFuZ2Us
IHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbWF5IHdhbnQgdG8ga2VlcCB0aGUgb3Jp
Z2luYWwgcmFuZ2UgYXJvdW5kLgotICAgIGF1dG8gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5n
ZS5jbG9uZVJhbmdlKCk7CisgICAgLy8gQ2xvbmUgdGhlIHJhbmdlLCBzaW5jZSB0aGUgY2FsbGVy
IG9mIG1heSBrZWVwIGEgcmVmZXJuZWNlIHRvIHRoZSBvcmlnaW5hbCByYW5nZSBhbmQgbW9kaWZ5
IGl0LgorICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZS5jbG9uZVJh
bmdlKCksIGFsdGVybmF0aXZlKS0+YXBwbHkoKTsKIAotICAgIENvbnRhaW5lck5vZGUmIHJvb3RO
b2RlID0gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIo
KS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwotICAgIGludCBwYXJhZ3JhcGhTdGFydEluZGV4ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChSYW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50
KCksICZyb290Tm9kZSwgMCwgJnBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0
YXJ0Q29udGFpbmVyKCksIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0
T2Zmc2V0KCkpLnB0cigpKTsKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUo
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGFsdGVybmF0aXZlKS0+YXBwbHkoKTsKICAgICAvLyBSZWNh
bGN1bGF0ZSBwcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5h
bCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4g
UmFkYXI6IDEwMzA1MzE1IEJ1Z3ppbGxhOiA4OTUyNgotICAgIGF1dG8gdXBkYXRlZFBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0
aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCwgY29ycmVjdGlvblN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggKyBhbHRlcm5hdGl2ZS5sZW5ndGgoKSk7CisgICAgYXV0byB1
cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgodHJlZVNjb3BlUm9vdC5wdHIoKSwgcGFyYWdyYXBo
T2Zmc2V0SW5UcmVlU2NvcGUsIGNvcnJlY3Rpb25PZmZzZXRJblBhcmFncmFwaCArIGFsdGVybmF0
aXZlLmxlbmd0aCgpKTsKICAgICBpZiAoIXVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uKQogICAgICAgICByZXR1cm47Ci0KICAgICBzZXRFbmQodXBkYXRlZFBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0g
VGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqdXBkYXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0Nv
cnJlY3Rpb24sIGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5s
ZW5ndGgoKSk7Ci0gICAgU3RyaW5nIG5ld1RleHQgPSBwbGFpblRleHQocmVwbGFjZW1lbnRSYW5n
ZS5nZXQoKSk7CisgICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJy
YW5nZSgqdXBkYXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIGNvcnJlY3Rp
b25PZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOwogCiAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHJlcGxhY2VtZW50IHN1Y2NlZWRlZC4KLSAgICBpZiAobmV3VGV4dCAhPSBh
bHRlcm5hdGl2ZSkKKyAgICBpZiAocGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpICE9
IGFsdGVybmF0aXZlKQogICAgICAgICByZXR1cm47CiAKLSAgICBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXImIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCkubWFya2VycygpOwotCisgICAgYXV0byYgbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgZm9yIChhdXRvIG1hcmtlclR5cGUgOiBt
YXJrZXJUeXBlc1RvQWRkKQotICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigqcmVwbGFjZW1lbnRS
YW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JBcHBsaWVkQWx0ZXJuYXRpdmVU
ZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOworICAgICAgICBtYXJrZXJzLmFkZE1h
cmtlcihyZXBsYWNlbWVudFJhbmdlLCBtYXJrZXJUeXBlLCBtYXJrZXJEZXNjcmlwdGlvbkZvckFw
cGxpZWRBbHRlcm5hdGl2ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJrZXJUeXBlKSk7CiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApp
bmRleCBmZTA3ZjU2MTYwOTcxYjMwY2I4M2UxMGIzMmMyNWQ3MDZkMDFiYzBiLi4wOWEzNzQ5ZWEy
YjdjM2U0NmY5ZTk2YjM0MGNiZTk0ZjEzYjk0OTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAtMjIzLDE5ICsyMjMsMTQgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6ZG9BcHBseSgpCiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogewotICAgIC8vIHVwZGF0ZSBkb2N1bWVu
dCBsYXlvdXQgb25jZSBiZWZvcmUgcmVtb3Zpbmcgc3R5bGVzCi0gICAgLy8gc28gdGhhdCB3ZSBh
dm9pZCB0aGUgZXhwZW5zZSBvZiB1cGRhdGluZyBiZWZvcmUgZWFjaCBhbmQgZXZlcnkgY2FsbAot
ICAgIC8vIHRvIGNoZWNrIGEgY29tcHV0ZWQgc3R5bGUKKyAgICAvLyBVcGRhdGUgZG9jdW1lbnQg
bGF5b3V0IG9uY2UgYmVmb3JlIHJlbW92aW5nIHN0eWxlcyBzbyB0aGF0IHdlIGF2b2lkIHRoZSBl
eHBlbnNlIG9mCisgICAgLy8gdXBkYXRpbmcgYmVmb3JlIGVhY2ggYW5kIGV2ZXJ5IGNhbGwgdG8g
Y2hlY2sgYSBjb21wdXRlZCBzdHlsZS4KICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgLy8gZ2V0IHBvc2l0aW9ucyB3ZSB3YW50IHRv
IHVzZSBmb3IgYXBwbHlpbmcgc3R5bGUKICAgICBQb3NpdGlvbiBzdGFydCA9IHN0YXJ0UG9zaXRp
b24oKTsKICAgICBQb3NpdGlvbiBlbmQgPSBlbmRQb3NpdGlvbigpOwotICAgIGlmIChjb21wYXJl
UG9zaXRpb25zKGVuZCwgc3RhcnQpIDwgMCkgewotICAgICAgICBQb3NpdGlvbiBzd2FwID0gc3Rh
cnQ7Ci0gICAgICAgIHN0YXJ0ID0gZW5kOwotICAgICAgICBlbmQgPSBzd2FwOwotICAgIH0KKyAg
ICBpZiAoY29tcGFyZVBvc2l0aW9ucyhlbmQsIHN0YXJ0KSA8IDApCisgICAgICAgIHN0ZDo6c3dh
cChzdGFydCwgZW5kKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQoc3RhcnQp
OwogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKGVuZCk7CkBAIC0yNDYsMTQgKzI0MSwx
OCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxl
JiBzdHlsZSkKICAgICAvLyBTYXZlIGFuZCByZXN0b3JlIHRoZSBzZWxlY3Rpb24gZW5kcG9pbnRz
IHVzaW5nIHRoZWlyIGluZGljZXMgaW4gdGhlIGVkaXRhYmxlIHJvb3QsIHNpbmNlCiAgICAgLy8g
YWRkQmxvY2tTdHlsZUlmTmVlZGVkIG1heSBtb3ZlUGFyYWdyYXBocywgd2hpY2ggY2FuIHJlbW92
ZSB0aGVzZSBlbmRwb2ludHMuCiAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IGFuZCBlbmQgaW5kaWNl
cyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgdHJlZSB0aGF0IHRoZXkncmUgaW4uCi0gICAgYXV0byog
c2NvcGUgPSBoaWdoZXN0RWRpdGFibGVSb290KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgp
KTsKKyAgICBhdXRvIHNjb3BlID0gbWFrZVJlZlB0cihoaWdoZXN0RWRpdGFibGVSb290KHZpc2li
bGVTdGFydC5kZWVwRXF1aXZhbGVudCgpKSk7CiAgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBzdGFydFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBm
aXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlKSwgdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCku
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGF1dG8gZW5kUmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUpLCB2aXNpYmxlRW5k
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGludCBz
dGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJhbmdlLnB0cigpLCB0
cnVlKTsKLSAgICBpbnQgZW5kSW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZFJh
bmdlLnB0cigpLCB0cnVlKTsKKyAgICBCb3VuZGFyeVBvaW50IHNjb3BlU3RhcnQgeyAqc2NvcGUs
IDAgfTsKKyAgICBhdXRvIHN0YXJ0Qm91bmRhcnlQb2ludCA9IG1ha2VCb3VuZGFyeVBvaW50KHZp
c2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
KyAgICBhdXRvIGVuZEJvdW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlRW5k
LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICgh
c3RhcnRCb3VuZGFyeVBvaW50IHx8ICFlbmRCb3VuZGFyeVBvaW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7IHNjb3BlU3RhcnQsICpz
dGFydEJvdW5kYXJ5UG9pbnQgfSwgdHJ1ZSk7CisgICAgYXV0byBlbmRJbmRleCA9IGNoYXJhY3Rl
ckNvdW50KHsgc2NvcGVTdGFydCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSwgdHJ1ZSk7CiAKICAgICBW
aXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQoc3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlU3Rh
cnQpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaFN0YXJ0KGVuZE9mUGFyYWdy
YXBoKHBhcmFncmFwaFN0YXJ0KS5uZXh0KCkpOwpAQCAtMjg1LDggKzI4NCw4IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAg
IH0KICAgICAKICAgICB7Ci0gICAgICAgIGF1dG8gc3RhcnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUsIHN0YXJ0SW5kZXgsIDAsIHRydWUpOwot
ICAgICAgICBhdXRvIGVuZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFu
ZExlbmd0aChzY29wZSwgZW5kSW5kZXgsIDAsIHRydWUpOworICAgICAgICBhdXRvIHN0YXJ0UmFu
Z2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLmdldCgp
LCBzdGFydEluZGV4LCAwLCB0cnVlKTsKKyAgICAgICAgYXV0byBlbmRSYW5nZSA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUuZ2V0KCksIGVuZEluZGV4LCAw
LCB0cnVlKTsKICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UgJiYgZW5kUmFuZ2UpCiAgICAgICAgICAg
ICB1cGRhdGVTdGFydEVuZChzdGFydFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIGVuZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggN2RkYjBhYjI1MjE5NDkzMjA1NThlZDQxMTg0YjUx
MGNhOTYwZWU1Ni4uMGVmMzkyNzllNDcyMDg2NTA4YmZmNTdhMmJiYjM2MzEwZDllODY5OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAg
LTE0MTcsNyArMTQxNyw2IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3Jh
cGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgCiAgICAgaW50
IHN0YXJ0SW5kZXggPSAtMTsKICAgICBpbnQgZW5kSW5kZXggPSAtMTsKLSAgICBpbnQgZGVzdGlu
YXRpb25JbmRleCA9IC0xOwogICAgIGJvb2wgb3JpZ2luYWxJc0RpcmVjdGlvbmFsID0gZW5kaW5n
U2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpOwogICAgIGlmIChwcmVzZXJ2ZVNlbGVjdGlvbiAm
JiAhZW5kaW5nU2VsZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVTdGFydCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwpAQCAtMTQz
MiwxOCArMTQzMSwyMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBo
cyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBzdGFydEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChzdGFydEluUGFyYWdy
YXBoKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzdGFydFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCgpLCBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCksIHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBh
cmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9p
bnQodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpOworICAgICAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhTdGFydCAmJiBzZWxlY3Rpb25TdGFy
dCkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBh
cmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnQgfSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGVuZEluZGV4ID0gMDsKICAgICAgICAgICAgIGlmIChlbmRJblBhcmFncmFw
aCkgewotICAgICAgICAgICAgICAgIGF1dG8gZW5kUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpKTsKLSAgICAgICAgICAgICAgICBlbmRJbmRleCA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgoZW5kUmFuZ2UucHRyKCksIHRydWUpOworICAgICAgICAgICAgICAgIGF1
dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoVG9N
b3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgICAg
ICAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQodmlzaWJsZUVu
ZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uRW5kKQorICAgICAgICAgICAg
ICAgICAgICBlbmRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2Vs
ZWN0aW9uRW5kIH0sIHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAg
IAorCiAgICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZVBhcmFncmFwaCA9IHN0YXJ0T2ZQYXJhZ3Jh
cGhUb01vdmUucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgIFZpc2li
bGVQb3NpdGlvbiBhZnRlclBhcmFncmFwaChlbmRPZlBhcmFncmFwaFRvTW92ZS5uZXh0KENhbm5v
dENyb3NzRWRpdGluZ0JvdW5kYXJ5KSk7CiAKQEAgLTE0NzgsOSArMTQ4MSw5IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
c3RhcnRPZlBhcmFncmFwCiAgICAgICAgIC8vIFRoZSBtb3ZlZCBwYXJhZ3JhcGggc2hvdWxkIGFz
c3VtZSB0aGUgYmxvY2sgc3R5bGUgb2YgdGhlIGRlc3RpbmF0aW9uLgogICAgICAgICBzdHlsZUlu
RW1wdHlQYXJhZ3JhcGgtPnJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIEZJWE1FICg1MDk4OTMxKTogV2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9u
ICJXZWJWaWV3SW5zZXJ0QWN0aW9uTW92ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50
IGhlcmUuCi0gICAgCisKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihz
dGFydCwgZW5kLCBET1dOU1RSRUFNKSk7CiAgICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOwogICAgIGRlbGV0ZVNlbGVj
dGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CkBAIC0xNTA5LDggKzE1MTIsNyBAQCB2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIGlmICghZWRpdGFibGVSb290KQogICAgICAgICBl
ZGl0YWJsZVJvb3QgPSAmZG9jdW1lbnQoKTsKIAotICAgIGF1dG8gc3RhcnRUb0Rlc3RpbmF0aW9u
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoZWRp
dGFibGVSb290LmdldCgpKSwgZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgZGVzdGluYXRpb25JbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgoc3RhcnRUb0Rlc3RpbmF0aW9uUmFuZ2UucHRyKCksIHRydWUpOworICAgIGF1
dG8gZGVzdGluYXRpb25JbmRleCA9IGNoYXJhY3RlckNvdW50KHsgeyAqZWRpdGFibGVSb290LCAw
IH0sICptYWtlQm91bmRhcnlQb2ludChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpKSB9LCB0cnVlKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKGRlc3RpbmF0aW9uLCBvcmlnaW5hbElzRGlyZWN0aW9uYWwpKTsK
ICAgICBBU1NFUlQoZW5kaW5nU2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCA4ZDZiZGY0NzhhYmY3YTg5ZWUwNmQxZjBjNWM3Mjlj
MGVhNWE3NDBkLi43NTgyYTg5ZDNiYzJiZjQ3ZTJkNDM0OGNhNjJkZjg4ZTBkODk5NTA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTEwODMsMTUgKzEwODMsMjMgQEAgaW50IGlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0
aW9uLCBSZWZQdHI8Q29udGEKICAgICAgICAgICAgIHNjb3BlID0gJmRvY3VtZW50OwogICAgIH0K
IAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBmaXJzdFBvc2l0aW9u
SW5Ob2RlKHNjb3BlLmdldCgpKSwgcG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkp
OwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVl
KTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZmlyc3RQb3NpdGlvbkluTm9k
ZShzY29wZS5nZXQoKSkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRp
b24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgIGlmICghc3RhcnQgfHwgIWVuZCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQs
ICplbmQgfSwgdHJ1ZSk7CiB9CiAKIC8vIEZJWE1FOiBNZXJnZSB0aGlzIGZ1bmN0aW9uIHdpdGgg
dGhlIG9uZSBhYm92ZS4KIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihOb2RlJiBub2RlLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgYm9vbCBmb3JTZWxlY3Rpb25Q
cmVzZXJ2YXRpb24pCiB7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1
bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKCZub2RlKSwgdmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIHJldHVybiBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRp
b24pOworICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChmaXJzdFBvc2l0aW9uSW5O
b2RlKCZub2RlKSk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlUG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAg
aWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjaGFy
YWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9LCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24pOwog
fQogCiBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGludCBvZmZzZXQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggOGMyMzRhNGQ5MTk0
MDhkZGFhN2Q3MTUxMDhiODRjMWZjMzAyZjZmYS4uOThjMGFhMjk2MGU4MjlmMzExN2JjNTc2Njgw
YjRhNzZiYjNmYzJiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hl
Y2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgVGV4dENoZWNraW5nUGFyYWdyYXBo
OjppbnZhbGlkYXRlUGFyYWdyYXBoUmFuZ2VWYWx1ZXMoKQogCiBpbnQgVGV4dENoZWNraW5nUGFy
YWdyYXBoOjpyYW5nZUxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgoJnBhcmFncmFwaFJhbmdlKCkpOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3Vu
dChwYXJhZ3JhcGhSYW5nZSgpKTsKIH0KIAogUmFuZ2UmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6
cGFyYWdyYXBoUmFuZ2UoKSBjb25zdApAQCAtMTY1LDE0ICsxNjUsMTEgQEAgUmVmPFJhbmdlPiBU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKGludCBjaGFyYWN0ZXJPZmZzZXQsIGludCBj
aGFyYWN0ZXJDb3UKIAogRXhjZXB0aW9uT3I8aW50PiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9m
ZnNldFRvKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIXBvc2l0
aW9uLmNvbnRhaW5lck5vZGUoKSkKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
cGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBvc2l0aW9uKCkpOworICAgIGF1dG8gZW5kID0gbWFrZUJv
dW5kYXJ5UG9pbnQocG9zaXRpb24pOworICAgIGlmICghc3RhcnQgfHwgIWVuZCkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwotCi0gICAgYXV0byByYW5nZSA9IG9mZnNl
dEFzUmFuZ2UoKS5jbG9uZVJhbmdlKCk7Ci0gICAgYXV0byByZXN1bHQgPSByYW5nZS0+c2V0RW5k
KCpwb3NpdGlvbi5jb250YWluZXJOb2RlKCksIHBvc2l0aW9uLmNvbXB1dGVPZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCkpOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpz
dGFydCwgKmVuZCB9KTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmlzRW1wdHko
KSBjb25zdApAQCAtMjAwLDIxICsxOTcsMjEgQEAgY29uc3QgU3RyaW5nJiBUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OnRleHQoKSBjb25zdAogaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tp
bmdTdGFydCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NoZWNraW5nU3RhcnQpCi0gICAgICAgIG1f
Y2hlY2tpbmdTdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoJm9mZnNldEFzUmFuZ2Uo
KSk7CisgICAgICAgIG1fY2hlY2tpbmdTdGFydCA9IGNoYXJhY3RlckNvdW50KG9mZnNldEFzUmFu
Z2UoKSk7CiAgICAgcmV0dXJuICptX2NoZWNraW5nU3RhcnQ7CiB9CiAKIGludCBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGg6OmNoZWNraW5nRW5kKCkgY29uc3QKIHsKICAgICBpZiAoIW1fY2hlY2tpbmdF
bmQpCi0gICAgICAgIG1fY2hlY2tpbmdFbmQgPSBjaGVja2luZ1N0YXJ0KCkgKyBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1fY2hlY2tpbmdSYW5nZS5wdHIoKSk7CisgICAgICAgIG1fY2hlY2tp
bmdFbmQgPSBjaGVja2luZ1N0YXJ0KCkgKyBjaGFyYWN0ZXJDb3VudChtX2NoZWNraW5nUmFuZ2Up
OwogICAgIHJldHVybiAqbV9jaGVja2luZ0VuZDsKIH0KIAogaW50IFRleHRDaGVja2luZ1BhcmFn
cmFwaDo6Y2hlY2tpbmdMZW5ndGgoKSBjb25zdAogewogICAgIGlmICghbV9jaGVja2luZ0xlbmd0
aCkKLSAgICAgICAgbV9jaGVja2luZ0xlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bV9jaGVja2luZ1JhbmdlLnB0cigpKTsKKyAgICAgICAgbV9jaGVja2luZ0xlbmd0aCA9IGNoYXJh
Y3RlckNvdW50KG1fY2hlY2tpbmdSYW5nZSk7CiAgICAgcmV0dXJuICptX2NoZWNraW5nTGVuZ3Ro
OwogfQogCkBAIC0yMjMsOCArMjIwLDEyIEBAIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1
dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQoKSBjb25zdAogICAgIGlmIChtX2F1dG9tYXRpY1JlcGxh
Y2VtZW50U3RhcnQpCiAgICAgICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0
OwogCi0gICAgYXV0byBzdGFydE9mZnNldFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhS
YW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UoKS5zdGFy
dFBvc2l0aW9uKCksIG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigp
KTsKLSAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHN0YXJ0T2Zmc2V0UmFuZ2UucHRyKCkpOworICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91
bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7CisgICAgYXV0byBl
bmQgPSBtYWtlQm91bmRhcnlQb2ludChtX2F1dG9tYXRpY1JlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCA9IGNoYXJhY3RlckNvdW50KHsgKnN0
YXJ0LCAqZW5kIH0pOwogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0Owog
fQogCkBAIC0yMzMsOCArMjM0LDcgQEAgaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6YXV0b21h
dGljUmVwbGFjZW1lbnRMZW5ndGgoKSBjb25zdAogICAgIGlmIChtX2F1dG9tYXRpY1JlcGxhY2Vt
ZW50TGVuZ3RoKQogICAgICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7
CiAKLSAgICBhdXRvIGVuZE9mZnNldFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5n
ZSgpLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UoKS5zdGFydFBv
c2l0aW9uKCksIG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgoZW5kT2Zmc2V0UmFuZ2UucHRyKCkpIC0gYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCgpOwor
ICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2F1dG9t
YXRpY1JlcGxhY2VtZW50UmFuZ2UpOwogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVu
dExlbmd0aDsKIH0KIApAQCAtMzIzLDI1ICszMjMsMjMgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hl
bHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIs
IGIKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBh
cmVhLgogICAgIFJlZjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtX3JhbmdlLT5jbG9uZVJhbmdl
KCk7CiAgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgo
bV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgaW50IHRvdGFsUmFuZ2VMZW5ndGggPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLnB0cigpKTsKKyAgICBhdXRv
IHRvdGFsUmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7CiAgICAg
c2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpKTsKICAgICAKLSAgICBSZWY8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7
Ci0gICAgaW50IHJhbmdlU3RhcnRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9m
ZnNldEFzUmFuZ2UucHRyKCkpOwotICAgIGludCB0b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7Cisg
ICAgYXV0byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5
UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2lu
dChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgIENoYXJhY3RlckNvdW50IHRvdGFs
TGVuZ3RoUHJvY2Vzc2VkID0gMDsKICAgICAKICAgICBib29sIGZpcnN0SXRlcmF0aW9uID0gdHJ1
ZTsKICAgICBib29sIGxhc3RJdGVyYXRpb24gPSBmYWxzZTsKICAgICB3aGlsZSAodG90YWxMZW5n
dGhQcm9jZXNzZWQgPCB0b3RhbFJhbmdlTGVuZ3RoKSB7CiAgICAgICAgIC8vIEl0ZXJhdGUgdGhy
b3VnaCB0aGUgc2VhcmNoIHJhbmdlIGJ5IHBhcmFncmFwaHMsIGNoZWNraW5nIGVhY2ggb25lIGZv
ciBzcGVsbGluZyBhbmQgZ3JhbW1hci4KLSAgICAgICAgaW50IGN1cnJlbnRMZW5ndGggPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLnB0cigpKTsKKyAgICAgICAgYXV0
byBjdXJyZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwogICAgICAg
ICBpbnQgY3VycmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyByYW5nZVN0YXJ0T2Zm
c2V0IDogMDsKICAgICAgICAgaW50IGN1cnJlbnRFbmRPZmZzZXQgPSBjdXJyZW50TGVuZ3RoOwog
ICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9u
KCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSB7CiAgICAgICAgICAgICAvLyBEZXRlcm1pbmUg
dGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBzZWFyY2gg
cmFuZ2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAogICAgICAgICAgICAgLy8gc2luY2Ug
d2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICAgICAgICAg
IGF1dG8gZW5kT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgbV9yYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRPZmZzZXRBc1JhbmdlLnB0cigpKTsKKyAg
ICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRh
cnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBv
aW50KG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpIH0pOwogICAgICAgICAgICAgbGFzdEl0ZXJhdGlv
biA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9mZnNldCA8IGN1
cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTM5OSwxMCArMzk3LDggQEAgU3RyaW5nIFRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1t
YXIsIGIKIAogICAgICAgICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpICYm
ICghY2hlY2tHcmFtbWFyIHx8IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxsaW5n
TG9jYXRpb24gPD0gZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgewogICAgICAgICAgICAgICAgICAg
ICBpbnQgc3BlbGxpbmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zm
c2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIG1fcmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCisgICAgICAgICAg
ICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91
bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQo
cGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAgICAgICAgICAg
IG91dElzU3BlbGxpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5k
T2Zmc2V0ID0gc3BlbGxpbmdPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJ
dGVtID0gbWlzc3BlbGxlZFdvcmQ7CkBAIC00MTAsMTAgKzQwNiw4IEBAIFN0cmluZyBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tH
cmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjaGVja0dy
YW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3Vy
cmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHBhcmFncmFwaE9mZnNldEFzUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCksIG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5wdHIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJh
dGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigp
KSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0p
OwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBncmFtbWFyUGhyYXNlT2Zmc2V0OwogICAg
ICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IGJhZEdyYW1tYXJQaHJhc2U7CkBAIC01
NTYsNyArNTUwLDcgQEAgYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCgp
IGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBCYWQgZ3JhbW1hciBh
dCBzdGFydCBvZiByYW5nZSwgYnV0IGVuZCBvZiBiYWQgZ3JhbW1hciBpcyBiZWZvcmUgb3IgYWZ0
ZXIgZW5kIG9mIHJhbmdlCi0gICAgaWYgKGdyYW1tYXJEZXRhaWwubGVuZ3RoICE9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobV9yYW5nZS5wdHIoKSkpCisgICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihncmFtbWFyRGV0YWlsLmxlbmd0aCkgIT0gY2hhcmFjdGVyQ291bnQobV9yYW5nZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5n
IHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJvciAod2hldGhlciBvciBub3QgdGhlIHNw
ZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAKaW5kZXggZTg0NDEyYjI3NjgzNTY2ZjMwM2E2ZDFiOTJlNjdmMzIxMmQ4ZDJmZC4u
ZTg2ZWJmMTkxOTAyZWI1MzFiODc0NWNkNzVmOWU3OGY1NDQ5OWZiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjM0MywxMiArMjM0MywxMCBAQCBzaXplX3Qg
U2VhcmNoQnVmZmVyOjpsZW5ndGgoKSBjb25zdAogCiAvLyAtLS0tLS0tLQogCi1pbnQgVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChjb25zdCBSYW5nZSogcmFuZ2UsIGJvb2wgZm9yU2VsZWN0aW9u
UHJlc2VydmF0aW9uKQorQ2hhcmFjdGVyQ291bnQgY2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMpCiB7Ci0gICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAg
ICBmb3IgKFRleHRJdGVyYXRvciBpdCgqcmFuZ2UsIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbiA/
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zIDog
VGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkK
KyAgICBDaGFyYWN0ZXJDb3VudCBsZW5ndGggPSAwOworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0
KHJhbmdlLCBzcGFjZXNGb3JSZXBsYWNlZEVsZW1lbnRzID8gVGV4dEl0ZXJhdG9yRW1pdHNDaGFy
YWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBUZXh0SXRlcmF0b3JEZWZhdWx0QmVo
YXZpb3IpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKQogICAgICAgICBsZW5ndGggKz0gaXQu
dGV4dCgpLmxlbmd0aCgpOwogICAgIHJldHVybiBsZW5ndGg7CiB9CkBAIC0yNDU2LDIxICsyNDU0
LDE2IEBAIGJvb2wgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShO
b2RlKiBzY29wZSwgY29uc3QgUmFuZ2UqIHJhbmdlCiAKICAgICAvLyBUaGUgY3JpdGljYWwgYXNz
dW1wdGlvbiBpcyB0aGF0IHRoaXMgb25seSBnZXRzIGNhbGxlZCB3aXRoIHJhbmdlcyB0aGF0CiAg
ICAgLy8gY29uY2VudHJhdGUgb24gYSBnaXZlbiBhcmVhIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlv
biByb290LiBUaGlzIGlzIGRvbmUKLSAgICAvLyBiZWNhdXNlIG9mIHRleHQgZmllbGRzIGFuZCB0
ZXh0YXJlYXMuIFRoZSBET00gZm9yIHRob3NlIGlzIG5vdAotICAgIC8vIGRpcmVjdGx5IGluIHRo
ZSBkb2N1bWVudCBET00sIHNvIGVuc3VyZSB0aGF0IHRoZSByYW5nZSBkb2VzIG5vdCBjcm9zcyBh
Ci0gICAgLy8gYm91bmRhcnkgb2Ygb25lIG9mIHRob3NlLgorICAgIC8vIGJlY2F1c2Ugb2YgdGV4
dCBmaWVsZHMgYW5kIHRleHRhcmVhcy4gVGhlIERPTSBmb3IgdGhvc2UgaXMgbm90IGRpcmVjdGx5
CisgICAgLy8gaW4gdGhlIGRvY3VtZW50IERPTSwgc28gZW5zdXJlIHRoYXQgdGhlIHJhbmdlIGRv
ZXMgbm90IGNyb3NzIGEgYm91bmRhcnkKKyAgICAvLyBvZiBvbmUgb2YgdGhvc2UuCiAgICAgaWYg
KCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuaXNEZXNjZW5kYW50T2Yoc2NvcGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdlLT5lbmRDb250YWlu
ZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IFJlZjxSYW5nZT4gdGVzdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwg
c2NvcGUsIDAsICZyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkp
OwotICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAg
ICBsb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsK
LQotICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVu
ZE9mZnNldCgpKTsKLSAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3RhcnRDb250YWluZXIoKSA9PSBz
Y29wZSk7Ci0gICAgbGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2Uu
cHRyKCkpIC0gbG9jYXRpb247CisgICAgbG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNj
b3BlLCAwIH0sIHsgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgp
IH0gfSk7CisgICAgbGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwgMCB9LCB7IHJh
bmdlLT5lbmRDb250YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpIH0gfSkgLSBsb2NhdGlvbjsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgK
aW5kZXggMTU3ZjFkYTFkMGU2Yzk1M2Q5ZGVkYzRlZmFjZTEzZTk4MGUzMTM0ZS4uOTZlY2FlZTQ5
M2NkNzM0ZGJlOTg5ZDljZWFjZjVkOTlmNjlmODg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCkBAIC0zNiw3ICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IFJhbmdlOwogY2xhc3MgUmVuZGVyVGV4dEZyYWdtZW50OwogCisvLyBGSVhNRTogRGVsZXRlIHRo
aXMgb3ZlcmxvYWQgYWZ0ZXIgbW92aW5nIGFsbCB0aGUgY2FsbGVycyB0byB0aGUgU2ltcGxlUmFu
Z2UgdmVyc2lvbi4KIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2Uq
LCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgYm9v
bCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CisKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBwbGFp
blRleHQoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVy
YXRvckRlZmF1bHRCZWhhdmlvciwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CiBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKGNvbnN0IFNp
bXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVo
YXZpb3IsIGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwogV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIHBsYWluVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yRm9yVGVzdGluZyhjb25zdCBT
aW1wbGVSYW5nZSYpOwpAQCAtMTAwLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBUZXh0
SXRlcmF0b3JDb3B5YWJsZVRleHQmIGNvcHlhYmxlVGV4dCgpIGNvbnN0IHsgQVNTRVJUKCFhdEVu
ZCgpKTsgcmV0dXJuIG1fY29weWFibGVUZXh0OyB9CiAgICAgdm9pZCBhcHBlbmRUZXh0VG9TdHJp
bmdCdWlsZGVyKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0IHsgY29weWFibGVUZXh0KCku
YXBwZW5kVG9TdHJpbmdCdWlsZGVyKGJ1aWxkZXIpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgaW50IHJhbmdlTGVuZ3RoKGNvbnN0IFJhbmdlKiwgYm9vbCBzcGFjZXNGb3JSZXBsYWNl
ZEVsZW1lbnRzID0gZmFsc2UpOworICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIFNpbXBsZVJh
bmdlLCBDaGFyYWN0ZXJSYW5nZSwgYW5kIENoYXJhY3RlckNvdW50IGFuZCBtb3ZlIG91dCBvZiB0
aGlzIGNsYXNzIHRvIHRoZSB0b3AgbGV2ZWwgKGJvdHRvbSBvZiB0aGlzIGZpbGUpLgogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlRnJvbUxvY2F0aW9uQW5kTGVu
Z3RoKENvbnRhaW5lck5vZGUqIHNjb3BlLCBpbnQgcmFuZ2VMb2NhdGlvbiwgaW50IHJhbmdlTGVu
Z3RoLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxzZSk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIGJvb2wgZ2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoTm9kZSog
c2NvcGUsIGNvbnN0IFJhbmdlKiwgc2l6ZV90JiBsb2NhdGlvbiwgc2l6ZV90JiBsZW5ndGgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UmFuZ2U+IHN1YnJhbmdlKFJhbmdlJiBlbnRp
cmVSYW5nZSwgaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KTsKQEAgLTI4
Nyw0ICsyODksMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkTG9va0FoZWFkIHsgdHJ1ZSB9
OwogfTsKIAordXNpbmcgQ2hhcmFjdGVyQ291bnQgPSBzaXplX3Q7CisKK3N0cnVjdCBDaGFyYWN0
ZXJSYW5nZSB7CisgICAgQ2hhcmFjdGVyQ291bnQgbG9jYXRpb24geyAwIH07CisgICAgQ2hhcmFj
dGVyQ291bnQgbGVuZ3RoIHsgMCB9OworfTsKKworV0VCQ09SRV9FWFBPUlQgQ2hhcmFjdGVyQ291
bnQgY2hhcmFjdGVyQ291bnQoY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIHNwYWNlc0ZvclJlcGxh
Y2VkRWxlbWVudHMgPSBmYWxzZSk7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCA2YjkwZmZkYmU1NGFlY2U4
NjMzNTEzMTJhMjViMTJhZThkMmNlMWEwLi45NzMwMmNmNTJhNDM5ZTA3YWRmMGM4ZWM5YjhhMWRj
ZWJhY2MxMWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04MTksNiArODE5LDExIEBAIGJv
b2wgVmlzaWJsZVBvc2l0aW9uOjplcXVhbHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvdGhlcikg
Y29uc3QKICAgICByZXR1cm4gbV9hZmZpbml0eSA9PSBvdGhlci5tX2FmZmluaXR5ICYmIG1fZGVl
cFBvc2l0aW9uLmVxdWFscyhvdGhlci5tX2RlZXBQb3NpdGlvbik7CiB9CiAKK09wdGlvbmFsPEJv
dW5kYXJ5UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24pCit7CisgICAgcmV0dXJuIG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkpOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHN0cmVh
bSwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIHN3aXRjaCAoYWZmaW5pdHkpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCmluZGV4IDQ4NTY2ODI0ZWQ3M2ZkYWNk
MjU3MDhkZTMxOTMxNGU2MTkyYzAyZjAuLmY4NGJjZGZkNzJmNWJjNDU3NjMzZGE0ODMyNzIxZTUy
NzdhMjQ4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yOCwxMCArMjgsNiBAQAogI2luY2x1ZGUgIkVkaXRpbmdCb3VuZGFyeS5oIgogI2luY2x1ZGUg
IlBvc2l0aW9uLmgiCiAKLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZTsKQEAgLTQ5LDkgKzQ1LDYgQEAgY2xh
c3MgUmFuZ2U7CiAvLyBwb3NpdGlvbiBpcyBub3QgYXQgYSBsaW5lIGJyZWFrLgogI2RlZmluZSBW
UF9VUFNUUkVBTV9JRl9QT1NTSUJMRSBVUFNUUkVBTQogCi1jbGFzcyBJbmxpbmVCb3g7Ci1jbGFz
cyBOb2RlOwotCiBjbGFzcyBWaXNpYmxlUG9zaXRpb24gewogcHVibGljOgogICAgIC8vIE5PVEU6
IFVQU1RSRUFNIGFmZmluaXR5IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHBvcyBpcyBhdCBlbmQgb2Yg
YSB3cmFwcGVkIGxpbmUsCkBAIC04NSwyMSArNzgsMTYgQEAgcHVibGljOgogCiAgICAgLy8gRklY
TUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIFt0YWJsZSwgMF0gY29ycmVjdGx5LgogICAgIEVsZW1l
bnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5p
c05vdE51bGwoKSA/IG1fZGVlcFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSA6IDA7IH0KLSAgICAKLSAgICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChJ
bmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0Ci0gICAgewotICAg
ICAgICBtX2RlZXBQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgaW5s
aW5lQm94LCBjYXJldE9mZnNldCk7Ci0gICAgfQogCi0gICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRP
ZmZzZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiBpbmxpbmVC
b3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0Ci0gICAgewotICAgICAgICBtX2RlZXBQb3NpdGlv
bi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbiwgaW5s
aW5lQm94LCBjYXJldE9mZnNldCk7Ci0gICAgfQorICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zm
c2V0KElubGluZUJveComLCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdDsKKyAgICB2b2lkIGdldElu
bGluZUJveEFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJv
eComLCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdDsKIAogICAgIC8vIFJlY3QgaXMgbG9jYWwgdG8g
dGhlIHJldHVybmVkIHJlbmRlcmVyCiAgICAgV0VCQ09SRV9FWFBPUlQgTGF5b3V0UmVjdCBsb2Nh
bENhcmV0UmVjdChSZW5kZXJPYmplY3QqJikgY29uc3Q7CisKICAgICAvLyBCb3VuZHMgb2YgKHBv
c3NpYmx5IHRyYW5zZm9ybWVkKSBjYXJldCBpbiBhYnNvbHV0ZSBjb29yZHMKICAgICBXRUJDT1JF
X0VYUE9SVCBJbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5zaWRlRml4ZWQgPSBu
dWxscHRyKSBjb25zdDsKKwogICAgIC8vIEFicyB4L3kgcG9zaXRpb24gb2YgdGhlIGNhcmV0IGln
bm9yaW5nIHRyYW5zZm9ybXMuCiAgICAgLy8gRklYTUU6IG5hdmlnYXRpb24gd2l0aCB0cmFuc2Zv
cm1zIHNob3VsZCBiZSBzbWFydGVyLgogICAgIFdFQkNPUkVfRVhQT1JUIGludCBsaW5lRGlyZWN0
aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oKSBjb25zdDsKQEAgLTEwNyw3ICs5
NSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgYWJzb2x1dGVTZWxl
Y3Rpb25Cb3VuZHNGb3JMaW5lKCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIGlzIGEgdGVudGF0aXZl
IGVuaGFuY2VtZW50IG9mIG9wZXJhdG9yPT0gdG8gYWNjb3VudCBmb3IgYWZmaW5pdHkuCi0gICAg
Ly8gRklYTUU6IENvbWJpbmUgdGhpcyBmdW5jdGlvbiB3aXRoIG9wZXJhdG9yPT0KKyAgICAvLyBG
SVhNRTogQ29tYmluZSB0aGlzIGZ1bmN0aW9uIHdpdGggb3BlcmF0b3I9PS4KICAgICBib29sIGVx
dWFscyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKIAogI2lmIEVOQUJMRShUUkVFX0RF
QlVHR0lORykKQEAgLTExNSw3ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmb3JtYXRGb3JE
ZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CiAgICAgdm9pZCBz
aG93VHJlZUZvclRoaXMoKSBjb25zdDsKICNlbmRpZgotICAgIAorCiBwcml2YXRlOgogICAgIHZv
aWQgaW5pdChjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSk7CiAgICAgUG9zaXRpb24gY2Fub25p
Y2FsUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKQEAgLTEyNywyMyArMTE1LDUwIEBAIHByaXZh
dGU6CiAgICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7CiB9OwogCitib29sIG9wZXJhdG9yPT0oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIG9wZXJh
dG9yIT0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citi
b29sIG9wZXJhdG9yPChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKK2Jvb2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpOworYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxCb3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludChjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKKworV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIHNldFN0YXJ0KFJhbmdl
KiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIHNldEVuZChSYW5nZSosIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOworVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNv
bnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKK1Zpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRp
b24oY29uc3QgUmFuZ2UqLCBFQWZmaW5pdHkpOworCitXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBl
bmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitib29s
IGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29u
c3QgTm9kZSopOworYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOworCitib29sIGFyZVZpc2libGVQb3NpdGlvbnNJblNh
bWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBFQWZm
aW5pdHkpOworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCisvLyBpbmxpbmVzCisKIC8v
IEZJWE1FOiBUaGlzIHNob3VsZG4ndCBpZ25vcmUgYWZmaW5pdHkuCiBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBi
KQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPT0gYi5kZWVwRXF1aXZhbGVudCgp
OwogfQotIAorCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
YSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9
Ci0gICAgCisKIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVu
dCgpIDwgYi5kZWVwRXF1aXZhbGVudCgpOwogfQogCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpIAoraW5saW5l
IGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBiKQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPiBiLmRlZXBFcXVp
dmFsZW50KCk7CiB9CkBAIC0xNTMsMjYgKzE2OCwyMCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogICAg
IHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPD0gYi5kZWVwRXF1aXZhbGVudCgpOwogfQogCi1p
bmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBiKSAKK2lubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuIGEuZGVl
cEVxdWl2YWxlbnQoKSA+PSBiLmRlZXBFcXVpdmFsZW50KCk7Ci19ICAgIAotCi1XRUJDT1JFX0VY
UE9SVCBSZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKLWJvb2wgc2V0U3RhcnQoUmFuZ2UqLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mKTsKLWJvb2wgc2V0RW5kKFJhbmdlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
Ci1WaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UqLCBFQWZm
aW5pdHkpOwotVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSos
IEVBZmZpbml0eSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIGVuY2xvc2luZ0Jsb2NrRmxv
d0VsZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci0KLWJvb2wgaXNGaXJzdFZpc2libGVQ
b3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBOb2RlKik7Ci1ib29s
IGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25z
dCBOb2RlKik7Cit9CiAKLWJvb2wgYXJlVmlzaWJsZVBvc2l0aW9uc0luU2FtZVRyZWVTY29wZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2lubGluZSB2
b2lkIFZpc2libGVQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KElubGluZUJveComIGlu
bGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKK3sKKyAgICBtX2RlZXBQb3NpdGlvbi5n
ZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7
Cit9CiAKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBFQWZm
aW5pdHkpOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworaW5saW5lIHZvaWQgVmlzaWJs
ZVBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGly
ZWN0aW9uLCBJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0Cit7
CisgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHBy
aW1hcnlEaXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOworfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAppbmRl
eCA5MTA5YWI5NTQ5MDY5ZjM2MDRmMDk4NmFjOThlOGI5OTQ0OWExNGFlLi5hZmYzNmQ0ODE4ODcy
NmYyOGIwYmMzNzk5OTE5YWU3YzBlZjJlNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlVW5pdHMuY3BwCkBAIC0xOTAxLDIwICsxOTAxLDEzIEBAIFJlZlB0cjxSYW5nZT4gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFRleHRH
cmFuCiAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocHJldkJvdW5kYXJ5LmRlZXBFcXVpdmFsZW50
KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQoKSwgcHJldkJvdW5kYXJ5LCBuZXh0Qm91bmRh
cnkpOwogfQogCi1pbnQgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdnAsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3RoZXIpCitwdHJkaWZmX3QgZGlzdGFu
Y2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBiKQogewotICAgIGlmICh2cC5pc051bGwoKSB8fCBvdGhlci5pc051bGwoKSkK
KyAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGJvb2wgdGhpc0lzU3RhcnQgPSAodnAgPCBvdGhlcik7Ci0KLSAgICAvLyBTdGFydCBtdXN0
IGNvbWUgZmlyc3QgaW4gdGhlIFJhbmdlIGNvbnN0cnVjdG9yLgotICAgIGF1dG8gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHZwLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1l
bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpc0lzU3Rh
cnQgPyB2cCA6IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodGhpc0lzU3RhcnQgPyBvdGhlciA6IHZwKSk7Ci0gICAgaW50IGRpc3RhbmNlID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7Ci0KLSAgICByZXR1cm4gKHRoaXNJc1N0
YXJ0ID8gLWRpc3RhbmNlIDogZGlzdGFuY2UpOworICAgIHJldHVybiBhIDwgYgorICAgICAgICA/
IC1jaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChhKSwgKm1ha2VCb3VuZGFyeVBv
aW50KGIpIH0pCisgICAgICAgIDogY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
YiksICptYWtlQm91bmRhcnlQb2ludChhKSB9KTsKIH0KIAogdm9pZCBjaGFyYWN0ZXJzQXJvdW5k
UG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYgb25lQWZ0
ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggNjcxN2ViMTFkZGRiZDg2OGU0NDE0YzM5ODAzMzUy
YTAzMTZhZmUzZS4uY2U4YzUwZjU3OTM2MGUwMWNmZGM4NTJmZWE1ODFmOWU0MjVhNDgzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCkBAIC0xMDIsNyArMTAyLDcgQEAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBUZXh0R3JhbnVsYXIKIFdFQkNPUkVfRVhQT1JUIGJvb2wgd2l0aGluVGV4dFVuaXRP
ZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwgU2Vs
ZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0
R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRp
b24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7Ci1XRUJDT1JFX0VYUE9S
VCBpbnQgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgcHRyZGlmZl90IGRpc3RhbmNl
QmV0d2VlblBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlRnJvbVBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0
aW9uIGNsb3Nlc3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFVDaGFyMzImIG9uZUFmdGVyLCBVQ2hhcjMyJiBvbmVC
ZWZvcmUsIFVDaGFyMzImIHR3b0JlZm9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggMTAzZTU1M2IyMzdhOTE5N2JjMzhkMjQyMTYwMjQ2
YzZkMjMyMjYzNS4uMmI5MzE3YjE3MTNmMjYwYTJkYWYzOGM1YjFmYmE0ZTA4NGFiN2NhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtNzEs
MTUgKzcxLDE4IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgUmV0YWluUHRy
PEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBk
ZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2Up
CiB7CiAgICAgU3RyaW5nIGZ1bGxQbGFpblRleHRTdHJpbmcgPSBwbGFpblRleHQoY29udGV4dFJh
bmdlLmdldCgpKTsKLSAgICBpbnQgaGl0TG9jYXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1ha2VSYW5nZShjb250ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdl
dCgpKTsKKyAgICBhdXRvIHN0YXJ0ID0gY29udGV4dFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Cisg
ICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIENGSW5kZXggaGl0TG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikgfSk7CiAK
LSAgICBSZXRhaW5QdHI8RERTY2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJD
cmVhdGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7Ci0gICAgUmV0YWluUHRy
PEREU2NhblF1ZXJ5UmVmPiBzY2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJv
bVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVuZ3Ro
KCkpKSk7CisgICAgYXV0byBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2Fu
bmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CisgICAgYXV0byBzY2FuUXVlcnkgPSBhZG9w
dENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmdWxs
UGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGZ1
bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CiAKICAgICBpZiAoIUREU2Nhbm5lclNjYW5R
dWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBy
ZXN1bHRzID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIu
Z2V0KCksIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOworICAgIGF1dG8g
cmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVy
LmdldCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXApKTsKIAogICAgIC8v
IEZpbmQgdGhlIEREUmVzdWx0UmVmIHRoYXQgaW50ZXJzZWN0cyB0aGUgaGl0VGVzdFJlc3VsdCdz
IFZpc2libGVQb3NpdGlvbi4KICAgICBERFJlc3VsdFJlZiBtYWluUmVzdWx0ID0gbnVsbHB0cjsK
QEAgLTEwMCw3ICsxMDMsNyBAQCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0
ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uCiAgICAgfQogCiAgICAg
aWYgKCFtYWluUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQgPSBh
ZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOwogICAgIFthY3Rp
b25Db250ZXh0IHNldEFsbFJlc3VsdHM6QFsgKF9fYnJpZGdlIGlkKW1haW5SZXN1bHQgXV07CkBA
IC0xMTIsOSArMTE1LDkgQEAgc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVj
dEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbgogICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwogICAg
IGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQogICAgICAgICBkZXRlY3RlZERhdGFCb3Vu
ZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpKSk7Ci0gICAgCisKICAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1
bHRSYW5nZTsKLSAgICAKKwogICAgIHJldHVybiBhY3Rpb25Db250ZXh0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0gYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KaW5kZXggODc5
NzIyMDI4NDY4ZjAzZTAyZWFlNTliNTVhMjlhMjNkZWNlOTJlZS4uZDY0OGZkNzBmYzM4ZmM5MmMy
NGU1MTc4OTA0N2NlZjYyNjNmYTUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCwxMiArMjY0LDExIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERp
Y3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbikKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCisK
ICAgICBpZiAoIVJldmVhbExpYnJhcnkoKSB8fCAhUmV2ZWFsQ29yZUxpYnJhcnkoKSB8fCAhZ2V0
UlZJdGVtQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0gICAgCi0g
ICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0g
ICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorCisgICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAKICAgICAvLyBTaW5j
ZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFi
IHRoZSByZXR1cm5lZCBvcHRpb25zLgpAQCAtMjc5LDIwICsyNzgsMjIgQEAgc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JT
ZWxlY3Rpb24oY28KICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBz
dXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCiAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9
IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwogICAgIGF1dG8gcGFyYWdyYXBoRW5k
ID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICBpZiAocGFyYWdyYXBoU3RhcnQu
aXNOdWxsKCkgfHwgcGFyYWdyYXBoRW5kLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyBudWxs
cHRyLCBuaWwgfTsKKworICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJhY3Rl
ckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3VuZGFy
eVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKKyAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3RlckNv
dW50ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KTsKKyAgICBOU1JhbmdlIHJhbmdl
VG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uQ2hh
cmFjdGVyQ291bnQpOwogCi0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3Rh
cnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQo
KSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0
aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7
Ci0gICAgCiAgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlUmFuZ2Uo
cGFyYWdyYXBoU3RhcnQsIHBhcmFncmFwaEVuZCk7CiAgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBw
bGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKTsKICAgICBSZXRhaW5QdHI8UlZJdGVt
PiBpdGVtID0gYWRvcHROUyhbYWxsb2NSVkl0ZW1JbnN0YW5jZSgpIGluaXRXaXRoVGV4dDppdGVt
U3RyaW5nIHNlbGVjdGVkUmFuZ2U6cmFuZ2VUb1Bhc3NdKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdo
dFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKLSAgICAKKwogICAgIHJldHVybiB7
IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKmZ1bGxDaGFyYWN0ZXJSYW5nZSwgaGlnaGxpZ2h0UmFu
Z2UubG9jYXRpb24sIGhpZ2hsaWdodFJhbmdlLmxlbmd0aCksIG5pbCB9OwotICAgIAorCiAgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKKwogICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwogfQogCkBAIC0zMjIsNDMgKzMyMyw0MCBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5n
ZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0SGl0VGVzdFJlc3Vs
dAogCiAgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBOU1Jh
bmdlIHNlbGVjdGlvblJhbmdlOwotICAgIGludCBoaXRJbmRleDsKKyAgICBOU1VJbnRlZ2VyIGhp
dEluZGV4OwogICAgIFJlZlB0cjxSYW5nZT4gZnVsbENoYXJhY3RlclJhbmdlOwogICAgIAogICAg
IGlmIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246OlJhbmdl
U2VsZWN0aW9uKSB7CiAgICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCk7CiAgICAgICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2li
bGVFbmQoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQXMgY29udGV4dCwgd2UgYXJlIGdvaW5n
IHRvIHVzZSB0aGUgc3Vycm91bmRpbmcgcGFyYWdyYXBocyBvZiB0ZXh0LgogICAgICAgICBhdXRv
IHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CiAgICAg
ICAgIGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKICAg
ICAgICAgCi0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVjdGlvblN0YXJ0ID0gbWFrZVJhbmdlKHBh
cmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gcmFuZ2VUb1NlbGVj
dGlvbkVuZCA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICAg
ICAgCiAgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgcGFyYWdyYXBoRW5kKTsKICAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAgICAg
ICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAotICAgICAgICBzZWxlY3Rpb25SYW5n
ZSA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VUb1NlbGVjdGlv
blN0YXJ0LmdldCgpKSwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc2VsZWN0
aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGhpdElu
ZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHBvc2l0aW9uKS5nZXQoKSk7CisgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2Uo
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pLAorICAgICAgICAgICAgY2hhcmFjdGVy
Q291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5
UG9pbnQoc2VsZWN0aW9uRW5kKSB9KSk7CisgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291
bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9p
bnQocG9zaXRpb24pIH0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcyB7IHBvc2l0aW9uIH07CiAgICAgICAgIHNl
bGVjdGlvbkFjY291bnRpbmdGb3JMaW5lUnVsZXMuZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3Jk
R3JhbnVsYXJpdHkpOwogICAgICAgICBwb3NpdGlvbiA9IHNlbGVjdGlvbkFjY291bnRpbmdGb3JM
aW5lUnVsZXMuc3RhcnQoKTsKKwogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcg
dG8gdXNlIDI1MCBjaGFyYWN0ZXJzIG9mIHRleHQgYmVmb3JlIGFuZCBhZnRlciB0aGUgcG9pbnQu
CiAgICAgICAgIGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlv
bkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUwKTsKLSAgICAgICAgCiAgICAgICAgIGlmICghZnVs
bENoYXJhY3RlclJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0g
ICAgICAgIAorCiAgICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7Ci0gICAgICAgIGhpdEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtl
UmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQo
KSk7CisgICAgICAgIGhpdEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9p
bnQoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9p
bnQocG9zaXRpb24pIH0pOwogICAgIH0KLSAgICAKKwogICAgIE5TUmFuZ2Ugc2VsZWN0ZWRSYW5n
ZSA9IFtnZXRSVlNlbGVjdGlvbkNsYXNzKCkgcmV2ZWFsUmFuZ2VBdEluZGV4OmhpdEluZGV4IHNl
bGVjdGVkUmFuZ2VzOkBbW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6c2VsZWN0aW9uUmFuZ2VdXSBz
aG91bGRVcGRhdGVTZWxlY3Rpb246bmlsXTsKLSAgICAKKwogICAgIFN0cmluZyBpdGVtU3RyaW5n
ID0gcGxhaW5UZXh0KCpmdWxsQ2hhcmFjdGVyUmFuZ2UpOwogICAgIFJldGFpblB0cjxSVkl0ZW0+
IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1T
dHJpbmcgc2VsZWN0ZWRSYW5nZTpzZWxlY3RlZFJhbmdlXSk7CiAgICAgTlNSYW5nZSBoaWdobGln
aHRSYW5nZSA9IGl0ZW0uZ2V0KCkuaGlnaGxpZ2h0UmFuZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwCmluZGV4IDljMWFlODg4OTUx
ZmIzYmIyNTZlZDdlMDllMjQxNzZiYzhkM2MzODkuLmEyYjgxODI4NzdiMjhhZjI5YzhhMDYzOTU0
ZDM3NGNkNWFhNWE1ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0Rp
Y3RhdGlvbkNvbW1hbmRJT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0Rp
Y3RhdGlvbkNvbW1hbmRJT1MuY3BwCkBAIC00OCw5ICs0OCw3IEBAIERpY3RhdGlvbkNvbW1hbmRJ
T1M6OkRpY3RhdGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8VmVjdG9y
PFN0cmluCiAKIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiB7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIGluc2VydGlvblBvc2l0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkpOwotCi0gICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gMDsKKyAgICBDaGFyYWN0
ZXJDb3VudCByZXN1bHRMZW5ndGggPSAwOwogICAgIGZvciAoYXV0byYgaW50ZXJwcmV0YXRpb25z
IDogbV9kaWN0YXRpb25QaHJhc2VzKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZmlyc3RJbnRl
cnByZXRhdGlvbiA9IGludGVycHJldGF0aW9uc1swXTsKICAgICAgICAgcmVzdWx0TGVuZ3RoICs9
IGZpcnN0SW50ZXJwcmV0YXRpb24ubGVuZ3RoKCk7CkBAIC02MiwyMCArNjAsMjMgQEAgdm9pZCBE
aWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KCkKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKSk7CiAgICAg
fQogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyUmVzdWx0cyhlbmRpbmdTZWxlY3Rpb24oKS52
aXNpYmxlRW5kKCkpOworICAgIC8vIEZJWE1FOiBBZGQgdGhlIHJlc3VsdCBtYXJrZXIgdXNpbmcg
YSBQb3NpdGlvbiBjYWNoZWQgYmVmb3JlIHJlc3VsdHMgYXJlIGluc2VydGVkLCBpbnN0ZWFkIG9m
IHJlbHlpbmcgb24gY2hhcmFjdGVyIGNvdW50cy4KIAotICAgIEVsZW1lbnQqIHJvb3QgPSBhZnRl
clJlc3VsdHMucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGF1dG8gZW5kUG9zaXRpb24gPSBl
bmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRh
cnlQb2ludChlbmRQb3NpdGlvbik7CisgICAgYXV0byogcm9vdCA9IGVuZFBvc2l0aW9uLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBpZiAoIWVuZCB8fCAhcm9vdCkKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgLy8gRklYTUU6IEFkZCB0aGUgcmVzdWx0IG1hcmtlciB1c2luZyBhIFBvc2l0aW9u
IGNhY2hlZCBiZWZvcmUgcmVzdWx0cyBhcmUgaW5zZXJ0ZWQsIGluc3RlYWQgb2YgcmVseWluZyBv
biBUZXh0SXRlcmF0b3JzLgotICAgIGF1dG8gcmFuZ2VUb0VuZCA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKChOb2RlICopcm9vdCwgMCksIGFm
dGVyUmVzdWx0cy5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBpbnQgZW5kSW5kZXggPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlVG9FbmQucHRyKCksIHRydWUpOwotICAgIGludCBzdGFy
dEluZGV4ID0gZW5kSW5kZXggLSByZXN1bHRMZW5ndGg7CisgICAgYXV0byBlbmRPZmZzZXQgPSBj
aGFyYWN0ZXJDb3VudCh7IHsgKnJvb3QsIDAgfSwgV1RGTW92ZSgqZW5kKSB9KTsKKyAgICBpZiAo
ZW5kT2Zmc2V0IDwgcmVzdWx0TGVuZ3RoKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3Rh
cnRJbmRleCA+PSAwKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSBUZXh0
SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGRvY3VtZW50KCkuZG9jdW1lbnRF
bGVtZW50KCksIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0cnVlKTsKLSAgICAgICAgQVNTRVJUKHJl
c3VsdFJhbmdlKTsgLy8gRklYTUU6IFdoYXQgZ3VhcmFudGVlcyB0aGlzPwotICAgICAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoKnJlc3VsdFJhbmdlLCBt
X21ldGFkYXRhKTsKLSAgICB9CisgICAgYXV0byByZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgocm9vdCwgZW5kT2Zmc2V0IC0gcmVzdWx0TGVuZ3Ro
LCBlbmRPZmZzZXQpOworICAgIGlmICghcmVzdWx0UmFuZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcigqcmVzdWx0
UmFuZ2UsIG1fbWV0YWRhdGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpp
bmRleCAxNjE1OTA3ZDY5MTEwYzY4NWY3NzMwNzMxOGJiMmE1NTcxOTY4YTRlLi41MTM1YjkwNmRl
ZTE4ZTAxNzc5ZWM2MTE0NzQzMWM3OTVlMzhhNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSwxMCArODks
MTIgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY28KICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUg
Z29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCiAgICAgYXV0
byBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwogICAg
IGF1dG8gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICBp
ZiAocGFyYWdyYXBoU3RhcnQuaXNOdWxsKCkgfHwgcGFyYWdyYXBoRW5kLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAotICAgIGludCBsZW5ndGhUb1NlbGVjdGlv
blN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3Rh
cnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5k
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNl
bGVjdGlvbkVuZCkuZ2V0KCkpOwotICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5n
ZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAtIGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFN0YXJ0KSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKKyAgICBhdXRvIHNlbGVjdGlvbkNoYXJhY3Rl
ckNvdW50ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3Rh
cnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uRW5kKSB9KTsKKyAgICBOU1JhbmdlIHJh
bmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9u
Q2hhcmFjdGVyQ291bnQpOwogCiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogICAg
IHRva2VuUmFuZ2UocGxhaW5UZXh0KG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBo
RW5kKS5nZXQoKSksIHJhbmdlVG9QYXNzLCAmb3B0aW9ucyk7CkBAIC0xMzMsNyArMTM1LDEyIEBA
IHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0CiAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAg
ICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwogCi0gICAgTlNSYW5nZSByYW5nZVRvUGFz
cyA9IE5TTWFrZVJhbmdlKFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGZ1bGxD
aGFyYWN0ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpLCAwKTsKKyAg
ICBhdXRvIGZ1bGxDaGFyYWN0ZXJTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZ1bGxDaGFyYWN0
ZXJSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBhdXRvIHBvc2l0aW9uQm91bmRhcnkgPSBt
YWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgaWYgKCFmdWxsQ2hhcmFjdGVyU3RhcnQg
fHwgIXBvc2l0aW9uQm91bmRhcnkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
CisgICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsg
KmZ1bGxDaGFyYWN0ZXJTdGFydCwgKnBvc2l0aW9uQm91bmRhcnkgfSksIDApOwogICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICBOU1JhbmdlIGV4dHJhY3RlZFJhbmdlID0gdG9r
ZW5SYW5nZShwbGFpblRleHQoZnVsbENoYXJhY3RlclJhbmdlLmdldCgpKSwgcmFuZ2VUb1Bhc3Ms
ICZvcHRpb25zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGVkZTBi
NGEwMDhhYzk5OWMwNGE0Y2M2OGY3YWVkOWFhMmRiNmNlYWYuLjk4NjdkMDYzYTY3YjQwYzM3ZGJi
NGJlMTRjNzIxZDA2NTg0Y2FlZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
QEAgLTY1NCwxMCArNjU0LDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNz
RXZlbnRUcmlwbGVDbGljayhjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSCiAgICAgcmV0dXJu
IHVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRG93bkRpc3BhdGNoaW5nU2VsZWN0U3RhcnQodGFyZ2V0
Tm9kZSwgZXhwYW5kU2VsZWN0aW9uVG9SZXNwZWN0U2VsZWN0T25Nb3VzZURvd24oKnRhcmdldE5v
ZGUsIG5ld1NlbGVjdGlvbiksIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKIH0KIAotc3RhdGljIGlu
dCB0ZXh0RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KQorc3RhdGljIENoYXJhY3RlckNvdW50IHRleHREaXN0YW5jZShjb25zdCBQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoc3RhcnQuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKLSAgICByZXR1
cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgYXV0
byBzdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpOworICAgIGF1dG8gZW5k
Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChlbmQpOworICAgIGlmICghc3RhcnRCb3VuZGFy
eSB8fCAhZW5kQm91bmRhcnkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjaGFyYWN0
ZXJDb3VudCh7ICpzdGFydEJvdW5kYXJ5LCAqZW5kQm91bmRhcnkgfSwgdHJ1ZSk7CiB9CiAKIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhjb25zdCBN
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0
aW5nUmFuZ2UuY3BwCmluZGV4IDFhZmFlNWViYmY1ZTYzZDliZWRmMzAzOWRmNDQ1MWM5YjU1M2E2
MzguLmI4OTkzM2ZmYTFiZjI4NDNjMjZmZGJkNjZkMjkyNmVkMDBjNWY2YTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcApAQCAtNTgsMTggKzU4LDE3IEBAIFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFtZSwg
Y29uc3QgRWRpdGluCiAKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID09IEVk
aXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6UGFyYWdyYXBoKTsKIAotICAgIGNvbnN0IFdlYkNvcmU6
OlZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICBhdXRv
JiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoIXNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtYWtlUmFuZ2Uoc3Rh
cnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBzZWxlY3Rpb24udmlzaWJs
ZUVuZCgpKTsKLSAgICBpZiAoIXBhcmFncmFwaFJhbmdlKQorICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKSkpOworICAgIGlmICghcGFyYWdyYXBoU3RhcnQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGF1dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKTsKIAotICAgIGF1dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBoUmFu
Z2UuZ2V0KCktPnN0YXJ0Q29udGFpbmVyKCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBp
bnQgcGFyYWdyYXBoU3RhcnRJbmRleCA9IFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZShyb290Tm9kZS5kb2N1bWVudCgpLCAmcm9vdE5vZGUs
IDAsICZwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0T2Zmc2V0KCkpLnB0cigpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXgg
KyBzdGF0aWNfY2FzdDxpbnQ+KHJhbmdlLmxvY2F0aW9uKSwgbGVuZ3RoKTsKKyAgICBhdXRvIHBh
cmFncmFwaFN0YXJ0SW5kZXggPSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCh7IHsgcm9vdE5vZGUs
IDAgfSwgKnBhcmFncmFwaFN0YXJ0IH0pOworICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0
b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJ
bmRleCArIHJhbmdlLmxvY2F0aW9uLCBsZW5ndGgpOwogfQogCiBFZGl0aW5nUmFuZ2UgRWRpdGlu
Z1JhbmdlOjpmcm9tUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpS
YW5nZSogcmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBlZGl0aW5nUmFuZ2VJc1JlbGF0
aXZlVG8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDllMjQ3NThjZDkyY2Y3NTA4NmZjYzIx
ODI0YjM1Yzg4MDcxMjMyNzMuLjQzYmZlZjY0Y2ExM2Q5OTAxMjFjYThkOTM4ZGZlZjNlMWNmMGI1
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0zNjEsNiArMzYxLDcgQEAgV2ViQ29yZTo6
RE9NUGFzdGVBY2Nlc3NSZXNwb25zZSBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RET01QYXN0ZUFj
Y2Vzcyhjb25zdCBTdHIKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShHTElCKQor
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
JiBldmVudCkKIHsKICAgICBpZiAobV9wYWdlLT5oYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChl
dmVudCkpCkBAIC0zNzEsNiArMzcyLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlu
cHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQorCiAjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEdMSUIpCiAKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxlbWVu
dCkKQEAgLTQyMCw2ICs0MjIsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENoYW5n
ZUluVGV4dEFyZWEoRWxlbWVudCogZWxlbWVudCkKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQorCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5n
ZWQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC00MjksNiArNDMyLDcgQEAgdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnN1YkZyYW1lU2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQorCiAjZW5kaWYKIAogc3RhdGljIGJvb2wgZ2V0QWN0aW9uVHlw
ZUZvcktleUV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50LCBXS0lucHV0RmllbGRBY3Rpb25UeXBl
JiB0eXBlKQpAQCAtNTQ5LDIwICs1NTMsMjUgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNr
R3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW0KICAg
ICAqYmFkR3JhbW1hckxlbmd0aCA9IHJlc3VsdExlbmd0aDsKIH0KIAotc3RhdGljIGludDMyX3Qg
aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uKQorc3RhdGljIENoYXJhY3RlckNvdW50IGluc2VydGlvblBvaW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVj
dGlvbikKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50U2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFy
dCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIHJldHVybiBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3Rh
cnQpLmdldCgpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91
bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1h
a2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKKyAgICBp
ZiAoIXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfHwgIXBhcmFncmFwaFN0YXJ0KQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc2VsZWN0aW9uU3RhcnRCb3Vu
ZGFyeSwgKnBhcmFncmFwaFN0YXJ0IH0pOwogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVD
S0lORykKKwogVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVj
a1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE9wdGlvblNldDxXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJl
c3VsdHM7CiAgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVj
a1RleHRPZlBhcmFncmFwaChzdHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgY2hl
Y2tpbmdUeXBlcywgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2Vs
ZWN0aW9uKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoOjpS
ZXBseShyZXN1bHRzKSk7CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CisKICNlbmRpZgogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0
IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRl
dGFpbCkKQEAgLTYxNiwxNSArNjI1LDEzIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJbnB1
dE1ldGhvZFN0YXRlKEVsZW1lbnQqIGVsZW1lbnQpCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojpz
dXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpCiB7Ci0jaWYgUExBVEZPUk0oR1RLKQotI2lmIFBMQVRG
T1JNKFgxMSkKKyNpZiBQTEFURk9STShHVEspICYmIFBMQVRGT1JNKFgxMSkKICAgICBpZiAoUGxh
dGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxheTo6
VHlwZTo6WDExKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKFdB
WUxBTkQpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShXQVlMQU5EKQogICAgIGlmIChQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5
OjpUeXBlOjpXYXlsYW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogI2VuZGlmCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAppbmRleCA2M2M3NTc3YTVjMDA1N2NlYzhiZjg1ZjMzNTBhZDkxZGUxNmU1OGU1
Li4xNDlmMWFkNmMzMTc0ZTc3ODFjNWE0NjBlOWIwODExNjc1OGNjNDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTQzNCw2ICs1NDM0LDcg
QEAgdm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb25Bc3luYygpCiAjZW5kaWYgLy8gUExB
VEZPUk0oQ09DT0EpCiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKwogc3Rh
dGljIEZyYW1lKiB0YXJnZXRGcmFtZUZvckVkaXRpbmcoV2ViUGFnZSYgcGFnZSkKIHsKICAgICBG
cmFtZSYgdGFyZ2V0RnJhbWUgPSBwYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOwpAQCAtNTQ3Myw3ICs1NDc0LDcgQEAgdm9pZCBXZWJQYWdlOjpk
ZWxldGVTdXJyb3VuZGluZyhpbnQ2NF90IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQp
CiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwog
ICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mRWRpdGFibGVDb250
ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gY3Vyc29yUG9z
aXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN1cnJvdW5kaW5nUmFuZ2UuZ2V0KCkp
OworICAgIGF1dG8gY3Vyc29yUG9zaXRpb24gPSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCgqc3Vy
cm91bmRpbmdSYW5nZSk7CiAgICAgYXV0byYgcm9vdE5vZGUgPSBzdXJyb3VuZGluZ1JhbmdlLT5z
dGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAgICAgYXV0byBzZWxlY3Rp
b25SYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3RO
b2RlLCBjdXJzb3JQb3NpdGlvbiArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIGlmICgh
c2VsZWN0aW9uUmFuZ2UpCkBAIC01NDg1LDYgKzU0ODYsNyBAQCB2b2lkIFdlYlBhZ2U6OmRlbGV0
ZVN1cnJvdW5kaW5nKGludDY0X3Qgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudCkKICAg
ICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7
CiAgICAgc2VuZEVkaXRvclN0YXRlVXBkYXRlKCk7CiB9CisKICNlbmRpZgogCiB2b2lkIFdlYlBh
Z2U6OmRpZEFwcGx5U3R5bGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCAzMTUyYzM3ZjRmNGRjZjJmZDEwNWE2NDRmZDFl
MDcwYzk2ODE1YmYxLi5mNGY4NDhmMzc4YTM0ZGEzZjdlYjJlZjhhYWE5ZjIwZTI1Njk2MTkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQpAQCAtMTk4OSwxMyArMTk4OSwxNiBAQCB2b2lkIFdlYlBhZ2U6OnN0b3JlU2VsZWN0aW9u
Rm9yQWNjZXNzaWJpbGl0eShib29sIHNob3VsZFN0b3JlKQogICAgIH0KIH0KIAotc3RhdGljIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgbWF0Y2hUZXh0LCBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGlvblJhbmdlKQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5n
ZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24s
IGNvbnN0IFN0cmluZyYgbWF0Y2hUZXh0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pCiB7Ci0gICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRvIGxpdmVSYW5nZSA9IHNl
bGVjdGlvbi5maXJzdFJhbmdlKCk7CisgICAgaWYgKCFsaXZlUmFuZ2UpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2VsZWN0aW9u
UmFuZ2UtPm93bmVyRG9jdW1lbnQoKSwgc2VsZWN0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
cG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0g
ICAgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5n
ZS5wdHIoKSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0KCpzZWxlY3Rp
b25SYW5nZSwgbWF0Y2hUZXh0LCB7IH0sIHRhcmdldE9mZnNldCk7CisgICAgU2ltcGxlUmFuZ2Ug
cmFuZ2UgeyAqbGl2ZVJhbmdlIH07CisgICAgYXV0byBib3VuZGFyeVBvaW50ID0gbWFrZUJvdW5k
YXJ5UG9pbnQocG9zaXRpb24pOworICAgIGlmICghYm91bmRhcnlQb2ludCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFpblRleHQocmFuZ2Us
IG1hdGNoVGV4dCwgeyB9LCBjaGFyYWN0ZXJDb3VudCh7IHJhbmdlLnN0YXJ0LCAqYm91bmRhcnlQ
b2ludCB9LCB0cnVlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9m
ZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKQEAgLTIwMjIsNyArMjAyNSw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVj
dHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcm
IHRlCiAKICAgICBpZiAocGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZS5wdHIoKSkgIT0gdGV4dCkg
ewogICAgICAgICAvLyBUcnkgdG8gc2VhcmNoIGZvciBhIHJhbmdlIHdoaWNoIGlzIHRoZSBjbG9z
ZXN0IHRvIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHNlbGVjdGlvbiByYW5nZSB0aGF0IG1hdGNo
ZXMgdGhlIHBhc3NlZCBpbiB0ZXh0LgotICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSByYW5n
ZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KHN0YXJ0UG9zaXRpb24sIHRleHQsIHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpKSkgeworICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSByYW5n
ZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KHN0YXJ0UG9zaXRpb24sIHRleHQsIHNlbGVjdGlvbikp
IHsKICAgICAgICAgICAgIGlmICghd29yZFJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgICAg
ICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgqd29yZFJhbmdlKTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpp
bmRleCAzYTBkYzQ1MjAxNzZjNGNiMzlkMThjZDUxMDIyYTA0ZWIwN2NkNzgyLi4yYzU4OTZkZjc4
NTc1ODY2MTBkMmEzYTY1NTZkNTgxOWNmNmZmZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTQwLDE5ICsxNDAsMjIg
QEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9y
U3RhdGUmIHJlc3VsdCwgSW5jbHVkZVBvc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXV0byYgcG9zdExheW91dERhdGEgPSByZXN1bHQucG9zdExheW91dERhdGEoKTsK
ICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNp
YmxlRW5kKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBh
cmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVu
ZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFy
dEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8g
c2VsZWN0aW9uRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7
CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJh
Z3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKKworICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFy
eSB8fCAhc2VsZWN0aW9uRW5kIHx8ICFwYXJhZ3JhcGhTdGFydCkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgcG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24gPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9u
U3RhcnQpLmdldCgpKTsKLSAgICBwb3N0TGF5b3V0RGF0YS5zZWxlY3RlZFRleHRMZW5ndGggPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0
aW9uRW5kKS5nZXQoKSkgLSBwb3N0TGF5b3V0RGF0YS5jYW5kaWRhdGVSZXF1ZXN0U3RhcnRQb3Np
dGlvbjsKKyAgICBwb3N0TGF5b3V0RGF0YS5jYW5kaWRhdGVSZXF1ZXN0U3RhcnRQb3NpdGlvbiA9
IGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3RhcnRCb3VuZGFy
eSB9KTsKKyAgICBwb3N0TGF5b3V0RGF0YS5zZWxlY3RlZFRleHRMZW5ndGggPSBjaGFyYWN0ZXJD
b3VudCh7ICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5LCAqc2VsZWN0aW9uRW5kIH0pOwogICAgIHBv
c3RMYXlvdXREYXRhLnBhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gcGxhaW5U
ZXh0KGZyYW1lLmVkaXRvcigpLmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKS5nZXQo
KSk7CiAgICAgcG9zdExheW91dERhdGEuc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCA9IGZyYW1l
LmVkaXRvcigpLnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CmluZGV4IDdjNTA2ZmM2YTdhMzFiZjM3N2NhNjVkYzY1MTA0NGY0MWNmOWRmMTAuLmNhNDc5MzEw
NTRiODAyNjI2ODczZTNmNTNmYjVlZTMwNTRlOTg1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAg
LTEwMzEsMTYgKzEwMzEsMTkgQEAgc3RhdGljIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNv
cmUoTlNBcnJheSAqaW5jb21pbmdSZXN1bHRzLCBPcHRpb25TZXQ8VGV4dEMKICAgICByZXR1cm4g
cmVzdWx0czsKIH0KIAotc3RhdGljIGludCBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCitzdGF0aWMgTlNV
SW50ZWdlciBpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3Rh
cnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlv
biBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAg
IHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9
IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkp
OworICAgIGlmICghc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdyYXBoU3RhcnQpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhT
dGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CiB9CiAKIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmll
dyBzdHJpbmcsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjb3JlQ2hlY2tpbmdUeXBlcywg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKIHsKLSAgICBOU0RpY3Rp
b25hcnkgKm9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5IDogIFtO
U051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1cnJl
bnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildIH07CisgICAgTlNEaWN0aW9uYXJ5ICpvcHRp
b25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6IEAoaW5zZXJ0aW9uUG9p
bnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKSkgfTsKICAgICByZXR1cm4g
Y29yZShbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTdHJpbmc6c3Ry
aW5nLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSByYW5nZTpOU01ha2VSYW5n
ZSgwLCBzdHJpbmcubGVuZ3RoKCkpIHR5cGVzOihuc1RleHRDaGVja2luZ1R5cGVzKGNvcmVDaGVj
a2luZ1R5cGVzKSB8IE5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5KSBvcHRpb25zOm9wdGlv
bnMgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhv
Z3JhcGh5Ok5VTEwgd29yZENvdW50Ok5VTExdLCBjb3JlQ2hlY2tpbmdUeXBlcyk7CiB9CiAKQEAg
LTEwODMsNyArMTA4Niw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29y
ZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4CiAgICAgTlNTdHJpbmcg
Kmxhbmd1YWdlID0gbmlsOwogICAgIE5TT3J0aG9ncmFwaHkqIG9ydGhvZ3JhcGh5ID0gbmlsOwog
ICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxs
Q2hlY2tlcl07Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJ
bnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50ZWdlcjpp
bnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pXSB9Owor
ICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9p
bnRLZXkgOiBAKGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVj
dGlvbikpIH07CiAgICAgaWYgKGNvbnRleHQubGVuZ3RoKCkpIHsKICAgICAgICAgW2NoZWNrZXIg
Y2hlY2tTdHJpbmc6Y29udGV4dCByYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgp
KSB0eXBlczpOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSBvcHRpb25zOm9wdGlvbnMgaW5T
cGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3JhcGh5
OiZvcnRob2dyYXBoeSB3b3JkQ291bnQ6MF07CiAgICAgICAgIGxhbmd1YWdlID0gW2NoZWNrZXIg
bGFuZ3VhZ2VGb3JXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgaW5T
dHJpbmc6Y29udGV4dCBvcnRob2dyYXBoeTpvcnRob2dyYXBoeV07CkBAIC0xMTE2LDI0ICsxMTE5
LDIwIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2FuZGlkYXRlc0ZvclNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlCiAgICAgaWYgKCFbbV93ZWJWaWV3IHNob3Vs
ZFJlcXVlc3RDYW5kaWRhdGVzXSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdl
PiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYg
KCFzZWxlY3RlZFJhbmdlKQorICAgIGlmICghc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3dlYlZp
ZXcgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKKworICAgIGF1dG8qIGZyYW1lID0gY29yZShbbV93
ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9sYXN0U2VsZWN0aW9uRm9yUmVxdWVzdGVkQ2FuZGlkYXRlcyA9IHNl
bGVjdGlvbjsKIAotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uRW5kID0gc2Vs
ZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQg
PSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
cGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgoc2VsZWN0aW9uRW5kKTsKKyAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOworICAgIGF1dG8gc2VsZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFy
eVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKSwgKm1ha2VCb3VuZGFyeVBv
aW50KHNlbGVjdGlvblN0YXJ0KSB9KTsKKyAgICBhdXRvIHNlbGVjdGlvbkxlbmd0aCA9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIH0pOwogCi0gICAgaW50IGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJh
Z3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxl
Y3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhT
dGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7Ci0gICAgbV9yYW5nZUZvckNhbmRpZGF0ZXMgPSBO
U01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBsZW5ndGhUb1NlbGVjdGlvbkVuZCAt
IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQpOworICAgIG1fcmFuZ2VGb3JDYW5kaWRhdGVzID0gTlNN
YWtlUmFuZ2Uoc2VsZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgc2VsZWN0aW9uTGVuZ3Ro
KTsKICAgICBtX3BhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gcGxhaW5UZXh0
KGZyYW1lLT5lZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkuZ2V0KCkp
OwogCiAgICAgTlNUZXh0Q2hlY2tpbmdUeXBlcyBjaGVja2luZ1R5cGVzID0gTlNUZXh0Q2hlY2tp
bmdUeXBlU3BlbGxpbmcgfCBOU1RleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCB8IE5TVGV4dENo
ZWNraW5nVHlwZUNvcnJlY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQppbmRleCBiYzNiZWJkZjI2MmZhNGVjZmIwMTg3OGIzYzJiMGM1NWMzZWE5MDE1
Li5lNGM2YWEwMDViOWY5ZDg5OWY4MTZhM2FkYzE0OWY1MTRmYjFhMzRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTgzNSwyNCArODM1LDE5IEBA
IC0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5z
cmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86CiAgICAgICAgIC8vIFRoYXQgZml0cyB3aXRoIEFwcEtp
dCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KICAgICAgICAgYXV0byogZWxlbWVudCA9IF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3Vt
ZW50RWxlbWVudCgpOwogICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4g
bmlsOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGVsZW1lbnQsIG5zcmFu
Z2UubG9jYXRpb24sIG5zcmFuZ2UubGVuZ3RoKTsKICAgICB9CiAKICAgICBBU1NFUlQocmFuZ2VJ
c1JlbGF0aXZlVG8gPT0gV2ViUmFuZ2VJc1JlbGF0aXZlVG86OlBhcmFncmFwaCk7CiAKLSAgICBj
b25zdCBhdXRvJiBzZWxlY3Rpb24gPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisg
ICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3Jh
cGgoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpKTsKKyAgICBpZiAoIXBhcmFncmFwaFN0YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBhdXRvJiByb290Tm9kZSA9IHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRyZWVT
Y29wZSgpLnJvb3ROb2RlKCk7CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHBhcmFncmFw
aFJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAgaWYgKCFwYXJhZ3JhcGhSYW5nZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvJiByb290Tm9kZSA9IHBhcmFncmFw
aFJhbmdlLmdldCgpLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0g
ICAgaW50IHBhcmFncmFwaFN0YXJ0SW5kZXggPSBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUocm9vdE5vZGUuZG9jdW1lbnQoKSwgJnJvb3RO
b2RlLCAwLCAmcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHBhcmFncmFwaFJhbmdl
LT5zdGFydE9mZnNldCgpKS5wdHIoKSk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRv
cjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3JhcGhTdGFydElu
ZGV4ICsgc3RhdGljX2Nhc3Q8aW50Pihuc3JhbmdlLmxvY2F0aW9uKSwgbnNyYW5nZS5sZW5ndGgp
OworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnRJbmRleCA9IFdlYkNvcmU6OmNoYXJhY3RlckNvdW50
KHsgeyByb290Tm9kZSwgMCB9LCAqcGFyYWdyYXBoU3RhcnQgfSk7CisgICAgcmV0dXJuIFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBw
YXJhZ3JhcGhTdGFydEluZGV4ICsgbnNyYW5nZS5sb2NhdGlvbiwgbnNyYW5nZS5sZW5ndGgpOwog
fQogCiAtIChET01SYW5nZSAqKV9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNy
YW5nZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394231</attachid>
            <date>2020-03-22 14:18:14 -0700</date>
            <delta_ts>2020-03-23 05:27:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209207-20200322141813.patch</filename>
            <type>text/plain</type>
            <size>98887</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjVmMjVlYzRhZDljMzBk
MGNiMmM3MjIyNmYxNjkyYzBlNDUxOWQxNi4uMDE5YWUxMzU0YWQzYWFkMTdhYWQ1NTA1NGM3NDgx
NDQ0YzU1ZDI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTAzLTIyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVuYW1lZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoIHRvIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJh
bmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChX
ZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmlj
YXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSHlwZXJsaW5rLmNwcDoKKyAgICAgICAgKHJhbmdlTGVuZ3RoRm9yT2JqZWN0KTogRGl0dG8u
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252
ZXJ0VG9OU1JhbmdlOl0pOiBEaXR0by4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5oOiBF
eHBvcnQgYW5vdGhlciBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICBVc2UgY2hh
cmFjdGVyQ291bnQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnJh
bmdlTGVuZ3RoIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6Om9mZnNldFRvIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdFbmQgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5n
dGggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwgY29uc3QpOiBEaXR0by4KKworICAg
ICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFj
dGVyQ291bnQpOiBMaWtlIHRoZSBiYW92ZSBidXQgdGhlIGFyZ3VtZW50IGlzIFNpbXBsZVJhbmdl
CisgICAgICAgIGFuZCByZXR1cm4gaXMgQ2hhcmFjdGVyQ291bnQuIEV2ZW4gdGhvdWdoIGVhY2gg
aW5kaXZpZHVhbCBub2RlIGlzIGxpbWl0ZWQKKyAgICAgICAgdG8gMzItYml0IHNpemUsIHJhbmdl
cyBjb3ZlcmluZyBtdWx0aXBsZSBub2RlcyBjb3VsZCBoYXZlIGEgY291bnQgb2YKKyAgICAgICAg
Y2hhcmFjdGVycyB0aGF0IGV4Y2VlZHMgMzIgYml0cywgc28gQ2hhcmFjdGVyQ291bnQgaXMgc2l6
ZV90LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKworICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmg6IEFkZGVkIGNoYXJhY3RlckNvdW50IGZ1bmN0aW9uLAorICAgICAgICBDaGFy
YWN0ZXJDb3VudCBhbmQgQ2hhcmFjdGVyUmFuZ2UgdHlwZXMuIFJlbW92ZWQgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aC4KKyAgICAgICAgQWRkZWQgRklYTUUgY29tbWVudHMgYWJvdXQgdGhlIG5l
eHQgc3RlcHMuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludCk6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmg6IEFkZGVkIG1ha2VCb3VuZGFyeVBvaW50LiBBbHNvIHJlbW92
ZWQKKyAgICAgICAgZXh0cmFuZW91cyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgbW92ZWQgc29t
ZSBmdW5jdGlvbiBib2RpZXMgb3V0IG9mIHRoZQorICAgICAgICBjbGFzcyBkZWZpbml0aW9uLgor
CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBwdHJkaWZm
X3QuCisgICAgICAgIFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVVbml0cy5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RpY3Rpb25hcnlMb29rdXAubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0
aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rh
dGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dERpc3RhbmNlKTogRGl0
dG8uCisKIDIwMjAtMDMtMjIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbTEZDXSBJbnRyb2R1Y2UgSW5pdGlhbENvbnRhaW5pbmdCb3ggY2xhc3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggMTI5YzcwZmZkY2NiYzJhZWFkNDU1YjdhOWM5NGZhMTY3Y2Q2NzViMi4uNmUxYmIzNDYzNDJi
OGUwZDExYTY5YTA1M2E2YzYzYmMwOTc0YmVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAor
MjAyMC0wMy0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hh
bmdlIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVpcmUgYSBsaXZlIHJhbmdl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyMDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJl
ZC9FZGl0aW5nUmFuZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpFZGl0aW5nUmFuZ2U6OnRvUmFu
Z2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjppbnNlcnRpb25Qb2lu
dEZyb21DdXJyZW50U2VsZWN0aW9uKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0bworICAgICAgICBD
aGFyYWN0ZXJDb3VudCBhbmQgdXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OnN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKTogVHdlYWtlZCAjaWYuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
Ojp0YXJnZXRGcmFtZUZvckVkaXRpbmcpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogRGl0dG8uCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0Ojpy
YW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
bGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogRGl0dG8uCisKIDIwMjAtMDMtMjIgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQgLVtVSVdpbmRv
d1NjZW5lIGludGVyZmFjZU9yaWVudGF0aW9uXSB3aGVuIGRldGVybWluaW5nIGRldmljZSBvcmll
bnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDdhYTliZGQ0ZjgzNmE5MjA3
NTI3MTIyNDBkY2U3ZTA1OWMwNjVlY2IuLjUwNjVkOTVkNzMyZmNiMDg5YmExYTcwZjE3MzdmYTE1
NGNmZmJjNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAor
MjAyMC0wMy0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2hh
bmdlIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGggdG8gbm90IHJlcXVpcmUgYSBsaXZlIHJhbmdl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkyMDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKGluc2VydGlvblBvaW50RnJv
bUN1cnJlbnRTZWxlY3Rpb24pOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChXZWJFZGl0
b3JDbGllbnQ6OnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RP
TVJhbmdlOnJhbmdlSXNSZWxhdGl2ZVRvOl0pOiBEaXR0by4KKwogMjAyMC0wMy0yMCAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBFbnN1cmUgbWVkaWEgY2FjaGUg
ZGlyZWN0b3J5IGlzIGNyZWF0ZWQgYmVmb3JlIHBhc3NpbmcgdG8gQVZVUkxBc3NldC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDI4ODAz
NDAxOTZkMTY5YTNkZjFjMDBhZGZhOGY5NmY4NGM0ZDgyYjIuLmY0ZDVjMWUzMzU5ZDNhNTFmNjAz
ZjVhYWQ0MGMyNjZmNTYyMjQ1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcApAQCAtMTkzOCwxOCArMTkzOCwxNiBAQCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5nZShjb25zdCBT
aW1wbGVSYW5nZQogICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSBtYXRjaFRleHQubGVuZ3RoKCk7
CiAgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRo
T2Zmc2V0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihvcmlnaW5hbFJhbmdlLnN0YXJ0KSwg
LXRleHRMZW5ndGgpOwogICAgIGF1dG8gZW5kUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQ
b3NpdGlvbldpdGhPZmZzZXQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFu
Z2Uuc3RhcnQpLCAyICogdGV4dExlbmd0aCk7Ci0KICAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc051
bGwoKSkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShvcmlnaW5hbFJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKSk7CiAgICAgaWYgKGVuZFBvc2l0
aW9uLmlzTnVsbCgpKQogICAgICAgICBlbmRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JBZnRl
ck5vZGUob3JpZ2luYWxSYW5nZS5lbmQuY29udGFpbmVyLnB0cigpKTsKIAotICAgIGF1dG8gc2Vh
cmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKTsKLSAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIFNpbXBsZVJh
bmdlIHNlYXJjaFJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH07CisgICAgaWYgKHNlYXJjaFJhbmdlLmNvbGxh
cHNlZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byByYW5nZSA9
IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVudCwgc3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpKTsKLSAgICB1bnNpZ25lZCB0YXJnZXRP
ZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVlKTsKKyAg
ICBhdXRvIHRhcmdldE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgc2VhcmNoUmFuZ2Uuc3RhcnQs
IG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwgdHJ1ZSk7CiAgICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxh
aW5UZXh0KHNlYXJjaFJhbmdlLCBtYXRjaFRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KTsKIH0KIApA
QCAtMTk5MiwxMiArMTk5MCwxMSBAQCBzdGF0aWMgYm9vbCBjaGFyYWN0ZXJPZmZzZXRzSW5PcmRl
cihjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldDEsIGNvbgogc3RhdGljIE5v
ZGUqIHJlc2V0Tm9kZUFuZE9mZnNldEZvclJlcGxhY2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUs
IGludCYgb2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpCiB7CiAgICAgLy8gVXNlIHRoaXMgZnVu
Y3Rpb24gdG8gaW5jbHVkZSB0aGUgcmVwbGFjZWQgbm9kZSBpdHNlbGYgaW4gdGhlIHJhbmdlIHdl
IGFyZSBjcmVhdGluZy4KLSAgICBpZiAoIXJlcGxhY2VkTm9kZSkKKyAgICBhdXRvIG5vZGVSYW5n
ZSA9IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKHJlcGxhY2VkTm9kZSk7Cisg
ICAgaWYgKCFub2RlUmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIFJl
ZlB0cjxSYW5nZT4gbm9kZVJhbmdlID0gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2RlQ29udGVu
dHMocmVwbGFjZWROb2RlKTsKLSAgICBpbnQgbm9kZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgobm9kZVJhbmdlLmdldCgpKTsKLSAgICBvZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCA8
PSBub2RlTGVuZ3RoID8gcmVwbGFjZWROb2RlLT5jb21wdXRlTm9kZUluZGV4KCkgOiByZXBsYWNl
ZE5vZGUtPmNvbXB1dGVOb2RlSW5kZXgoKSArIDE7CisgICAgYm9vbCBpc0luTm9kZSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjaGFyYWN0ZXJDb3VudCkgPD0gV2ViQ29yZTo6Y2hhcmFjdGVyQ291
bnQoKm5vZGVSYW5nZSk7CisgICAgb2Zmc2V0ID0gcmVwbGFjZWROb2RlLT5jb21wdXRlTm9kZUlu
ZGV4KCkgKyAoaXNJbk5vZGUgPyAwIDogMSk7CiAgICAgcmV0dXJuIHJlcGxhY2VkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogfQogCkBAIC0yNDEzLDE0ICsyNDEwLDE2IEBAIENoYXJhY3Rlck9mZnNldCBB
WE9iamVjdENhY2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYg
Y2hhcmFjCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKICAgICAKICAgICAvLyBX
ZSBkb24ndCBhbHdheXMgbW92ZSBvbmUgJ2NoYXJhY3RlcicgYXQgYSB0aW1lIHNpbmNlIHRoZXJl
IG1pZ2h0IGJlIGNvbXBvc2VkIGNoYXJhY3RlcnMuCi0gICAgaW50IG5leHRPZmZzZXQgPSBQb3Np
dGlvbjo6dW5jaGVja2VkTmV4dE9mZnNldChjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVy
T2Zmc2V0Lm9mZnNldCk7CisgICAgdW5zaWduZWQgbmV4dE9mZnNldCA9IFBvc2l0aW9uOjp1bmNo
ZWNrZWROZXh0T2Zmc2V0KGNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJPZmZzZXQub2Zm
c2V0KTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dCA9IGNoYXJhY3Rlck9mZnNldEZvck5vZGVB
bmRPZmZzZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCBuZXh0T2Zmc2V0KTsKICAgICAKICAgICAv
LyBUbyBiZSBjb25zaXN0ZW50IHdpdGggVmlzaWJsZVBvc2l0aW9uLCB3ZSBzaG91bGQgY29uc2lk
ZXIgdGhlIGNhc2UgdGhhdCBjdXJyZW50IG5vZGUgZW5kIHRvIG5leHQgbm9kZSBzdGFydCBjb3Vu
dHMgMSBvZmZzZXQuCiAgICAgaWYgKCFpZ25vcmVOZXh0Tm9kZVN0YXJ0ICYmICFuZXh0LmlzTnVs
bCgpICYmICFpc1JlcGxhY2VkTm9kZU9yQlIobmV4dC5ub2RlKSAmJiBuZXh0Lm5vZGUgIT0gY2hh
cmFjdGVyT2Zmc2V0Lm5vZGUpIHsKLSAgICAgICAgaW50IGxlbmd0aCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgocmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9m
ZnNldCwgbmV4dCkuZ2V0KCkpOwotICAgICAgICBpZiAobGVuZ3RoID4gbmV4dE9mZnNldCAtIGNo
YXJhY3Rlck9mZnNldC5vZmZzZXQpCi0gICAgICAgICAgICBuZXh0ID0gY2hhcmFjdGVyT2Zmc2V0
Rm9yTm9kZUFuZE9mZnNldCgqbmV4dC5ub2RlLCAwLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFy
dCk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJP
ZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgbmV4dCkpIHsKKyAgICAgICAgICAgIGF1dG8gbGVuZ3Ro
ID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlKTsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPiBuZXh0
T2Zmc2V0IC0gY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCkKKyAgICAgICAgICAgICAgICBuZXh0ID0g
Y2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqbmV4dC5ub2RlLCAwLCBUcmF2ZXJzZU9w
dGlvbkluY2x1ZGVTdGFydCk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgcmV0dXJuIG5l
eHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVj
dENhY2hlQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0
Q2FjaGVBdGsuY3BwCmluZGV4IGZlMTI2MGQ3ZmRjZjY4ODk4YWQ4NTU3ODRiMDUxZDNkNzIxZDEw
NmYuLmQxNTZhZWNlODY4NWVkMzQ0Yzk1NWVkMjdhZDkwOTAzNjM2MWU4ODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3Bw
CkBAIC0zNTUsNyArMzU1LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpub2RlVGV4dENoYW5nZVBs
YXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamUKICAgICAgICAgLy8g
dGhlIGN1cnJlbnQgYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8gZW5zdXJlIHdlIGVtaXQgdGhlCiAg
ICAgICAgIC8vIHJpZ2h0IG9mZnNldCAoZS5nLiBtdWx0aWxpbmUgdGV4dCBhcmVhcykuCiAgICAg
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBub2RlLT5wYXJlbnROb2Rl
KCksIDAsIG5vZGUsIDApOwotICAgICAgICBvZmZzZXRUb0VtaXQgPSBvZmZzZXQgKyBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpKTsKKyAgICAgICAgb2Zmc2V0VG9FbWl0ID0g
b2Zmc2V0ICsgY2hhcmFjdGVyQ291bnQocmFuZ2UuZ2V0KCkpOwogICAgIH0KIAogICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZSh3cmFwcGVyLCBkZXRhaWwuZGF0YSgpLCBvZmZzZXRUb0VtaXQsIHRl
eHRUb0VtaXQubGVuZ3RoKCksIHRleHRUb0VtaXQudXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJs
aW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVIeXBlcmxpbmsuY3BwCmluZGV4IGE0NjFjMWZhZGFmOGM3MjVkY2RiNGZlOWU1ZjgwMGZiOGI2
ODI5ZWQuLjhkOTZkMmE2MTcyNWNiMDM1YmNhZjIwOGMzOTczMTQ4Mjk0ODlkNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBl
cmxpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVIeXBlcmxpbmsuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIEF0a09iamVj
dCogd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0dldE9iamVjdChBdGtIeXBlcmxpbmsqIGxpbmss
IGdpbnQgaW4KIHN0YXRpYyBnaW50IHJhbmdlTGVuZ3RoRm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlP
YmplY3QmIG9iaiwgUmFuZ2UqIHJhbmdlKQogewogICAgIC8vIFRoaXMgaXMgZ29pbmcgdG8gYmUg
dGhlIGFjdHVhbCBsZW5ndGggaW4gbW9zdCBvZiB0aGUgY2FzZXMKLSAgICBpbnQgYmFzZUxlbmd0
aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UsIHRydWUpOworICAgIGludCBiYXNl
TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCB0cnVlKTsKIAogICAgIC8vIENoZWNrIHdo
ZXRoZXIgdGhlIGN1cnJlbnQgaHlwZXJsaW5rIGJlbG9uZ3MgdG8gYSBsaXN0IGl0ZW0uCiAgICAg
Ly8gSWYgc28sIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIGxlbmd0aCBvZiB0aGUgaXRlbSdzIG1h
cmtlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCmluZGV4IGIyNzE1YzdjNTNj
YWU5ZDA0YWYzZTRjMGY5M2FmOTc1ZjYzZGI1MjUuLjE1NGRjM2MwMjc3NmRhNDg4MzQ3YzJiYTAx
ZGZmNTgyNTZiODVhMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKQEAg
LTQxMCw5ICs0MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0
KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libAogCiAgICAgLy8gU2V0IHZh
bHVlcyBmb3Igc3RhcnQgb2Zmc2V0cyBhbmQgY2FsY3VsYXRlIGluaXRpYWwgcmFuZ2UgbGVuZ3Ro
LgogICAgIC8vIFRoZXNlIHZhbHVlcyBtaWdodCBiZSBhZGp1c3RlZCBsYXRlciB0byBjb3ZlciBz
cGVjaWFsIGNhc2VzLgotICAgIHN0YXJ0T2Zmc2V0ID0gd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0
KGNvcmVPYmplY3QsIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VJblBhcmVudC5wdHIo
KSwgdHJ1ZSkpOworICAgIHN0YXJ0T2Zmc2V0ID0gd2ViQ29yZU9mZnNldFRvQXRrT2Zmc2V0KGNv
cmVPYmplY3QsIGNoYXJhY3RlckNvdW50KHJhbmdlSW5QYXJlbnQuZ2V0KCksIHRydWUpKTsKICAg
ICBhdXRvIG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZVJh
bmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgaW50IHJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChub2RlUmFuZ2UucHRyKCksIHRydWUpOworICAgIGludCByYW5nZUxl
bmd0aCA9IGNoYXJhY3RlckNvdW50KG5vZGVSYW5nZS5nZXQoKSwgdHJ1ZSk7CiAKICAgICAvLyBT
cGVjaWFsIGNhc2VzIHRoYXQgYXJlIG9ubHkgcmVsZXZhbnQgd2hlbiB3b3JraW5nIHdpdGggKl9F
TkQgYm91bmRhcmllcy4KICAgICBpZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBTVFJFQU0p
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCA1NjM5MmMwYmQ4M2QxYTJhN2NiNzZhNzU0YjllYjg4
M2YyMGNmZjVlLi4zOTRkNDg2M2YwM2EyZjhhNTQzMTRmYWIwNzc5MmI2YWUyZjAxZjM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZVV0aWwuY3BwCkBAIC0yNDcsMTAgKzI0NywxMCBAQCBBWENvcmVPYmplY3QqIG9iamVj
dEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9i
amVjdAogICAgICAgICBvZmZzZXQgPSAwOwogICAgIGVsc2UgaWYgKCFpc1N0YXJ0T2ZMaW5lKGVu
ZFBvc2l0aW9uKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLnByZXZpb3VzKCkpOwotICAgICAgICBvZmZzZXQgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKSArIDE7CisgICAgICAg
IG9mZnNldCA9IChyYW5nZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgdHJ1ZSkgOiAwKSArIDE7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0gICAgICAgIG9mZnNldCA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUpOworICAgICAgICBvZmZzZXQgPSByYW5n
ZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgdHJ1ZSkgOiAwOwogICAgIH0KIAogICAgIHJldHVy
biBmaXJzdFVuaWdub3JlZFBhcmVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0KaW5kZXggMTAxZWIyZDgyNzk3OTRkYTkxMzRkMjgxMTgwZGVhNWNhYjgwZGM1ZC4uMWZh
ZTVhZmM5YjkyNjFhZDdhZjVhMThhNTNmZmYzNDQ4YWM2ZDI2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTIzMTAsMzAgKzIzMTAsMzAgQEAgLSAoTlNBcnJh
eSAqKWFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzIGF0dHJpYnV0
ZWQ6KEJPT0wpYXR0cmkKICAgICByZXR1cm4gW2FycmF5IGF1dG9yZWxlYXNlXTsKIH0KIAotLSAo
TlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UgKilyYW5nZQorLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooUmFuZ2UgKilsaXZlUmFuZ2UKIHsKLSAgICBpZiAoIXJhbmdlKQorICAg
IGlmICghbGl2ZVJhbmdlKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwg
MCk7CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9j
dW1lbnQoKTsKLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1lKCkt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBFbGVt
ZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpOworICAgIFNpbXBsZVJhbmdlIHJhbmdlIHsgKmxpdmVSYW5nZSB9Owor
CisgICAgYXV0byYgZG9jdW1lbnQgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpOworICAgIGF1dG8q
IGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisKKyAgICBhdXRvKiByb290RWRpdGFibGVF
bGVtZW50ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBhdXRvKiBzY29wZSA9IHJvb3RFZGl0YWJsZUVsZW1lbnQgPyByb290RWRpdGFi
bGVFbGVtZW50IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKCFzY29wZSkK
KyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCiAgICAgLy8gTW91
c2UgZXZlbnRzIG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBm
b3IgYSBwb3J0aW9uIG9mIHRoZSB2aWV3Ci0gICAgLy8gdGhhdCBpcyBub3QgaW5zaWRlIHRoZSBj
dXJyZW50IGVkaXRhYmxlIHJlZ2lvbi4gIFRoZXNlIGNoZWNrcyBlbnN1cmUgd2UgZG9uJ3QgcHJv
ZHVjZQorICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3VycmVudCBlZGl0YWJsZSByZWdp
b24uIFRoZXNlIGNoZWNrcyBlbnN1cmUgd2UgZG9uJ3QgcHJvZHVjZQogICAgIC8vIHBvdGVudGlh
bGx5IGludmFsaWQgZGF0YSB3aGVuIHJlc3BvbmRpbmcgdG8gc3VjaCByZXF1ZXN0cy4KLSAgICBp
ZiAoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250
YWluZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5n
ZShOU05vdEZvdW5kLCAwKTsKLSAgICBpZiAoJnJhbmdlLT5lbmRDb250YWluZXIoKSAhPSBzY29w
ZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLmlzRGVzY2VuZGFudE9mKHNjb3BlKSkKKyAgICBp
ZiAoIXNjb3BlLT5jb250YWlucyhyYW5nZS5zdGFydC5jb250YWluZXIucHRyKCkpIHx8ICFzY29w
ZS0+Y29udGFpbnMocmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSkpCiAgICAgICAgIHJldHVybiBO
U01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIGF1dG8gdGVzdFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsICZyYW5nZS0+c3RhcnRDb250YWlu
ZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwotICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsKLSAgICB0ZXN0UmFuZ2UtPnNldEVu
ZChyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgQVNTRVJU
KCZ0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGludCBlbmRQb3Np
dGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLnB0cigpKTsKLSAgICBy
ZXR1cm4gTlNNYWtlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0
aW9uKTsKKyAgICByZXR1cm4gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQoeyB7ICpzY29wZSwg
MCB9LCByYW5nZS5zdGFydCB9KSwgY2hhcmFjdGVyQ291bnQocmFuZ2UpKTsKIH0KIAogLSAoUmVm
UHRyPFJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuaAppbmRleCAxMjdmMmYxODk0NjRjMTBjNDlhNTU0NDg2NmVhYzQ5NGQ0ZTg4
YjIzLi5hY2Q5ODU1YTg5MTljMzc2ZTE1N2QxY2VkOWM1ZGVlZDdhMTk1NzI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuaApAQCAtNDIsNyArNDIsNyBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2Ugewog
CiAgICAgYm9vbCBjb2xsYXBzZWQoKSBjb25zdCB7IHJldHVybiBzdGFydCA9PSBlbmQ7IH0KIAot
ICAgIFNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoY29uc3QgQm91bmRhcnlQb2ludCYs
IGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZShC
b3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5UG9pbnQmJik7CiAKICAgICAvLyBDb252ZW5pZW5jZSBv
dmVybG9hZHMgdG8gaGVscCB3aXRoIHRyYW5zaXRpb24gZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZl
IHJhbmdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCmluZGV4IGVjMjIxNmQ3YWQ5ZjJjMzkxMDg2ZThlZTA3MTU3ZDJlY2Jh
MDk1ZDIuLmI3YTA4ODFlNmY0Y2UzNmY2NTk1NTZmYzRhYmNhMzYxNmQxMTNhMzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cApAQCAtNTgwLDUyICs1ODAsMzggQEAgU3RyaW5nIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
Om1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZlVGV4dChBbHQKIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29u
c3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBBbHRlcm5hdGl2ZVRl
eHRUeXBlIGFsdGVybmF0aXZlVHlwZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlc1RvQWRkKQogewotICAgIGF1dG8gcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbiA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKLQotICAgIHNldFN0YXJ0KHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24ucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFu
Z2Uuc3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24ucHRyKCksIGVuZE9mUGFyYWdyYXBoKHJhbmdlLmVuZFBvc2l0aW9uKCkpKTsK
LQogICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQgcmFuZ2UgcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhhdCByYW5nZS4KLSAgICAvLyBI
b3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUgaXMgbm90IHZhbGlkIGFueW1vcmUuCi0gICAgLy8gU28gYmVmb3Jl
IHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0
IHBvc2l0aW9uIG9mIHJhbmdlV2l0aEFsdGVybmF0aXZlCi0gICAgLy8gcmVsYXRpdmUgdG8gdGhl
IHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4gV2UgdXNlIGNvcnJl
Y3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoCi0gICAgLy8gdG8gc3RvcmUgdGhpcyB2YWx1ZS4g
SW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb2Zmc2V0LCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSBh
IHJhbmdlCi0gICAgLy8gd2hpY2ggc3BhbnMgZnJvbSB0aGUgc3RhcnQgb2YgcGFyYWdyYXBoIHRv
IHRoZSBzdGFydCBwb3NpdGlvbiBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZS4KLSAgICBhdXRvIGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCks
IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0UG9zaXRpb24oKSk7Ci0K
LSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdl
LnN0YXJ0UG9zaXRpb24oKTsKLSAgICBpZiAoIXN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVy
bmF0aXZlLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gc2V0RW5k
UmVzdWx0ID0gY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1JhbmdlLT5zZXRFbmQo
KnN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbnRhaW5lck5vZGUoKSwgc3Rh
cnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29tcHV0ZU9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKTsKLSAgICBpZiAoc2V0RW5kUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm47CisgICAgLy8gU28gYmVmb3JlIHdlIGNhcnJ5IG91dCB0aGUgcmVwbGFjZW1lbnQsc3Rv
cmUgdGhlIHN0YXJ0IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBwb3NpdGlvbgorICAg
IC8vIG9mIHRoZSBjb250YWluaW5nIHBhcmFncmFwaC4KIAogICAgIC8vIFRha2Ugbm90ZSBvZiB0
aGUgbG9jYXRpb24gb2YgYXV0b2NvcnJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gYWRkIG1hcmtlciBh
ZnRlciB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZS4KLSAgICBpbnQgY29ycmVjdGlvblN0YXJ0
T2Zmc2V0SW5QYXJhZ3JhcGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS5wdHIoKSk7CisgICAgYXV0byBjb3JyZWN0aW9u
U3RhcnRQb3NpdGlvbiA9IHJhbmdlLnN0YXJ0UG9zaXRpb24oKTsKKyAgICBhdXRvIGNvcnJlY3Rp
b25TdGFydCB7IG1ha2VCb3VuZGFyeVBvaW50KGNvcnJlY3Rpb25TdGFydFBvc2l0aW9uKSB9Owor
ICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgeyBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdy
YXBoKGNvcnJlY3Rpb25TdGFydFBvc2l0aW9uKSkgfTsKKyAgICBpZiAoIWNvcnJlY3Rpb25TdGFy
dCB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHRyZWVTY29w
ZVJvb3QgPSBtYWtlUmVmKGNvcnJlY3Rpb25TdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5y
b290Tm9kZSgpKTsKKyAgICBCb3VuZGFyeVBvaW50IHRyZWVTY29wZVN0YXJ0IHsgdHJlZVNjb3Bl
Um9vdC5nZXQoKSwgMCB9OworICAgIGF1dG8gY29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBoID0g
Y2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpjb3JyZWN0aW9uU3RhcnQgfSk7Cisg
ICAgYXV0byBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSA9IGNoYXJhY3RlckNvdW50KHsgdHJl
ZVNjb3BlU3RhcnQsICpwYXJhZ3JhcGhTdGFydCB9KTsKIAotICAgIC8vIENsb25lIHRoZSByYW5n
ZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBv
cmlnaW5hbCByYW5nZSBhcm91bmQuCi0gICAgYXV0byByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJh
bmdlLmNsb25lUmFuZ2UoKTsKKyAgICAvLyBDbG9uZSB0aGUgcmFuZ2UsIHNpbmNlIHRoZSBjYWxs
ZXIgb2YgbWF5IGtlZXAgYSByZWZlcm5lY2UgdG8gdGhlIG9yaWdpbmFsIHJhbmdlIGFuZCBtb2Rp
ZnkgaXQuCisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlLmNsb25l
UmFuZ2UoKSwgYWx0ZXJuYXRpdmUpLT5hcHBseSgpOwogCi0gICAgQ29udGFpbmVyTm9kZSYgcm9v
dE5vZGUgPSBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydENvbnRhaW5l
cigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Ci0gICAgaW50IHBhcmFncmFwaFN0YXJ0SW5kZXgg
PSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKFJhbmdlOjpjcmVhdGUocm9vdE5vZGUuZG9jdW1l
bnQoKSwgJnJvb3ROb2RlLCAwLCAmcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+
c3RhcnRDb250YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3Rh
cnRPZmZzZXQoKSkucHRyKCkpOwotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgYWx0ZXJuYXRpdmUpLT5hcHBseSgpOwogICAgIC8vIFJl
Y2FsY3VsYXRlIHByYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiwgc2luY2UgU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZCBtb2RpZmllZCB0aGUgRE9NLCBzdWNoIHRoYXQgdGhlIG9yaWdp
bmFsIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gaXMgbm8gbG9uZ2VyIHZhbGlk
LiBSYWRhcjogMTAzMDUzMTUgQnVnemlsbGE6IDg5NTI2Ci0gICAgYXV0byB1cGRhdGVkUGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9j
YXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3JhcGhTdGFydEluZGV4LCBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaCArIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKKyAgICBhdXRv
IHVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCh0cmVlU2NvcGVSb290LnB0cigpLCBwYXJhZ3Jh
cGhPZmZzZXRJblRyZWVTY29wZSwgY29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBoICsgYWx0ZXJu
YXRpdmUubGVuZ3RoKCkpOwogICAgIGlmICghdXBkYXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmlu
Z0NvcnJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKLQogICAgIHNldEVuZCh1cGRhdGVkUGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi5nZXQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50UmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKCp1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbiwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZl
Lmxlbmd0aCgpKTsKLSAgICBTdHJpbmcgbmV3VGV4dCA9IHBsYWluVGV4dChyZXBsYWNlbWVudFJh
bmdlLmdldCgpKTsKKyAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1
YnJhbmdlKCp1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiwgY29ycmVj
dGlvbk9mZnNldEluUGFyYWdyYXBoLCBhbHRlcm5hdGl2ZS5sZW5ndGgoKSk7CiAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgcmVwbGFjZW1lbnQgc3VjY2VlZGVkLgotICAgIGlmIChuZXdUZXh0ICE9
IGFsdGVybmF0aXZlKQorICAgIGlmIChwbGFpblRleHQocmVwbGFjZW1lbnRSYW5nZS5nZXQoKSkg
IT0gYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciYgbWFya2VycyA9IHJlcGxhY2VtZW50UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCk7Ci0KKyAgICBhdXRvJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5n
ZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKTsKICAgICBmb3IgKGF1dG8gbWFya2VyVHlwZSA6
IG1hcmtlclR5cGVzVG9BZGQpCi0gICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKCpyZXBsYWNlbWVu
dFJhbmdlLCBtYXJrZXJUeXBlLCBtYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2
ZVRleHQoYWx0ZXJuYXRpdmVUeXBlLCBtYXJrZXJUeXBlKSk7CisgICAgICAgIG1hcmtlcnMuYWRk
TWFya2VyKHJlcGxhY2VtZW50UmFuZ2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9y
QXBwbGllZEFsdGVybmF0aXZlVGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CmluZGV4IGZlMDdmNTYxNjA5NzFiMzBjYjgzZTEwYjMyYzI1ZDcwNmQwMWJjMGIuLjA5YTM3NDll
YTJiN2MzZTQ2ZjllOTZiMzQwY2JlOTRmMTNiOTQ5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0yMjMsMTkgKzIyMywxNCBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjpkb0FwcGx5KCkKIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiB7Ci0gICAgLy8gdXBkYXRlIGRvY3Vt
ZW50IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMKLSAgICAvLyBzbyB0aGF0IHdl
IGF2b2lkIHRoZSBleHBlbnNlIG9mIHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBldmVyeSBjYWxs
Ci0gICAgLy8gdG8gY2hlY2sgYSBjb21wdXRlZCBzdHlsZQorICAgIC8vIFVwZGF0ZSBkb2N1bWVu
dCBsYXlvdXQgb25jZSBiZWZvcmUgcmVtb3Zpbmcgc3R5bGVzIHNvIHRoYXQgd2UgYXZvaWQgdGhl
IGV4cGVuc2Ugb2YKKyAgICAvLyB1cGRhdGluZyBiZWZvcmUgZWFjaCBhbmQgZXZlcnkgY2FsbCB0
byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlLgogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICAvLyBnZXQgcG9zaXRpb25zIHdlIHdhbnQg
dG8gdXNlIGZvciBhcHBseWluZyBzdHlsZQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRQb3Np
dGlvbigpOwogICAgIFBvc2l0aW9uIGVuZCA9IGVuZFBvc2l0aW9uKCk7Ci0gICAgaWYgKGNvbXBh
cmVQb3NpdGlvbnMoZW5kLCBzdGFydCkgPCAwKSB7Ci0gICAgICAgIFBvc2l0aW9uIHN3YXAgPSBz
dGFydDsKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0gICAgICAgIGVuZCA9IHN3YXA7Ci0gICAgfQor
ICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGVuZCwgc3RhcnQpIDwgMCkKKyAgICAgICAgc3RkOjpz
d2FwKHN0YXJ0LCBlbmQpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFy
dCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQoZW5kKTsKQEAgLTI0NiwxNCArMjQx
LDE4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5
bGUmIHN0eWxlKQogICAgIC8vIFNhdmUgYW5kIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2lu
dHMgdXNpbmcgdGhlaXIgaW5kaWNlcyBpbiB0aGUgZWRpdGFibGUgcm9vdCwgc2luY2UKICAgICAv
LyBhZGRCbG9ja1N0eWxlSWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBjYW4gcmVt
b3ZlIHRoZXNlIGVuZHBvaW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRp
Y2VzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KLSAgICBhdXRv
KiBzY29wZSA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50
KCkpOworICAgIGF1dG8gc2NvcGUgPSBtYWtlUmVmUHRyKGhpZ2hlc3RFZGl0YWJsZVJvb3Qodmlz
aWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpKTsKICAgICBpZiAoIXNjb3BlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUpLCB2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byBlbmRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHZpc2libGVF
bmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaW50
IHN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0UmFuZ2UucHRyKCks
IHRydWUpOwotICAgIGludCBlbmRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZW5k
UmFuZ2UucHRyKCksIHRydWUpOworICAgIEJvdW5kYXJ5UG9pbnQgc2NvcGVTdGFydCB7ICpzY29w
ZSwgMCB9OworICAgIGF1dG8gc3RhcnRCb3VuZGFyeVBvaW50ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkp
OworICAgIGF1dG8gZW5kQm91bmRhcnlQb2ludCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVF
bmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYg
KCFzdGFydEJvdW5kYXJ5UG9pbnQgfHwgIWVuZEJvdW5kYXJ5UG9pbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVTdGFydCwg
KnN0YXJ0Qm91bmRhcnlQb2ludCB9LCB0cnVlKTsKKyAgICBhdXRvIGVuZEluZGV4ID0gY2hhcmFj
dGVyQ291bnQoeyBzY29wZVN0YXJ0LCAqZW5kQm91bmRhcnlQb2ludCB9LCB0cnVlKTsKIAogICAg
IFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydChzdGFydE9mUGFyYWdyYXBoKHZpc2libGVT
dGFydCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoU3RhcnQoZW5kT2ZQYXJh
Z3JhcGgocGFyYWdyYXBoU3RhcnQpLm5leHQoKSk7CkBAIC0yODUsOCArMjg0LDggQEAgdm9pZCBB
cHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiAg
ICAgfQogICAgIAogICAgIHsKLSAgICAgICAgYXV0byBzdGFydFJhbmdlID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZSwgc3RhcnRJbmRleCwgMCwgdHJ1ZSk7
Ci0gICAgICAgIGF1dG8gZW5kUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9u
QW5kTGVuZ3RoKHNjb3BlLCBlbmRJbmRleCwgMCwgdHJ1ZSk7CisgICAgICAgIGF1dG8gc3RhcnRS
YW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUuZ2V0
KCksIHN0YXJ0SW5kZXgsIDAsIHRydWUpOworICAgICAgICBhdXRvIGVuZFJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZS5nZXQoKSwgZW5kSW5kZXgs
IDAsIHRydWUpOwogICAgICAgICBpZiAoc3RhcnRSYW5nZSAmJiBlbmRSYW5nZSkKICAgICAgICAg
ICAgIHVwZGF0ZVN0YXJ0RW5kKHN0YXJ0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgZW5kUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCA3ZGRiMGFiMjUyMTk0OTMyMDU1OGVkNDExODRi
NTEwY2E5NjBlZTU2Li4wZWYzOTI3OWU0NzIwODY1MDhiZmY1N2EyYmJiMzYzMTBkOWU4Njk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApA
QCAtMTQxNyw3ICsxNDE3LDYgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFn
cmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAKICAgICBp
bnQgc3RhcnRJbmRleCA9IC0xOwogICAgIGludCBlbmRJbmRleCA9IC0xOwotICAgIGludCBkZXN0
aW5hdGlvbkluZGV4ID0gLTE7CiAgICAgYm9vbCBvcmlnaW5hbElzRGlyZWN0aW9uYWwgPSBlbmRp
bmdTZWxlY3Rpb24oKS5pc0RpcmVjdGlvbmFsKCk7CiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9u
ICYmICFlbmRpbmdTZWxlY3Rpb24oKS5pc05vbmUoKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVN0YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0x
NDMyLDE4ICsxNDMxLDIyIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3Jh
cGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKHN0YXJ0SW5QYXJh
Z3JhcGgpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KGRvY3VtZW50KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN0YXJ0UmFuZ2UucHRyKCksIHRydWUpOworICAgICAg
ICAgICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpOworICAgICAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0YXJ0ICYmIHNlbGVjdGlvblN0
YXJ0KQorICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAq
cGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydCB9LCB0cnVlKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgZW5kSW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKGVuZEluUGFyYWdy
YXBoKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpLCB2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChlbmRSYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg
YXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGhU
b01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxl
RW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgICAg
ICAgICAgICAgIGlmIChwYXJhZ3JhcGhTdGFydCAmJiBzZWxlY3Rpb25FbmQpCisgICAgICAgICAg
ICAgICAgICAgIGVuZEluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpz
ZWxlY3Rpb25FbmQgfSwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCisKICAgICBWaXNpYmxlUG9zaXRpb24gYmVmb3JlUGFyYWdyYXBoID0gc3RhcnRPZlBhcmFn
cmFwaFRvTW92ZS5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGFmdGVyUGFyYWdyYXBoKGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLm5leHQoQ2Fu
bm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpKTsKIApAQCAtMTQ3OCw5ICsxNDgxLDkgQEAgdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBzdGFydE9mUGFyYWdyYXAKICAgICAgICAgLy8gVGhlIG1vdmVkIHBhcmFncmFwaCBzaG91bGQg
YXNzdW1lIHRoZSBibG9jayBzdHlsZSBvZiB0aGUgZGVzdGluYXRpb24uCiAgICAgICAgIHN0eWxl
SW5FbXB0eVBhcmFncmFwaC0+cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgfQotICAgIAor
CiAgICAgLy8gRklYTUUgKDUwOTg5MzEpOiBXZSBzaG91bGQgYWRkIGEgbmV3IGluc2VydCBhY3Rp
b24gIldlYlZpZXdJbnNlcnRBY3Rpb25Nb3ZlZCIgYW5kIGNhbGwgc2hvdWxkSW5zZXJ0RnJhZ21l
bnQgaGVyZS4KLSAgICAKKwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KHN0YXJ0LCBlbmQsIERPV05TVFJFQU0pKTsKICAgICBmcmFtZSgpLmVkaXRvcigpLmNsZWFyTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hcihlbmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgZGVsZXRlU2Vs
ZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKQEAgLTE1MDksOCArMTUxMiw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgaWYgKCFlZGl0YWJsZVJvb3QpCiAgICAgICAg
IGVkaXRhYmxlUm9vdCA9ICZkb2N1bWVudCgpOwogCi0gICAgYXV0byBzdGFydFRvRGVzdGluYXRp
b25SYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShl
ZGl0YWJsZVJvb3QuZ2V0KCkpLCBkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBkZXN0aW5hdGlvbkluZGV4ID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChzdGFydFRvRGVzdGluYXRpb25SYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAg
YXV0byBkZXN0aW5hdGlvbkluZGV4ID0gY2hhcmFjdGVyQ291bnQoeyB7ICplZGl0YWJsZVJvb3Qs
IDAgfSwgKm1ha2VCb3VuZGFyeVBvaW50KGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpIH0sIHRydWUpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oZGVzdGluYXRpb24sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCkp
OwogICAgIEFTU0VSVChlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0T3JSYW5nZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IDhkNmJkZjQ3OGFiZjdhODllZTA2ZDFmMGM1Yzcy
OWMwZWE1YTc0MGQuLjc1ODJhODlkM2JjMmJmNDdlMmQ0MzQ4Y2E2MmRmODhlMGQ4OTk1MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTA4MywxNSArMTA4MywyMyBAQCBpbnQg
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
aXRpb24sIFJlZlB0cjxDb250YQogICAgICAgICAgICAgc2NvcGUgPSAmZG9jdW1lbnQ7CiAgICAg
fQogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIGZpcnN0UG9zaXRp
b25Jbk5vZGUoc2NvcGUuZ2V0KCkpLCBwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KSk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIHRy
dWUpOworICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChmaXJzdFBvc2l0aW9uSW5O
b2RlKHNjb3BlLmdldCgpKSk7CisgICAgYXV0byBlbmQgPSBtYWtlQm91bmRhcnlQb2ludChwb3Np
dGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKCFzdGFydCB8fCAhZW5k
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpzdGFy
dCwgKmVuZCB9LCB0cnVlKTsKIH0KIAogLy8gRklYTUU6IE1lcmdlIHRoaXMgZnVuY3Rpb24gd2l0
aCB0aGUgb25lIGFib3ZlLgogaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKE5vZGUmIG5vZGUs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBib29sIGZvclNlbGVjdGlv
blByZXNlcnZhdGlvbikKIHsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLmRv
Y3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoJm5vZGUpLCB2aXNpYmxlUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgcmV0dXJuIFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIGZvclNlbGVjdGlvblByZXNlcnZh
dGlvbik7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KGZpcnN0UG9zaXRpb25J
bk5vZGUoJm5vZGUpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2libGVQ
b3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAg
ICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNo
YXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbik7
CiB9CiAKIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZz
ZXQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgaW50IG9mZnNldCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCA4YzIzNGE0ZDkx
OTQwOGRkYWE3ZDcxNTEwOGI4NGMxZmMzMDJmNmZhLi5hZDgyNzg4OWNhYjU4NWQzMDE1OTZhNjNh
YmRlYzZmZjRiNzVlMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuY3BwCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGg6OmludmFsaWRhdGVQYXJhZ3JhcGhSYW5nZVZhbHVlcygpCiAKIGludCBUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OnJhbmdlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCgmcGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgcmV0dXJuIGNoYXJhY3RlckNv
dW50KHBhcmFncmFwaFJhbmdlKCkpOwogfQogCiBSYW5nZSYgVGV4dENoZWNraW5nUGFyYWdyYXBo
OjpwYXJhZ3JhcGhSYW5nZSgpIGNvbnN0CkBAIC0xNjUsMTQgKzE2NSwxMSBAQCBSZWY8UmFuZ2U+
IFRleHRDaGVja2luZ1BhcmFncmFwaDo6c3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwgaW50
IGNoYXJhY3RlckNvdQogCiBFeGNlcHRpb25PcjxpbnQ+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6
b2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogewotICAgIGlmICghcG9z
aXRpb24uY29udGFpbmVyTm9kZSgpKQorICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2lu
dChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSk7CisgICAgYXV0byBlbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChwb3NpdGlvbik7CisgICAgaWYgKCFzdGFydCB8fCAhZW5kKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0KLSAgICBhdXRvIHJhbmdlID0gb2Zm
c2V0QXNSYW5nZSgpLmNsb25lUmFuZ2UoKTsKLSAgICBhdXRvIHJlc3VsdCA9IHJhbmdlLT5zZXRF
bmQoKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgcG9zaXRpb24uY29tcHV0ZU9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsg
KnN0YXJ0LCAqZW5kIH0pOwogfQogCiBib29sIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aXNFbXB0
eSgpIGNvbnN0CkBAIC0yMDAsMjEgKzE5NywyMSBAQCBjb25zdCBTdHJpbmcmIFRleHRDaGVja2lu
Z1BhcmFncmFwaDo6dGV4dCgpIGNvbnN0CiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVj
a2luZ1N0YXJ0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fY2hlY2tpbmdTdGFydCkKLSAgICAgICAg
bV9jaGVja2luZ1N0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCgmb2Zmc2V0QXNSYW5n
ZSgpKTsKKyAgICAgICAgbV9jaGVja2luZ1N0YXJ0ID0gY2hhcmFjdGVyQ291bnQob2Zmc2V0QXNS
YW5nZSgpKTsKICAgICByZXR1cm4gKm1fY2hlY2tpbmdTdGFydDsKIH0KIAogaW50IFRleHRDaGVj
a2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdFbmQoKSBjb25zdAogewogICAgIGlmICghbV9jaGVja2lu
Z0VuZCkKLSAgICAgICAgbV9jaGVja2luZ0VuZCA9IGNoZWNraW5nU3RhcnQoKSArIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobV9jaGVja2luZ1JhbmdlLnB0cigpKTsKKyAgICAgICAgbV9jaGVj
a2luZ0VuZCA9IGNoZWNraW5nU3RhcnQoKSArIGNoZWNraW5nTGVuZ3RoKCk7CiAgICAgcmV0dXJu
ICptX2NoZWNraW5nRW5kOwogfQogCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2lu
Z0xlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NoZWNraW5nTGVuZ3RoKQotICAgICAgICBt
X2NoZWNraW5nTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX2NoZWNraW5nUmFu
Z2UucHRyKCkpOworICAgICAgICBtX2NoZWNraW5nTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobV9j
aGVja2luZ1JhbmdlKTsKICAgICByZXR1cm4gKm1fY2hlY2tpbmdMZW5ndGg7CiB9CiAKQEAgLTIy
Myw4ICsyMjAsMTIgQEAgaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6YXV0b21hdGljUmVwbGFj
ZW1lbnRTdGFydCgpIGNvbnN0CiAgICAgaWYgKG1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCkK
ICAgICAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQ7CiAKLSAgICBhdXRv
IHN0YXJ0T2Zmc2V0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSwg
bV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIG1fYXV0
b21hdGljUmVwbGFjZW1lbnRTdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRP
ZmZzZXRSYW5nZS5wdHIoKSk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHBh
cmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KG1fYXV0b21hdGljUmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsK
KyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9hdXRv
bWF0aWNSZXBsYWNlbWVudFN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQgfSk7
CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQ7CiB9CiAKQEAgLTIzMyw4
ICsyMzQsNyBAQCBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVu
dExlbmd0aCgpIGNvbnN0CiAgICAgaWYgKG1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGgpCiAg
ICAgICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aDsKIAotICAgIGF1dG8g
ZW5kT2Zmc2V0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSwgbV9h
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICBtX2F1dG9tYXRp
Y1JlcGxhY2VtZW50TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRPZmZzZXRS
YW5nZS5wdHIoKSkgLSBhdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KCk7CisgICAgbV9hdXRvbWF0
aWNSZXBsYWNlbWVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50KG1fYXV0b21hdGljUmVwbGFjZW1l
bnRSYW5nZSk7CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwogfQog
CkBAIC0zMjMsMjUgKzMyMywyMyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmly
c3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgIC8vIHNp
bmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCiAgICAgUmVm
PFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25lUmFuZ2UoKTsKICAgICBzZXRT
dGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpKTsKLSAgICBpbnQgdG90YWxSYW5nZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UucHRyKCkpOworICAgIGF1dG8gdG90YWxSYW5nZUxl
bmd0aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKICAgICBzZXRFbmQocGFyYWdy
YXBoUmFuZ2UucHRyKCksIGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkp
OwogICAgIAotICAgIFJlZjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFy
YWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBpbnQgcmFu
Z2VTdGFydE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgob2Zmc2V0QXNSYW5nZS5w
dHIoKSk7Ci0gICAgaW50IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKKyAgICBhdXRvIHJhbmdl
U3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3Jh
cGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgQ2hhcmFjdGVyQ291bnQgdG90YWxMZW5ndGhQcm9jZXNz
ZWQgPSAwOwogICAgIAogICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwogICAgIGJvb2wg
bGFzdEl0ZXJhdGlvbiA9IGZhbHNlOwogICAgIHdoaWxlICh0b3RhbExlbmd0aFByb2Nlc3NlZCA8
IHRvdGFsUmFuZ2VMZW5ndGgpIHsKICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWFy
Y2ggcmFuZ2UgYnkgcGFyYWdyYXBocywgY2hlY2tpbmcgZWFjaCBvbmUgZm9yIHNwZWxsaW5nIGFu
ZCBncmFtbWFyLgotICAgICAgICBpbnQgY3VycmVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UucHRyKCkpOworICAgICAgICBhdXRvIGN1cnJlbnRMZW5n
dGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7CiAgICAgICAgIGludCBjdXJyZW50
U3RhcnRPZmZzZXQgPSBmaXJzdEl0ZXJhdGlvbiA/IHJhbmdlU3RhcnRPZmZzZXQgOiAwOwogICAg
ICAgICBpbnQgY3VycmVudEVuZE9mZnNldCA9IGN1cnJlbnRMZW5ndGg7CiAgICAgICAgIGlmIChp
blNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+
ZW5kUG9zaXRpb24oKSkpIHsKICAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVy
IG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSB0byB0aGUg
ZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCiAgICAgICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQg
dG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgICAgICAgICAgYXV0byBlbmRPZmZz
ZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIo
KS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5l
bmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldEFzUmFuZ2UucHRyKCkpOworICAgICAgICAgICAgY3Vy
cmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+
ZW5kUG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAgICBsYXN0SXRlcmF0aW9uID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0IDwgY3VycmVudEVuZE9mZnNl
dCkgewpAQCAtMzk5LDEwICszOTcsOCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogCiAgICAg
ICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkgJiYgKCFjaGVja0dyYW1t
YXIgfHwgYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkgfHwgc3BlbGxpbmdMb2NhdGlvbiA8PSBn
cmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBzcGVsbGlu
Z09mZnNldCA9IHNwZWxsaW5nTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gcGFyYWdyYXBoT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlv
bigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdy
YXBoT2Zmc2V0QXNSYW5nZS5wdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KG1f
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGlu
ZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVs
bGluZ09mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVs
bGVkV29yZDsKQEAgLTQxMCwxMCArNDA2LDggQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiAhYmFk
R3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGdyYW1t
YXJQaHJhc2VPZmZzZXQgPSBncmFtbWFyUGhyYXNlTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gcGFyYWdyYXBoT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVh
dGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgbV9yYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlLnB0cigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7
ICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5k
YXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAg
ICAgICAgICAgIG91dElzU3BlbGxpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgb3V0
Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7CiAgICAgICAgICAgICAgICAg
ICAgIGZpcnN0Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKQEAgLTU1Niw3ICs1NTAsNyBA
QCBib29sIFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIEJhZCBncmFtbWFyIGF0IHN0YXJ0IG9mIHJh
bmdlLCBidXQgZW5kIG9mIGJhZCBncmFtbWFyIGlzIGJlZm9yZSBvciBhZnRlciBlbmQgb2YgcmFu
Z2UKLSAgICBpZiAoZ3JhbW1hckRldGFpbC5sZW5ndGggIT0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtX3JhbmdlLnB0cigpKSkKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdyYW1t
YXJEZXRhaWwubGVuZ3RoKSAhPSBjaGFyYWN0ZXJDb3VudChtX3JhbmdlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFVwZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8gYmUg
ZGlzcGxheWluZyB0aGlzIGVycm9yICh3aGV0aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFuZWwg
aXMgb24gc2NyZWVuKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRl
eCBlODQ0MTJiMjc2ODM1NjZmMzAzYTZkMWI5MmU2N2YzMjEyZDhkMmZkLi5lODZlYmYxOTE5MDJl
YjUzMWI4NzQ1Y2Q3NWY5ZTc4ZjU0NDk5ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
SXRlcmF0b3IuY3BwCkBAIC0yMzQzLDEyICsyMzQzLDEwIEBAIHNpemVfdCBTZWFyY2hCdWZmZXI6
Omxlbmd0aCgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tCiAKLWludCBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKGNvbnN0IFJhbmdlKiByYW5nZSwgYm9vbCBmb3JTZWxlY3Rpb25QcmVzZXJ2YXRpb24p
CitDaGFyYWN0ZXJDb3VudCBjaGFyYWN0ZXJDb3VudChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IGJvb2wgc3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cykKIHsKLSAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIGZvciAoVGV4dEl0
ZXJhdG9yIGl0KCpyYW5nZSwgZm9yU2VsZWN0aW9uUHJlc2VydmF0aW9uID8gVGV4dEl0ZXJhdG9y
RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgOiBUZXh0SXRlcmF0b3JE
ZWZhdWx0QmVoYXZpb3IpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKQorICAgIENoYXJhY3Rl
ckNvdW50IGxlbmd0aCA9IDA7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQocmFuZ2UsIHNwYWNl
c0ZvclJlcGxhY2VkRWxlbWVudHMgPyBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVu
QWxsVmlzaWJsZVBvc2l0aW9ucyA6IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvcik7ICFpdC5h
dEVuZCgpOyBpdC5hZHZhbmNlKCkpCiAgICAgICAgIGxlbmd0aCArPSBpdC50ZXh0KCkubGVuZ3Ro
KCk7CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTI0NTYsMjEgKzI0NTQsMTYgQEAgYm9vbCBU
ZXh0SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNjb3BlLCBj
b25zdCBSYW5nZSogcmFuZ2UKIAogICAgIC8vIFRoZSBjcml0aWNhbCBhc3N1bXB0aW9uIGlzIHRo
YXQgdGhpcyBvbmx5IGdldHMgY2FsbGVkIHdpdGggcmFuZ2VzIHRoYXQKICAgICAvLyBjb25jZW50
cmF0ZSBvbiBhIGdpdmVuIGFyZWEgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIHJvb3QuIFRoaXMg
aXMgZG9uZQotICAgIC8vIGJlY2F1c2Ugb2YgdGV4dCBmaWVsZHMgYW5kIHRleHRhcmVhcy4gVGhl
IERPTSBmb3IgdGhvc2UgaXMgbm90Ci0gICAgLy8gZGlyZWN0bHkgaW4gdGhlIGRvY3VtZW50IERP
TSwgc28gZW5zdXJlIHRoYXQgdGhlIHJhbmdlIGRvZXMgbm90IGNyb3NzIGEKLSAgICAvLyBib3Vu
ZGFyeSBvZiBvbmUgb2YgdGhvc2UuCisgICAgLy8gYmVjYXVzZSBvZiB0ZXh0IGZpZWxkcyBhbmQg
dGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBpcyBub3QgZGlyZWN0bHkKKyAgICAvLyBpbiB0
aGUgZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUgdGhhdCB0aGUgcmFuZ2UgZG9lcyBub3QgY3Jvc3Mg
YSBib3VuZGFyeQorICAgIC8vIG9mIG9uZSBvZiB0aG9zZS4KICAgICBpZiAoJnJhbmdlLT5zdGFy
dENvbnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0Rlc2Nl
bmRhbnRPZihzY29wZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoJnJhbmdlLT5l
bmRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLmlzRGVzY2Vu
ZGFudE9mKHNjb3BlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmPFJhbmdlPiB0
ZXN0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgJnJh
bmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJU
KCZ0ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxvY2F0aW9uID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UucHRyKCkpOwotCi0gICAgdGVzdFJh
bmdlLT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOwot
ICAgIEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBs
ZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSkgLSBsb2Nh
dGlvbjsKKyAgICBsb2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgeyAqc2NvcGUsIDAgfSwgeyBy
YW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgfSB9KTsKKyAgICBs
ZW5ndGggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAwIH0sIHsgcmFuZ2UtPmVuZENvbnRh
aW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkgfSB9KSAtIGxvY2F0aW9uOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCAxNTdmMWRh
MWQwZTZjOTUzZDlkZWRjNGVmYWNlMTNlOTgwZTMxMzRlLi45NmVjYWVlNDkzY2Q3MzRkYmU5ODlk
OWNlYWNmNWQ5OWY2OWY4ODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgK
QEAgLTM2LDcgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmFuZ2U7CiBjbGFz
cyBSZW5kZXJUZXh0RnJhZ21lbnQ7CiAKKy8vIEZJWE1FOiBEZWxldGUgdGhpcyBvdmVybG9hZCBh
ZnRlciBtb3ZpbmcgYWxsIHRoZSBjYWxsZXJzIHRvIHRoZSBTaW1wbGVSYW5nZSB2ZXJzaW9uLgog
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5nZSosIFRleHRJdGVyYXRv
ckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0
cmluZyA9IGZhbHNlKTsKKwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dChjb25zdCBT
aW1wbGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJl
aGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9IGZhbHNlKTsKIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBU
ZXh0SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgYm9vbCBp
c0Rpc3BsYXlTdHJpbmcgPSBmYWxzZSk7CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0
VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3JGb3JUZXN0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJik7
CkBAIC0xMDAsNyArMTAyLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFRleHRJdGVyYXRvckNvcHlh
YmxlVGV4dCYgY29weWFibGVUZXh0KCkgY29uc3QgeyBBU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4g
bV9jb3B5YWJsZVRleHQ7IH0KICAgICB2b2lkIGFwcGVuZFRleHRUb1N0cmluZ0J1aWxkZXIoU3Ry
aW5nQnVpbGRlciYgYnVpbGRlcikgY29uc3QgeyBjb3B5YWJsZVRleHQoKS5hcHBlbmRUb1N0cmlu
Z0J1aWxkZXIoYnVpbGRlcik7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpbnQgcmFu
Z2VMZW5ndGgoY29uc3QgUmFuZ2UqLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBm
YWxzZSk7CisgICAgLy8gRklYTUU6IE1vdmUgdGhlc2UgdG8gU2ltcGxlUmFuZ2UsIENoYXJhY3Rl
clJhbmdlLCBhbmQgQ2hhcmFjdGVyQ291bnQgYW5kIG1vdmUgb3V0IG9mIHRoaXMgY2xhc3MgdG8g
dGhlIHRvcCBsZXZlbCAoYm90dG9tIG9mIHRoaXMgZmlsZSkuCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoQ29udGFpbmVy
Tm9kZSogc2NvcGUsIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgsIGJvb2wgc3Bh
Y2VzRm9yUmVwbGFjZWRFbGVtZW50cyA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgYm9vbCBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShOb2RlKiBzY29wZSwgY29uc3Qg
UmFuZ2UqLCBzaXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gc3VicmFuZ2UoUmFuZ2UmIGVudGlyZVJhbmdlLCBpbnQg
Y2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpOwpAQCAtMjg3LDQgKzI4OSwxMyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRMb29rQWhlYWQgeyB0cnVlIH07CiB9OwogCit1c2lu
ZyBDaGFyYWN0ZXJDb3VudCA9IHNpemVfdDsKKworc3RydWN0IENoYXJhY3RlclJhbmdlIHsKKyAg
ICBDaGFyYWN0ZXJDb3VudCBsb2NhdGlvbiB7IDAgfTsKKyAgICBDaGFyYWN0ZXJDb3VudCBsZW5n
dGggeyAwIH07Cit9OworCitXRUJDT1JFX0VYUE9SVCBDaGFyYWN0ZXJDb3VudCBjaGFyYWN0ZXJD
b3VudChjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wgc3BhY2VzRm9yUmVwbGFjZWRFbGVtZW50cyA9
IGZhbHNlKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDZiOTBmZmRiZTU0YWVjZTg2MzM1MTMxMmEyNWIx
MmFlOGQyY2UxYTAuLjk3MzAyY2Y1MmE0MzllMDdhZGYwYzhlYzliOGExZGNlYmFjYzExZjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMSBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTgxOSw2ICs4MTksMTEgQEAgYm9vbCBWaXNpYmxlUG9z
aXRpb246OmVxdWFscyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIG90aGVyKSBjb25zdAogICAgIHJl
dHVybiBtX2FmZmluaXR5ID09IG90aGVyLm1fYWZmaW5pdHkgJiYgbV9kZWVwUG9zaXRpb24uZXF1
YWxzKG90aGVyLm1fZGVlcFBvc2l0aW9uKTsKIH0KIAorT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4g
bWFrZUJvdW5kYXJ5UG9pbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAg
ICByZXR1cm4gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Cit9
CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgc3RyZWFtLCBFQWZmaW5pdHkg
YWZmaW5pdHkpCiB7CiAgICAgc3dpdGNoIChhZmZpbml0eSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXggNDg1NjY4MjRlZDczZmRhY2QyNTcwOGRlMzE5MzE0
ZTYxOTJjMDJmMC4uZjg0YmNkZmQ3MmY1YmM0NTc2MzNkYTQ4MzI3MjFlNTI3N2EyNDg1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCw2
IEBACiAjaW5jbHVkZSAiRWRpdGluZ0JvdW5kYXJ5LmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIK
IAotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFJhbmdlOwpAQCAtNDksOSArNDUsNiBAQCBjbGFzcyBSYW5nZTsKIC8v
IHBvc2l0aW9uIGlzIG5vdCBhdCBhIGxpbmUgYnJlYWsuCiAjZGVmaW5lIFZQX1VQU1RSRUFNX0lG
X1BPU1NJQkxFIFVQU1RSRUFNCiAKLWNsYXNzIElubGluZUJveDsKLWNsYXNzIE5vZGU7Ci0KIGNs
YXNzIFZpc2libGVQb3NpdGlvbiB7CiBwdWJsaWM6CiAgICAgLy8gTk9URTogVVBTVFJFQU0gYWZm
aW5pdHkgd2lsbCBiZSB1c2VkIG9ubHkgaWYgcG9zIGlzIGF0IGVuZCBvZiBhIHdyYXBwZWQgbGlu
ZSwKQEAgLTg1LDIxICs3OCwxNiBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
IG5vdCBoYW5kbGUgW3RhYmxlLCAwXSBjb3JyZWN0bHkuCiAgICAgRWxlbWVudCogcm9vdEVkaXRh
YmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90TnVsbCgpID8g
bV9kZWVwUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDog
MDsgfQotICAgIAotICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KElubGluZUJveComIGlu
bGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG1fZGVlcFBv
c2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBpbmxpbmVCb3gsIGNhcmV0
T2Zmc2V0KTsKLSAgICB9CiAKLSAgICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChUZXh0RGly
ZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJl
dE9mZnNldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG1fZGVlcFBvc2l0aW9uLmdldElubGluZUJv
eEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0
T2Zmc2V0KTsKLSAgICB9CisgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94
KiYsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zm
c2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYsIGludCYgY2Fy
ZXRPZmZzZXQpIGNvbnN0OwogCiAgICAgLy8gUmVjdCBpcyBsb2NhbCB0byB0aGUgcmV0dXJuZWQg
cmVuZGVyZXIKICAgICBXRUJDT1JFX0VYUE9SVCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KFJl
bmRlck9iamVjdComKSBjb25zdDsKKwogICAgIC8vIEJvdW5kcyBvZiAocG9zc2libHkgdHJhbnNm
b3JtZWQpIGNhcmV0IGluIGFic29sdXRlIGNvb3JkcwogICAgIFdFQkNPUkVfRVhQT1JUIEludFJl
Y3QgYWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0
OworCiAgICAgLy8gQWJzIHgveSBwb3NpdGlvbiBvZiB0aGUgY2FyZXQgaWdub3JpbmcgdHJhbnNm
b3Jtcy4KICAgICAvLyBGSVhNRTogbmF2aWdhdGlvbiB3aXRoIHRyYW5zZm9ybXMgc2hvdWxkIGJl
IHNtYXJ0ZXIuCiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGxpbmVEaXJlY3Rpb25Qb2ludEZvckJs
b2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpIGNvbnN0OwpAQCAtMTA3LDcgKzk1LDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBhYnNvbHV0ZVNlbGVjdGlvbkJvdW5kc0Zv
ckxpbmUoKSBjb25zdDsKIAogICAgIC8vIFRoaXMgaXMgYSB0ZW50YXRpdmUgZW5oYW5jZW1lbnQg
b2Ygb3BlcmF0b3I9PSB0byBhY2NvdW50IGZvciBhZmZpbml0eS4KLSAgICAvLyBGSVhNRTogQ29t
YmluZSB0aGlzIGZ1bmN0aW9uIHdpdGggb3BlcmF0b3I9PQorICAgIC8vIEZJWE1FOiBDb21iaW5l
IHRoaXMgZnVuY3Rpb24gd2l0aCBvcGVyYXRvcj09LgogICAgIGJvb2wgZXF1YWxzKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpIGNvbnN0OwogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpAQCAt
MTE1LDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIq
IGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lkIHNob3dUcmVlRm9yVGhp
cygpIGNvbnN0OwogI2VuZGlmCi0gICAgCisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KGNvbnN0
IFBvc2l0aW9uJiwgRUFmZmluaXR5KTsKICAgICBQb3NpdGlvbiBjYW5vbmljYWxQb3NpdGlvbihj
b25zdCBQb3NpdGlvbiYpOwpAQCAtMTI3LDIzICsxMTUsNTAgQEAgcHJpdmF0ZToKICAgICBFQWZm
aW5pdHkgbV9hZmZpbml0eTsKIH07CiAKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0b3I8
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBv
cGVyYXRvcj4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
Citib29sIG9wZXJhdG9yPD0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJik7Citib29sIG9wZXJhdG9yPj0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CisKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPEJvdW5kYXJ5UG9p
bnQ+IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCitXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgc2V0U3RhcnQoUmFuZ2UqLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKK2Jvb2wgc2V0RW5kKFJhbmdlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CitWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UqLCBF
QWZmaW5pdHkpOworVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5n
ZSosIEVBZmZpbml0eSk7CisKK1dFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIGVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisKK2Jvb2wgaXNGaXJzdFZpc2li
bGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBOb2RlKik7Citi
b29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBj
b25zdCBOb2RlKik7CisKK2Jvb2wgYXJlVmlzaWJsZVBvc2l0aW9uc0luU2FtZVRyZWVTY29wZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKworV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEVBZmZpbml0eSk7CitXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisKKy8vIGlubGluZXMKKwogLy8gRklYTUU6IFRoaXMg
c2hvdWxkbid0IGlnbm9yZSBhZmZpbml0eS4KIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0
dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA9PSBiLmRlZXBFcXVpdmFsZW50KCk7CiB9Ci0gCisKIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KLSAgICAKKwogaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBiKQogewogICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPCBiLmRlZXBF
cXVpdmFsZW50KCk7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBWaXNpYmxlUG9z
aXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikgCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7
CiAgICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA+IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0K
QEAgLTE1MywyNiArMTY4LDIwIEBAIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiAgICAgcmV0dXJuIGEuZGVl
cEVxdWl2YWxlbnQoKSA8PSBiLmRlZXBFcXVpdmFsZW50KCk7CiB9CiAKLWlubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGIpIAoraW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgp
ID49IGIuZGVlcEVxdWl2YWxlbnQoKTsKLX0gICAgCi0KLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxS
YW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOwotYm9vbCBzZXRTdGFydChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwot
Ym9vbCBzZXRFbmQoUmFuZ2UqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLVZpc2libGVQb3Np
dGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVBZmZpbml0eSk7Ci1WaXNp
YmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsK
LQotV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25z
dCBWaXNpYmxlUG9zaXRpb24mKTsKLQotYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2Rl
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKLWJvb2wgaXNMYXN0VmlzaWJs
ZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKK30K
IAotYm9vbCBhcmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworaW5saW5lIHZvaWQgVmlzaWJsZVBv
c2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQm
IGNhcmV0T2Zmc2V0KSBjb25zdAoreworICAgIG1fZGVlcFBvc2l0aW9uLmdldElubGluZUJveEFu
ZE9mZnNldChtX2FmZmluaXR5LCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKK30KIAotV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEVBZmZpbml0eSk7Ci1XRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitpbmxpbmUgdm9pZCBWaXNpYmxlUG9zaXRpb246Omdl
dElubGluZUJveEFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGlu
ZUJveComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKK3sKKyAgICBtX2RlZXBQ
b3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURpcmVjdGlv
biwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IDkxMDlhYjk1NDkw
NjlmMzYwNGYwOTg2YWM5OGU4Yjk5NDQ5YTE0YWUuLmFmZjM2ZDQ4MTg4NzI2ZjI4YjBiYzM3OTk5
MTlhZTdjMGVmMmU3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVVuaXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAK
QEAgLTE5MDEsMjAgKzE5MDEsMTMgQEAgUmVmUHRyPFJhbmdlPiBlbmNsb3NpbmdUZXh0VW5pdE9m
R3JhbnVsYXJpdHkoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgVGV4dEdyYW4KICAgICByZXR1
cm4gUmFuZ2U6OmNyZWF0ZShwcmV2Qm91bmRhcnkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpLT5kb2N1bWVudCgpLCBwcmV2Qm91bmRhcnksIG5leHRCb3VuZGFyeSk7CiB9CiAKLWlu
dCBkaXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBvdGhlcikKK3B0cmRpZmZfdCBkaXN0YW5jZUJldHdlZW5Qb3Np
dGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIp
CiB7Ci0gICAgaWYgKHZwLmlzTnVsbCgpIHx8IG90aGVyLmlzTnVsbCgpKQorICAgIGlmIChhLmlz
TnVsbCgpIHx8IGIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotCi0gICAgYm9vbCB0aGlz
SXNTdGFydCA9ICh2cCA8IG90aGVyKTsKLQotICAgIC8vIFN0YXJ0IG11c3QgY29tZSBmaXJzdCBp
biB0aGUgUmFuZ2UgY29uc3RydWN0b3IuCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
dnAuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzSXNTdGFydCA/IHZwIDogb3Ro
ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzSXNTdGFy
dCA/IG90aGVyIDogdnApKTsKLSAgICBpbnQgZGlzdGFuY2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHJhbmdlLnB0cigpKTsKLQotICAgIHJldHVybiAodGhpc0lzU3RhcnQgPyAtZGlzdGFu
Y2UgOiBkaXN0YW5jZSk7CisgICAgcmV0dXJuIGEgPCBiCisgICAgICAgID8gLWNoYXJhY3RlckNv
dW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KGEpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoYikgfSkKKyAg
ICAgICAgOiBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChiKSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KGEpIH0pOwogfQogCiB2b2lkIGNoYXJhY3RlcnNBcm91bmRQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBVQ2hhcjMyJiBvbmVBZnRlciwgVUNoYXIzMiYg
b25lQmVmb3JlLCBVQ2hhcjMyJiB0d29CZWZvcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuaAppbmRleCA2NzE3ZWIxMWRkZGJkODY4ZTQ0MTRjMzk4MDMzNTJhMDMxNmFmZTNlLi5j
ZThjNTBmNTc5MzYwZTAxY2ZkYzg1MmZlYTU4MWY5ZTQyNWE0ODM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVVuaXRzLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBXRUJDT1JFX0VYUE9SVCBi
b29sIGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRH
cmFudWxhcgogV0VCQ09SRV9FWFBPUlQgYm9vbCB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b24pOwogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uT2ZOZXh0Qm91bmRh
cnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZW5jbG9z
aW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFu
dWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKLVdFQkNPUkVfRVhQT1JUIGludCBkaXN0YW5j
ZUJldHdlZW5Qb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBwdHJkaWZmX3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRp
b25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uJik7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gY2xvc2VzdFdv
cmRCb3VuZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pOwog
V0VCQ09SRV9FWFBPUlQgdm9pZCBjaGFyYWN0ZXJzQXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgVUNoYXIzMiYgb25lQWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIz
MiYgdHdvQmVmb3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RGF0YURldGVjdGlvbi5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5tbQppbmRleCAxMDNlNTUzYjIzN2E5MTk3YmMzOGQyNDIxNjAyNDZjNmQyMzIyNjM1Li4y
YjkzMTdiMTcxM2YyNjBhMmRhZjM4YzViMWZiYTRlMDg0YWI3Y2E2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCkBAIC03MSwxNSArNzEsMTggQEAg
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250
ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJv
dW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKIHsKICAgICBTdHJp
bmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwot
ICAgIGludCBoaXRMb2NhdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdl
KGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbikuZ2V0KCkpOworICAgIGF1
dG8gc3RhcnQgPSBjb250ZXh0UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhcnQu
aXNOdWxsKCkgfHwgcG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
Q0ZJbmRleCBoaXRMb2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50
KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKIAotICAgIFJldGFpblB0
cjxERFNjYW5uZXJSZWY+IHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5u
ZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKLSAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlS
ZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0cmluZy5sZW5ndGgoKSkpKTsKKyAgICBh
dXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRh
cmQsIDAsIG51bGxwdHIpKTsKKyAgICBhdXRvIHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVl
cnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJp
bmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0
cmluZy5sZW5ndGgoKSkpKTsKIAogICAgIGlmICghRERTY2FubmVyU2NhblF1ZXJ5KHNjYW5uZXIu
Z2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHJlc3VsdHMgPSBhZG9w
dENGKEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlvbnMoc2Nhbm5lci5nZXQoKSwgRERTY2Fu
bmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwKSk7CisgICAgYXV0byByZXN1bHRzID0gYWRv
cHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nh
bm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOwogCiAgICAgLy8gRmluZCB0aGUgRERS
ZXN1bHRSZWYgdGhhdCBpbnRlcnNlY3RzIHRoZSBoaXRUZXN0UmVzdWx0J3MgVmlzaWJsZVBvc2l0
aW9uLgogICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQgPSBudWxscHRyOwpAQCAtMTAwLDcgKzEw
Myw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24KICAgICB9CiAKICAgICBpZiAoIW1haW5SZXN1
bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbmlsOwogCiAgICAg
UmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gYWN0aW9uQ29udGV4dCA9IGFkb3B0TlMoW2FsbG9j
RERBY3Rpb25Db250ZXh0SW5zdGFuY2UoKSBpbml0XSk7CiAgICAgW2FjdGlvbkNvbnRleHQgc2V0
QWxsUmVzdWx0czpAWyAoX19icmlkZ2UgaWQpbWFpblJlc3VsdCBdXTsKQEAgLTExMiw5ICsxMTUs
OSBAQCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRp
b25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBt
YWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CiAgICAgZm9yIChjb25zdCBh
dXRvJiBxdWFkIDogcXVhZHMpCiAgICAgICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LnVuaXRl
KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkp
KTsKLSAgICAKKwogICAgIGRldGVjdGVkRGF0YVJhbmdlID0gbWFpblJlc3VsdFJhbmdlOwotICAg
IAorCiAgICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCA4Nzk3MjIwMjg0NjhmMDNl
MDJlYWU1OWI1NWEyOWEyM2RlY2U5MmVlLi5kNjQ4ZmQ3MGZjMzhmYzkyYzI0ZTUxNzg5MDQ3Y2Vm
NjI2M2ZhNTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9u
YXJ5TG9va3VwLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjY0LDEyICsyNjQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
c3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1
cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKKwogICAgIGlmICghUmV2
ZWFsTGlicmFyeSgpIHx8ICFSZXZlYWxDb3JlTGlicmFyeSgpIHx8ICFnZXRSVkl0ZW1DbGFzcygp
KQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAKLSAgICBhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UpCisKKyAgICBpZiAoIXNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAogICAgIC8vIFNpbmNlIHdlIGFscmVhZHkg
aGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVk
IG9wdGlvbnMuCkBAIC0yNzksMjAgKzI3OCwyMiBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4s
IE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwog
ICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBh
cmFncmFwaHMgb2YgdGV4dC4KICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCk7CiAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFn
cmFwaChzZWxlY3Rpb25FbmQpOworICAgIGlmIChwYXJhZ3JhcGhTdGFydC5pc051bGwoKSB8fCBw
YXJhZ3JhcGhFbmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owor
CisgICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFr
ZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0
aW9uU3RhcnQpIH0pOworICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0
ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRh
cnlQb2ludChzZWxlY3Rpb25FbmQpIH0pOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01h
a2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7
CiAKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwot
ICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
bWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKTsKLSAgICBOU1Jh
bmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVu
Z3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0KTsKLSAgICAKICAgICBS
ZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFy
dCwgcGFyYWdyYXBoRW5kKTsKICAgICBTdHJpbmcgaXRlbVN0cmluZyA9IHBsYWluVGV4dChmdWxs
Q2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwogICAgIFJldGFpblB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9w
dE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0
ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwogICAgIE5TUmFuZ2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVt
LmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAorCiAgICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9y
OjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBoaWdobGlnaHRSYW5nZS5sb2NhdGlvbiwg
aGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0gICAgCisKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotICAgIAorCiAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiB9CiAK
QEAgLTMyMiw0MyArMzIzLDQwIEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9u
YXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0CiAKICAgICBhdXRv
IHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE5TUmFuZ2Ugc2VsZWN0aW9u
UmFuZ2U7Ci0gICAgaW50IGhpdEluZGV4OworICAgIE5TVUludGVnZXIgaGl0SW5kZXg7CiAgICAg
UmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7CiAgICAgCiAgICAgaWYgKHNlbGVjdGlv
bi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsK
ICAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsK
ICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotICAg
ICAgICAKKwogICAgICAgICAvLyBBcyBjb250ZXh0LCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBz
dXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCiAgICAgICAgIGF1dG8gcGFyYWdyYXBoU3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKICAgICAgICAgYXV0byBwYXJh
Z3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOwogICAgICAgICAKLSAgICAg
ICAgYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uRW5kID0gbWFr
ZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgICAgICAKICAgICAgICAg
ZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhF
bmQpOwogICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG5pbCB9OwogCi0gICAgICAgIHNlbGVjdGlvblJhbmdlID0gTlNNYWtlUmFu
Z2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkp
LCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzZWxlY3Rpb25TdGFydCwgc2Vs
ZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcG9zaXRpb24pLmdl
dCgpKTsKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3Vu
dCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2lu
dChzZWxlY3Rpb25TdGFydCkgfSksCisgICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rp
b25FbmQpIH0pKTsKKyAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91
bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikg
fSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2Nv
dW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsKICAgICAgICAgc2VsZWN0aW9uQWNjb3Vu
dGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7
CiAgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5zdGFy
dCgpOworCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2UgMjUwIGNo
YXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwb2ludC4KICAgICAgICAgZnVs
bENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJz
KHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKICAgICAgICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFu
Z2UpCiAgICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLSAgICAgICAgCisKICAg
ICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICAg
ICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hh
cmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb24pLmdldCgpKTsKKyAgICAgICAg
aGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChmdWxsQ2hhcmFj
dGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikg
fSk7CiAgICAgfQotICAgIAorCiAgICAgTlNSYW5nZSBzZWxlY3RlZFJhbmdlID0gW2dldFJWU2Vs
ZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6
QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rpb25SYW5nZV1dIHNob3VsZFVwZGF0ZVNl
bGVjdGlvbjpuaWxdOwotICAgIAorCiAgICAgU3RyaW5nIGl0ZW1TdHJpbmcgPSBwbGFpblRleHQo
KmZ1bGxDaGFyYWN0ZXJSYW5nZSk7CiAgICAgUmV0YWluUHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0
TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0aFRleHQ6aXRlbVN0cmluZyBzZWxlY3Rl
ZFJhbmdlOnNlbGVjdGVkUmFuZ2VdKTsKICAgICBOU1JhbmdlIGhpZ2hsaWdodFJhbmdlID0gaXRl
bS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKaW5kZXggOWMxYWU4ODg5NTFmYjNiYjI1NmVkN2Uw
OWUyNDE3NmJjOGQzYzM4OS4uYTJiODE4Mjg3N2IyOGFmMjljOGEwNjM5NTRkMzc0Y2Q1YWE1YTVk
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFu
ZElPUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFu
ZElPUy5jcHAKQEAgLTQ4LDkgKzQ4LDcgQEAgRGljdGF0aW9uQ29tbWFuZElPUzo6RGljdGF0aW9u
Q29tbWFuZElPUyhEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3RvcjxWZWN0b3I8U3RyaW4KIAogdm9p
ZCBEaWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KCkKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24g
aW5zZXJ0aW9uUG9zaXRpb24oc3RhcnRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0K
LSAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSAwOworICAgIENoYXJhY3RlckNvdW50IHJlc3Vs
dExlbmd0aCA9IDA7CiAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbnMgOiBtX2RpY3RhdGlv
blBocmFzZXMpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBmaXJzdEludGVycHJldGF0aW9uID0g
aW50ZXJwcmV0YXRpb25zWzBdOwogICAgICAgICByZXN1bHRMZW5ndGggKz0gZmlyc3RJbnRlcnBy
ZXRhdGlvbi5sZW5ndGgoKTsKQEAgLTYyLDIwICs2MCwyMyBAQCB2b2lkIERpY3RhdGlvbkNvbW1h
bmRJT1M6OmRvQXBwbHkoKQogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVj
dGlvbihlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKTsKICAgICB9CiAKLSAgICBWaXNp
YmxlUG9zaXRpb24gYWZ0ZXJSZXN1bHRzKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVFbmQoKSk7
CisgICAgLy8gRklYTUU6IEFkZCB0aGUgcmVzdWx0IG1hcmtlciB1c2luZyBhIFBvc2l0aW9uIGNh
Y2hlZCBiZWZvcmUgcmVzdWx0cyBhcmUgaW5zZXJ0ZWQsIGluc3RlYWQgb2YgcmVseWluZyBvbiBj
aGFyYWN0ZXIgY291bnRzLgogCi0gICAgRWxlbWVudCogcm9vdCA9IGFmdGVyUmVzdWx0cy5yb290
RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IGVuZGluZ1NlbGVjdGlv
bigpLnZpc2libGVFbmQoKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZFBv
c2l0aW9uKTsKKyAgICBhdXRvKiByb290ID0gZW5kUG9zaXRpb24ucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOworICAgIGlmICghZW5kIHx8ICFyb290KQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBG
SVhNRTogQWRkIHRoZSByZXN1bHQgbWFya2VyIHVzaW5nIGEgUG9zaXRpb24gY2FjaGVkIGJlZm9y
ZSByZXN1bHRzIGFyZSBpbnNlcnRlZCwgaW5zdGVhZCBvZiByZWx5aW5nIG9uIFRleHRJdGVyYXRv
cnMuCi0gICAgYXV0byByYW5nZVRvRW5kID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oKE5vZGUgKilyb290LCAwKSwgYWZ0ZXJSZXN1bHRzLmRl
ZXBFcXVpdmFsZW50KCkpOwotICAgIGludCBlbmRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgocmFuZ2VUb0VuZC5wdHIoKSwgdHJ1ZSk7Ci0gICAgaW50IHN0YXJ0SW5kZXggPSBlbmRJ
bmRleCAtIHJlc3VsdExlbmd0aDsKKyAgICBhdXRvIGVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50
KHsgeyAqcm9vdCwgMCB9LCBXVEZNb3ZlKCplbmQpIH0pOworICAgIGlmIChlbmRPZmZzZXQgPCBy
ZXN1bHRMZW5ndGgpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdGFydEluZGV4ID49IDAp
IHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSwgc3Rh
cnRJbmRleCwgZW5kSW5kZXgsIHRydWUpOwotICAgICAgICBBU1NFUlQocmVzdWx0UmFuZ2UpOyAv
LyBGSVhNRTogV2hhdCBndWFyYW50ZWVzIHRoaXM/Ci0gICAgICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcigqcmVzdWx0UmFuZ2UsIG1fbWV0YWRhdGEpOwot
ICAgIH0KKyAgICBhdXRvIHJlc3VsdFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2Nh
dGlvbkFuZExlbmd0aChyb290LCBlbmRPZmZzZXQgLSByZXN1bHRMZW5ndGgsIGVuZE9mZnNldCk7
CisgICAgaWYgKCFyZXN1bHRSYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG9jdW1lbnQo
KS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKCpyZXN1bHRSYW5nZSwgbV9tZXRh
ZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IDE2MTU5MDdk
NjkxMTBjNjg1Zjc3MzA3MzE4YmIyYTU1NzE5NjhhNGUuLjUxMzViOTA2ZGVlMThlMDE3NzllYzYx
MTQ3NDMxYzc5NWUzOGE1OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDEwICs4OSwxMiBAQCBzdGQ6OnR1
cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUZvclNlbGVjdGlvbihjbwogICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0byB1c2Ug
dGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KICAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CiAgICAgYXV0byBwYXJhZ3Jh
cGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgIGlmIChwYXJhZ3JhcGhT
dGFydC5pc051bGwoKSB8fCBwYXJhZ3JhcGhFbmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7
IG51bGxwdHIsIG5pbCB9OwogCi0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9u
U3RhcnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uRW5kKS5n
ZXQoKSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2Vs
ZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFy
dCk7CisgICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAq
bWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2Vs
ZWN0aW9uU3RhcnQpIH0pOworICAgIGF1dG8gc2VsZWN0aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFy
YWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91
bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH0pOworICAgIE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBO
U01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3Vu
dCk7CiAKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBuaWw7CiAgICAgdG9rZW5SYW5nZShw
bGFpblRleHQobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpLmdldCgpKSwg
cmFuZ2VUb1Bhc3MsICZvcHRpb25zKTsKQEAgLTEzMyw3ICsxMzUsMTIgQEAgc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQKICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJSYW5nZSkKICAgICAgICAgcmV0dXJu
IHsgbnVsbHB0ciwgbmlsIH07CiAKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFu
Z2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UoZnVsbENoYXJhY3RlclJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQoKSksIDApOworICAgIGF1dG8gZnVsbENo
YXJhY3RlclN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpOworICAgIGF1dG8gcG9zaXRpb25Cb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBv
aW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJTdGFydCB8fCAhcG9zaXRpb25C
b3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CisKKyAgICBOU1Jhbmdl
IHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFjdGVyQ291bnQoeyAqZnVsbENoYXJhY3Rl
clN0YXJ0LCAqcG9zaXRpb25Cb3VuZGFyeSB9KSwgMCk7CiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRp
b25zID0gbmlsOwogICAgIE5TUmFuZ2UgZXh0cmFjdGVkUmFuZ2UgPSB0b2tlblJhbmdlKHBsYWlu
VGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpLCByYW5nZVRvUGFzcywgJm9wdGlvbnMpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggZWRlMGI0YTAwOGFjOTk5YzA0
YTRjYzY4ZjdhZWQ5YWEyZGI2Y2VhZi4uOTg2N2QwNjNhNjdiNDBjMzdkYmI0YmUxNGM3MjFkMDY1
ODRjYWVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNjU0LDEwICs2
NTQsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFRyaXBsZUNs
aWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFIKICAgICByZXR1cm4gdXBkYXRlU2VsZWN0
aW9uRm9yTW91c2VEb3duRGlzcGF0Y2hpbmdTZWxlY3RTdGFydCh0YXJnZXROb2RlLCBleHBhbmRT
ZWxlY3Rpb25Ub1Jlc3BlY3RTZWxlY3RPbk1vdXNlRG93bigqdGFyZ2V0Tm9kZSwgbmV3U2VsZWN0
aW9uKSwgUGFyYWdyYXBoR3JhbnVsYXJpdHkpOwogfQogCi1zdGF0aWMgaW50IHRleHREaXN0YW5j
ZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCitzdGF0aWMgQ2hh
cmFjdGVyQ291bnQgdGV4dERpc3RhbmNlKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzdGFydC5hbmNo
b3JOb2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwotICAgIHJldHVybiBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICBhdXRvIHN0YXJ0Qm91bmRh
cnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7CisgICAgYXV0byBlbmRCb3VuZGFyeSA9IG1h
a2VCb3VuZGFyeVBvaW50KGVuZCk7CisgICAgaWYgKCFzdGFydEJvdW5kYXJ5IHx8ICFlbmRCb3Vu
ZGFyeSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnN0
YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9LCB0cnVlKTsKIH0KIAogYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMmIGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
RWRpdGluZ1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAK
aW5kZXggMWFmYWU1ZWJiZjVlNjNkOWJlZGYzMDM5ZGY0NDUxYzliNTUzYTYzOC4uYjg5OTMzZmZh
MWJmMjg0M2MyNmZkYmQ2NmQyOTI2ZWQwMGM1ZjZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0
aW5nUmFuZ2UuY3BwCkBAIC01OCwxOCArNTgsMTcgQEAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBF
ZGl0aW5nUmFuZ2U6OnRvUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBFZGl0aW4K
IAogICAgIEFTU0VSVChlZGl0aW5nUmFuZ2VJc1JlbGF0aXZlVG8gPT0gRWRpdGluZ1JhbmdlSXNS
ZWxhdGl2ZVRvOjpQYXJhZ3JhcGgpOwogCi0gICAgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgIGF1dG8mIHNlbGVjdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwotICAg
IGlmICghcGFyYWdyYXBoUmFuZ2UpCisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3Vu
ZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKSk7Cisg
ICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0
byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOwogCi0gICAgYXV0byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhSYW5nZS5nZXQoKS0+c3Rh
cnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwotICAgIGludCBwYXJhZ3JhcGhT
dGFydEluZGV4ID0gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChXZWJDb3JlOjpS
YW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50KCksICZyb290Tm9kZSwgMCwgJnBhcmFncmFw
aFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRPZmZzZXQoKSku
cHRyKCkpOwotICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0
aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCArIHN0YXRpY19jYXN0
PGludD4ocmFuZ2UubG9jYXRpb24pLCBsZW5ndGgpOworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnRJ
bmRleCA9IFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KHsgeyByb290Tm9kZSwgMCB9LCAqcGFyYWdy
YXBoU3RhcnQgfSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9t
TG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBwYXJhZ3JhcGhTdGFydEluZGV4ICsgcmFuZ2Uu
bG9jYXRpb24sIGxlbmd0aCk7CiB9CiAKIEVkaXRpbmdSYW5nZSBFZGl0aW5nUmFuZ2U6OmZyb21S
YW5nZShXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlJhbmdlKiByYW5nZSwg
RWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvIGVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAKaW5kZXggOWUyNDc1OGNkOTJjZjc1MDg2ZmNjMjE4MjRiMzVjODgwNzEy
MzI3My4uOWNlNWRiYWMxMTRhNDk1ZmVhNGE5ZTk1M2Q5YmZmYzgxZWJkNzZjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAKQEAgLTM2MSw2ICszNjEsNyBAQCBXZWJDb3JlOjpET01QYXN0ZUFjY2Vz
c1Jlc3BvbnNlIFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdERPTVBhc3RlQWNjZXNzKGNvbnN0IFN0
cgogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEdMSUIpCisKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQmIGV2ZW50KQogewog
ICAgIGlmIChtX3BhZ2UtPmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KGV2ZW50KSkKQEAgLTM3
MSw2ICszNzIsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlk
b3duKEtleWJvYXJkRXZlbnQmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisKICNlbmRp
ZiAvLyAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoR0xJQikKIAogdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQpAQCAtNDIwLDYg
KzQyMiw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShF
bGVtZW50KiBlbGVtZW50KQogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZCgpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKQEAgLTQyOSw2ICs0MzIsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6c3ViRnJhbWVTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgYm9vbCBnZXRBY3Rpb25UeXBlRm9yS2V5RXZlbnQo
S2V5Ym9hcmRFdmVudCogZXZlbnQsIFdLSW5wdXRGaWVsZEFjdGlvblR5cGUmIHR5cGUpCkBAIC01
NDksMjAgKzU1MywyNSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJp
bmcoU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3JhbQogICAgICpiYWRHcmFtbWFy
TGVuZ3RoID0gcmVzdWx0TGVuZ3RoOwogfQogCi1zdGF0aWMgaW50MzJfdCBpbnNlcnRpb25Qb2lu
dEZyb21DdXJyZW50U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxl
Y3Rpb24pCitzdGF0aWMgQ2hhcmFjdGVyQ291bnQgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewotICAg
IFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBh
cmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwor
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50U2VsZWN0aW9uLnZpc2libGVTdGFydCgp
OworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHNl
bGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9p
bnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCkpOworICAgIGlmICghc2VsZWN0aW9u
U3RhcnRCb3VuZGFyeSB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0
Qm91bmRhcnkgfSk7CiB9CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorCiBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgT3B0aW9uU2V0PFdlYkNvcmU6OlRleHRDaGVja2lu
Z1R5cGU+IGNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxl
Y3Rpb24pCiB7CiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICBt
X3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdy
YXBoKHN0cmluZ1ZpZXcudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBjaGVja2luZ1R5cGVzLCBp
bnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSwgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMp
KTsKICAgICByZXR1cm4gcmVzdWx0czsKIH0KKwogI2VuZGlmCiAKIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRH
cmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQpAQCAtNjE2
LDE1ICs2MjUsMTMgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNldElucHV0TWV0aG9kU3RhdGUo
RWxlbWVudCogZWxlbWVudCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnN1cHBvcnRzR2xvYmFs
U2VsZWN0aW9uKCkKIHsKLSNpZiBQTEFURk9STShHVEspCi0jaWYgUExBVEZPUk0oWDExKQorI2lm
IFBMQVRGT1JNKEdUSykgJiYgUExBVEZPUk0oWDExKQogICAgIGlmIChQbGF0Zm9ybURpc3BsYXk6
OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgPT0gUGxhdGZvcm1EaXNwbGF5OjpUeXBlOjpYMTEpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKKyNpZiBQ
TEFURk9STShHVEspICYmIFBMQVRGT1JNKFdBWUxBTkQpCiAgICAgaWYgKFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheSgpLnR5cGUoKSA9PSBQbGF0Zm9ybURpc3BsYXk6OlR5cGU6OldheWxh
bmQpCiAgICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCiAjZW5kaWYKICAgICByZXR1cm4gZmFs
c2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmlu
ZGV4IDYzYzc1NzdhNWMwMDU3Y2VjOGJmODVmMzM1MGFkOTFkZTE2ZTU4ZTUuLjE0OWYxYWQ2YzMx
NzRlNzc4MWM1YTQ2MGU5YjA4MTE2NzU4Y2M0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01NDM0LDYgKzU0MzQsNyBAQCB2b2lkIFdlYlBh
Z2U6OmNvbmZpcm1Db21wb3NpdGlvbkFzeW5jKCkKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkK
IAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorCiBzdGF0aWMgRnJhbWUqIHRh
cmdldEZyYW1lRm9yRWRpdGluZyhXZWJQYWdlJiBwYWdlKQogewogICAgIEZyYW1lJiB0YXJnZXRG
cmFtZSA9IHBhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCk7CkBAIC01NDczLDcgKzU0NzQsNyBAQCB2b2lkIFdlYlBhZ2U6OmRlbGV0ZVN1cnJvdW5k
aW5nKGludDY0X3Qgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudCkKIAogICAgIGF1dG8g
c2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAgYXV0byBzdXJy
b3VuZGluZ1JhbmdlID0gbWFrZVJhbmdlKHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoc2VsZWN0aW9u
U3RhcnQpLCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgYXV0byBjdXJzb3JQb3NpdGlvbiA9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3Vycm91bmRpbmdSYW5nZS5nZXQoKSk7CisgICAgYXV0byBj
dXJzb3JQb3NpdGlvbiA9IFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KCpzdXJyb3VuZGluZ1Jhbmdl
KTsKICAgICBhdXRvJiByb290Tm9kZSA9IHN1cnJvdW5kaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIGN1cnNvclBv
c2l0aW9uICsgb2Zmc2V0LCBjaGFyYWN0ZXJDb3VudCk7CiAgICAgaWYgKCFzZWxlY3Rpb25SYW5n
ZSkKQEAgLTU0ODUsNiArNTQ4Niw3IEBAIHZvaWQgV2ViUGFnZTo6ZGVsZXRlU3Vycm91bmRpbmco
aW50NjRfdCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50KQogICAgIHRhcmdldEZyYW1l
LT5lZGl0b3IoKS5zZXRJZ25vcmVTZWxlY3Rpb25DaGFuZ2VzKGZhbHNlKTsKICAgICBzZW5kRWRp
dG9yU3RhdGVVcGRhdGUoKTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgV2ViUGFnZTo6ZGlkQXBwbHlT
dHlsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGli
L1dlYlBhZ2VHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIv
V2ViUGFnZUdMaWIuY3BwCmluZGV4IDNhN2JhYTZjMTAyZGQ3Y2Y2NjVlYzM2YmI0YjFmYmMxOGIy
MjBlY2EuLmUyYWMyM2FlNTU3ZDdhMTdlOTY3YzAzYmI4MzAxYTc4N2Q3Y2Q0ZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIu
Y3BwCkBAIC0xMTYsMTIgKzExNiwxMiBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtRWRpdG9yU3Rh
dGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0LCBJbmNsdWRlUG9zdAogICAgICAg
ICAgICAgc3Vycm91bmRpbmdSYW5nZS0+c2V0RW5kKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSk7CiAgICAgICAgICAgICBjbG9uZWRSYW5nZS0+c2V0U3RhcnQoY29tcG9zaXRpb25S
YW5nZS0+ZW5kUG9zaXRpb24oKSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3Vu
ZGluZ0NvbnRleHQgPSBwbGFpblRleHQoc3Vycm91bmRpbmdSYW5nZS5nZXQoKSkgKyBwbGFpblRl
eHQoY2xvbmVkUmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91
bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN1
cnJvdW5kaW5nUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91
bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCgqc3Vycm91bmRpbmdS
YW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxl
Y3Rpb25Qb3NpdGlvbiA9IHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBv
c2l0aW9uOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vy
cm91bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KHN1cnJvdW5kaW5nUmFuZ2UuZ2V0KCkpOwotICAg
ICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24g
PSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBz
ZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91
bmRpbmdDb250ZXh0U2VsZWN0aW9uUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KG1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKS5nZXQo
KSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQ
b3NpdGlvbiA9IGNoYXJhY3RlckNvdW50KCptYWtlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgc2Vs
ZWN0aW9uU3RhcnQpKTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29u
dGV4dFNlbGVjdGlvblBvc2l0aW9uID0gY2hhcmFjdGVyQ291bnQoKm1ha2VSYW5nZShzdXJyb3Vu
ZGluZ1N0YXJ0LCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSk7CiAgICAgICAgIH0KICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCmluZGV4IDMxNTJjMzdmNGY0ZGNmMmZkMTA1YTY0NGZkMWUwNzBjOTY4MTViZjEuLmY0Zjg0
OGYzNzhhMzRkYTNmN2ViMmVmOGFhYTlmMjBlMjU2OTYxOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xOTg5LDEzICsx
OTg5LDE2IEBAIHZvaWQgV2ViUGFnZTo6c3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJv
b2wgc2hvdWxkU3RvcmUpCiAgICAgfQogfQogCi1zdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hlc1RleHQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3Np
dGlvbiwgY29uc3QgU3RyaW5nJiBtYXRjaFRleHQsIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFu
Z2UpCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hl
c1RleHQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBtYXRj
aFRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKLSAgICBpZiAoIXNl
bGVjdGlvblJhbmdlKQorICAgIGF1dG8gbGl2ZVJhbmdlID0gc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KTsKKyAgICBpZiAoIWxpdmVSYW5nZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVu
dCgpLCBzZWxlY3Rpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICB1bnNpZ25lZCB0YXJnZXRP
ZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVlKTsKLSAg
ICByZXR1cm4gZmluZENsb3Nlc3RQbGFpblRleHQoKnNlbGVjdGlvblJhbmdlLCBtYXRjaFRleHQs
IHsgfSwgdGFyZ2V0T2Zmc2V0KTsKKyAgICBTaW1wbGVSYW5nZSByYW5nZSB7ICpsaXZlUmFuZ2Ug
fTsKKyAgICBhdXRvIGJvdW5kYXJ5UG9pbnQgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbik7
CisgICAgaWYgKCFib3VuZGFyeVBvaW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWluVGV4dChyYW5nZSwgbWF0Y2hUZXh0LCB7IH0sIGNo
YXJhY3RlckNvdW50KHsgcmFuZ2Uuc3RhcnQsICpib3VuZGFyeVBvaW50IH0sIHRydWUpKTsKIH0K
IAogdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJf
dCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAt
MjAyMiw3ICsyMDI1LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0
V2l0aFRleHQoaW50MzJfdCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGUKIAogICAgIGlmIChwbGFp
blRleHRGb3JEaXNwbGF5KHJhbmdlLnB0cigpKSAhPSB0ZXh0KSB7CiAgICAgICAgIC8vIFRyeSB0
byBzZWFyY2ggZm9yIGEgcmFuZ2Ugd2hpY2ggaXMgdGhlIGNsb3Nlc3QgdG8gdGhlIHBvc2l0aW9u
IHdpdGhpbiB0aGUgc2VsZWN0aW9uIHJhbmdlIHRoYXQgbWF0Y2hlcyB0aGUgcGFzc2VkIGluIHRl
eHQuCi0gICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hl
c1RleHQoc3RhcnRQb3NpdGlvbiwgdGV4dCwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkp
KSB7CisgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IHJhbmdlTmVhclBvc2l0aW9uTWF0Y2hl
c1RleHQoc3RhcnRQb3NpdGlvbiwgdGV4dCwgc2VsZWN0aW9uKSkgewogICAgICAgICAgICAgaWYg
KCF3b3JkUmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAgICAgICAgICAgIHJhbmdlID0gY3JlYXRl
TGl2ZVJhbmdlKCp3b3JkUmFuZ2UpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDNhMGRjNDUyMDE3NmM0
Y2IzOWQxOGNkNTEwMjJhMDRlYjA3Y2Q3ODIuLjJjNTg5NmRmNzg1NzU4NjYxMGQyYTNhNjU1NmQ1
ODE5Y2Y2ZmZlOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNDAsMTkgKzE0MCwyMiBAQCB2b2lkIFdlYlBhZ2U6OnBs
YXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0LCBJbmNs
dWRlUG9zdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0
byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKCFzZWxlY3RlZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBwb3N0
TGF5b3V0RGF0YSA9IHJlc3VsdC5wb3N0TGF5b3V0RGF0YSgpOwogICAgIFZpc2libGVQb3NpdGlv
biBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxl
UG9zaXRpb24gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0
YXJ0KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBoRW5kID0gZW5kT2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uRW5kKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91
bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtYWtl
Qm91bmRhcnlQb2ludChzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKKyAgICBhdXRvIHBhcmFncmFw
aFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFy
dCkpOworCisgICAgaWYgKCFzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IHx8ICFzZWxlY3Rpb25FbmQg
fHwgIXBhcmFncmFwaFN0YXJ0KQorICAgICAgICByZXR1cm47CiAKLSAgICBwb3N0TGF5b3V0RGF0
YS5jYW5kaWRhdGVSZXF1ZXN0U3RhcnRQb3NpdGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAg
IHBvc3RMYXlvdXREYXRhLnNlbGVjdGVkVGV4dExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQpLmdldCgpKSAtIHBv
c3RMYXlvdXREYXRhLmNhbmRpZGF0ZVJlcXVlc3RTdGFydFBvc2l0aW9uOworICAgIHBvc3RMYXlv
dXREYXRhLmNhbmRpZGF0ZVJlcXVlc3RTdGFydFBvc2l0aW9uID0gY2hhcmFjdGVyQ291bnQoeyAq
cGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IH0pOworICAgIHBvc3RMYXlv
dXREYXRhLnNlbGVjdGVkVGV4dExlbmd0aCA9IGNoYXJhY3RlckNvdW50KHsgKnNlbGVjdGlvblN0
YXJ0Qm91bmRhcnksICpzZWxlY3Rpb25FbmQgfSk7CiAgICAgcG9zdExheW91dERhdGEucGFyYWdy
YXBoQ29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBwbGFpblRleHQoZnJhbWUuZWRpdG9yKCku
Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpLmdldCgpKTsKICAgICBwb3N0TGF5b3V0
RGF0YS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUuZWRpdG9yKCkuc3RyaW5nRm9y
Q2FuZGlkYXRlUmVxdWVzdCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggN2M1MDZmYzZhN2Ez
MWJmMzc3Y2E2NWRjNjUxMDQ0ZjQxY2Y5ZGYxMC4uY2E0NzkzMTA1NGI4MDI2MjY4NzNlM2Y1M2Zi
NWVlMzA1NGU5ODUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMTAzMSwxNiArMTAzMSwxOSBA
QCBzdGF0aWMgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOU0FycmF5ICppbmNvbWlu
Z1Jlc3VsdHMsIE9wdGlvblNldDxUZXh0QwogICAgIHJldHVybiByZXN1bHRzOwogfQogCi1zdGF0
aWMgaW50IGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgY3VycmVudFNlbGVjdGlvbikKK3N0YXRpYyBOU1VJbnRlZ2VyIGluc2VydGlvblBv
aW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQogewotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IGN1cnJlbnRTZWxlY3Rp
b24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0g
c3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25TdGFydCku
Z2V0KCkpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydEJvdW5kYXJ5ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
c2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQ
b2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSk7CisgICAgaWYgKCFzZWxlY3Rp
b25TdGFydEJvdW5kYXJ5IHx8ICFwYXJhZ3JhcGhTdGFydCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnBhcmFncmFwaFN0YXJ0LCAqc2VsZWN0aW9uU3Rh
cnRCb3VuZGFyeSB9KTsKIH0KIAogVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9y
Q2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZywgT3B0aW9uU2V0
PFRleHRDaGVja2luZ1R5cGU+IGNvcmVDaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7
IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiAgW05TTnVtYmVyIG51bWJlcldpdGhV
bnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50
U2VsZWN0aW9uKV0gfTsKKyAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMgPSBAeyBOU1RleHRDaGVj
a2luZ0luc2VydGlvblBvaW50S2V5IDogQChpbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0
aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSB9OwogICAgIHJldHVybiBjb3JlKFtbTlNTcGVsbENoZWNr
ZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja1N0cmluZzpzdHJpbmcuY3JlYXRlTlNTdHJpbmdX
aXRob3V0Q29weWluZygpLmdldCgpIHJhbmdlOk5TTWFrZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgo
KSkgdHlwZXM6KG5zVGV4dENoZWNraW5nVHlwZXMoY29yZUNoZWNraW5nVHlwZXMpIHwgTlNUZXh0
Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkpIG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRX
aXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6TlVMTCB3b3JkQ291
bnQ6TlVMTF0sIGNvcmVDaGVja2luZ1R5cGVzKTsKIH0KIApAQCAtMTA4Myw3ICsxMDg2LDcgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29y
ZCwgY29uc3QgU3RyaW5nJiBjb250ZXgKICAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBuaWw7CiAg
ICAgTlNPcnRob2dyYXBoeSogb3J0aG9ncmFwaHkgPSBuaWw7CiAgICAgTlNTcGVsbENoZWNrZXIg
KmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKLSAgICBOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5IDog
IFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnRlZ2VyOmluc2VydGlvblBvaW50RnJvbUN1
cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbildIH07CisgICAgTlNEaWN0aW9uYXJ5ICpv
cHRpb25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6IEAoaW5zZXJ0aW9u
UG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKSkgfTsKICAgICBpZiAo
Y29udGV4dC5sZW5ndGgoKSkgewogICAgICAgICBbY2hlY2tlciBjaGVja1N0cmluZzpjb250ZXh0
IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIHR5cGVzOk5TVGV4dENoZWNr
aW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6b3B0aW9ucyBpblNwZWxsRG9jdW1lbnRXaXRoVGFn
OnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFwaHk6Jm9ydGhvZ3JhcGh5IHdvcmRD
b3VudDowXTsKICAgICAgICAgbGFuZ3VhZ2UgPSBbY2hlY2tlciBsYW5ndWFnZUZvcldvcmRSYW5n
ZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSBpblN0cmluZzpjb250ZXh0IG9ydGhv
Z3JhcGh5Om9ydGhvZ3JhcGh5XTsKQEAgLTExMTYsMjQgKzExMTksMjAgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnJlcXVlc3RDYW5kaWRhdGVzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGUKICAgICBpZiAoIVttX3dlYlZpZXcgc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXNd
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisg
ICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fd2ViVmlldyBfc2VsZWN0ZWRPck1haW5G
cmFtZV0pOworCisgICAgYXV0byogZnJhbWUgPSBjb3JlKFttX3dlYlZpZXcgX3NlbGVjdGVkT3JN
YWluRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2xh
c3RTZWxlY3Rpb25Gb3JSZXF1ZXN0ZWRDYW5kaWRhdGVzID0gc2VsZWN0aW9uOwogCi0gICAgVmlz
aWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwot
ICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgp
OwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgo
c2VsZWN0aW9uU3RhcnQpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhFbmQgPSBlbmRP
ZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydE9mZnNldEluUGFy
YWdyYXBoID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFn
cmFwaChzZWxlY3Rpb25TdGFydCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQp
IH0pOworICAgIGF1dG8gc2VsZWN0aW9uTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9u
LnZpc2libGVFbmQoKSkgfSk7CiAKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rp
b25TdGFydCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25FbmQp
LmdldCgpKTsKLSAgICBtX3JhbmdlRm9yQ2FuZGlkYXRlcyA9IE5TTWFrZVJhbmdlKGxlbmd0aFRv
U2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5kIC0gbGVuZ3RoVG9TZWxlY3Rpb25T
dGFydCk7CisgICAgbV9yYW5nZUZvckNhbmRpZGF0ZXMgPSBOU01ha2VSYW5nZShzZWxlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoLCBzZWxlY3Rpb25MZW5ndGgpOwogICAgIG1fcGFyYWdyYXBo
Q29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBwbGFpblRleHQoZnJhbWUtPmVkaXRvcigpLmNv
bnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKS5nZXQoKSk7CiAKICAgICBOU1RleHRDaGVj
a2luZ1R5cGVzIGNoZWNraW5nVHlwZXMgPSBOU1RleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IE5T
VGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50IHwgTlNUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGJj
M2JlYmRmMjYyZmE0ZWNmYjAxODc4YjNjMmIwYzU1YzNlYTkwMTUuLmU0YzZhYTAwNWI5ZjlkODk5
ZjgxNmEzYWRjMTQ5ZjUxNGZiMWEzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQpAQCAtODM1LDI0ICs4MzUsMTkgQEAgLSAoUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZSByYW5nZUlzUmVsYXRp
dmVUbzoKICAgICAgICAgLy8gVGhhdCBmaXRzIHdpdGggQXBwS2l0J3MgaWRlYSBvZiBhbiBpbnB1
dCBjb250ZXh0LgogICAgICAgICBhdXRvKiBlbGVtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CiAgICAg
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFu
Z2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZWxlbWVudCwgbnNyYW5nZS5sb2NhdGlvbiwgbnNyYW5n
ZS5sZW5ndGgpOwogICAgIH0KIAogICAgIEFTU0VSVChyYW5nZUlzUmVsYXRpdmVUbyA9PSBXZWJS
YW5nZUlzUmVsYXRpdmVUbzo6UGFyYWdyYXBoKTsKIAotICAgIGNvbnN0IGF1dG8mIHNlbGVjdGlv
biA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICBhdXRvIHBhcmFncmFwaFN0
YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSkpOworICAgIGlmICgh
cGFyYWdyYXBoU3RhcnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8mIHJvb3RO
b2RlID0gcGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKTsK
IAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtYWtlUmFuZ2Uo
c3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBzZWxlY3Rpb24udmlz
aWJsZUVuZCgpKTsKLSAgICBpZiAoIXBhcmFncmFwaFJhbmdlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBoUmFuZ2UuZ2V0KCktPnN0YXJ0
Q29udGFpbmVyKCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBpbnQgcGFyYWdyYXBoU3Rh
cnRJbmRleCA9IFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoV2ViQ29yZTo6UmFu
Z2U6OmNyZWF0ZShyb290Tm9kZS5kb2N1bWVudCgpLCAmcm9vdE5vZGUsIDAsICZwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRDb250YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpLnB0
cigpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlv
bkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXggKyBzdGF0aWNfY2FzdDxp
bnQ+KG5zcmFuZ2UubG9jYXRpb24pLCBuc3JhbmdlLmxlbmd0aCk7CisgICAgYXV0byBwYXJhZ3Jh
cGhTdGFydEluZGV4ID0gV2ViQ29yZTo6Y2hhcmFjdGVyQ291bnQoeyB7IHJvb3ROb2RlLCAwIH0s
ICpwYXJhZ3JhcGhTdGFydCB9KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXgg
KyBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7CiB9CiAKIC0gKERPTVJhbmdlICop
X2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTEyZjE1
OTc4OTMyNTZlYTkxOTViNDY2NDlhZjc4NGU4MGFjYjQyYS4uMGVmODIyMjg5NmZjZTc4YTU0MTI5
MzYzNDM3ZTBhNmVkMzgyODhiOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAzLTIyICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9tYWMvc3BlbGxp
bmcvYXV0b2NvcnJlY3Rpb24tY29udHJhY3Rpb24tZXhwZWN0ZWQudHh0OiBVcGRhdGUgdGhlc2Ug
ZXhwZWN0ZWQKKyAgICAgICAgcmVzdWx0cyBiZWNhdXNlIG9mIGNoYW5nZXMgdG8gZGVsZWdhdGUg
Y2FsbGJhY2tzLiBUaGUgdGVzdCBpcyBzdGlsbCBwYXNzaW5nIGFuZCB0aGlzCisgICAgICAgIGNo
YW5nZSBpcyBvbmx5IGluIHRoZSBsZWdhY3kgV2ViS2l0IGNhc2UgKHRoZXJlIGlzIGEgc2VwYXJh
dGUgcmVzdWx0IGZvciBtb2Rlcm4gV2ViS2l0KS4KKyAgICAgICAgVGhpcyBzZWVtcyB0byBiZSBh
IHByb2dyZXNzaW9uLCBub3QgZXZpZGVuY2Ugb2YgYSBidWcuCisKIDIwMjAtMDMtMjIgIERpZWdv
IFBpbm8gR2FyY2lhICA8ZHBpbm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEdh
cmRlbmluZywgdXBkYXRlIFRlc3RFeHBlY3RhdGlvbnMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvbWFjL3NwZWxsaW5nL2F1dG9jb3JyZWN0aW9uLWNvbnRyYWN0aW9uLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvbWFjL3NwZWxsaW5nL2F1dG9jb3JyZWN0aW9uLWNv
bnRyYWN0aW9uLWV4cGVjdGVkLnR4dAppbmRleCA2MzgxZTI2M2RiZDRkYWM0MGNhZTkxZWNiZTJm
MWZmYmNlOWEzMTljLi5hYmYzZDU1MGEwODdkYWE5MWIwNWM5MjhmNzQ4MDg4OTc0MGNlZmJmIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL21hYy9zcGVsbGluZy9hdXRvY29ycmVjdGlv
bi1jb250cmFjdGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9tYWMv
c3BlbGxpbmcvYXV0b2NvcnJlY3Rpb24tY29udHJhY3Rpb24tZXhwZWN0ZWQudHh0CkBAIC0xNTEs
MjEgKzE1MSw4IEBAIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZTpyYW5nZSBmcm9tIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAj
ZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0g
c3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCi1F
RElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20g
NyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQot
RURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0VGV4dDp3b3VsZCByZXBsYWNpbmdET01SYW5n
ZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
Z2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblR5cGVkCi1FRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gNyBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgI3RleHQgPiBESVYgPiBESVYg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQotRURJVElORyBERUxFR0FURTog
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQgPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgI3Rl
eHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKLUVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlm
aWNhdGlvbgotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91
bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byAwIG9mIERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0
aWxsU2VsZWN0aW5nOkZBTFNFCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgogRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
U2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA1IG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNSBvZiAjdGV4dCA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJv
bSA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBv
ZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5T
U2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCi1FRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxl
Y3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2Vi
Vmlld0RpZENoYW5nZU5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhU
TUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDggb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA4IG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA4IG9mICN0ZXh0ID4gRElWID4g
RElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gOCBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3du
c3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KIEVE
SVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0RpZENoYW5nZU5vdGlmaWNh
dGlvbgogRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5n
ZSBmcm9tIDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0
byA4IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDkgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byA5IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6
RkFMU0UKQEAgLTE4Niw2ICsxNzMsMTkgQEAgRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENo
YW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMTMgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxMyBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxNCBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDE0IG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6
IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlm
aWNhdGlvbgogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hh
bmdlTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOnJhbmdlIGZyb20gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCB0byAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9E
WSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0
aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0Ondv
dWxkIHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZ
ID4gSFRNTCA+ICNkb2N1bWVudCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQK
K0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDE0
IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5n
ZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFM
U0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6
RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9u
CitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZy
b20gMCBvZiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAwIG9mIERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSA1IG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNSBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCitFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25O
b3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6V2ViVmlld0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMTMgb2YgI3Rl
eHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxMyBvZiAjdGV4dCA+
IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDE0
IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6
TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJ
TkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNl
bGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpX
ZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IERJViA+
IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxT
ZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCg==
</data>
<flag name="review"
          id="409658"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394289</attachid>
            <date>2020-03-23 12:43:29 -0700</date>
            <delta_ts>2020-03-23 12:43:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209207-20200323124328.patch</filename>
            <type>text/plain</type>
            <size>99615</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk3MzhkZDFkYWU4ODU2
MmYyNmQ1MWZlNDczZGM4OThlMTEzYjc5Ny4uYWU5YjZlYmMwNzQ4Y2QwOGI2YmI3OGUzZGI0MGZj
MTQ2MTlkZDgyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTAzLTIzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aCB0byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmll
d2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIC0gUmVuYW1lZCBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoIHRvIGNoYXJhY3RlckNvdW50LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJh
bmdlTWF0Y2hlc1RleHROZWFyUmFuZ2UpOiBVc2UgY2hhcmFjdGVyQ291bnQuCisgICAgICAgIChX
ZWJDb3JlOjpyZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNlZE5vZGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQpOiBEaXR0by4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmlj
YXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSHlwZXJsaW5rLmNwcDoKKyAgICAgICAgKHJhbmdlTGVuZ3RoRm9yT2JqZWN0KTogRGl0dG8u
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252
ZXJ0VG9OU1JhbmdlOl0pOiBEaXR0by4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5oOiBF
eHBvcnQgYW5vdGhlciBjb25zdHJ1Y3Rvci4KKworICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICBVc2UgY2hh
cmFjdGVyQ291bnQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5kZXhG
b3JWaXNpYmxlUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnJh
bmdlTGVuZ3RoIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6Om9mZnNldFRvIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdFbmQgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5n
dGggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6YXV0b21hdGljUmVwbGFjZW1lbnRTdGFydCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCBj
b25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwgY29uc3QpOiBEaXR0by4KKworICAg
ICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFj
dGVyQ291bnQpOiBMaWtlIHRoZSBiYW92ZSBidXQgdGhlIGFyZ3VtZW50IGlzIFNpbXBsZVJhbmdl
CisgICAgICAgIGFuZCByZXR1cm4gaXMgQ2hhcmFjdGVyQ291bnQuIEV2ZW4gdGhvdWdoIGVhY2gg
aW5kaXZpZHVhbCBub2RlIGlzIGxpbWl0ZWQKKyAgICAgICAgdG8gMzItYml0IHNpemUsIHJhbmdl
cyBjb3ZlcmluZyBtdWx0aXBsZSBub2RlcyBjb3VsZCBoYXZlIGEgY291bnQgb2YKKyAgICAgICAg
Y2hhcmFjdGVycyB0aGF0IGV4Y2VlZHMgMzIgYml0cywgc28gQ2hhcmFjdGVyQ291bnQgaXMgc2l6
ZV90LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0
aEZyb21SYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKworICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmg6IEFkZGVkIGNoYXJhY3RlckNvdW50IGZ1bmN0aW9uLAorICAgICAgICBDaGFy
YWN0ZXJDb3VudCBhbmQgQ2hhcmFjdGVyUmFuZ2UgdHlwZXMuIFJlbW92ZWQgVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aC4KKyAgICAgICAgQWRkZWQgRklYTUUgY29tbWVudHMgYWJvdXQgdGhlIG5l
eHQgc3RlcHMuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludCk6IEFkZGVkLgorICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmg6IEFkZGVkIG1ha2VCb3VuZGFyeVBvaW50LiBBbHNvIHJlbW92
ZWQKKyAgICAgICAgZXh0cmFuZW91cyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgbW92ZWQgc29t
ZSBmdW5jdGlvbiBib2RpZXMgb3V0IG9mIHRoZQorICAgICAgICBjbGFzcyBkZWZpbml0aW9uLgor
CisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBwdHJkaWZm
X3QuCisgICAgICAgIFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVVbml0cy5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3Np
dGlvbldpdGhSYW5nZSk6IFVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKiBlZGl0aW5nL2Nv
Y29hL0RpY3Rpb25hcnlMb29rdXAubW06CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUZvclNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0
aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rh
dGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpY3Rp
b25hcnlMb29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dERpc3RhbmNlKTogRGl0
dG8uCisKIDIwMjAtMDMtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBQb3J0IHdpbmRvdy5wb3N0TWVzc2FnZSB0byB0aGUgSFRNTCBldmVudCBsb29wCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDY3NDY0YWQ5NWYwYjlhOWFiN2M3NGVhYmRkNzQ4ODJmNDUxZjcyMjkuLmYzNTg1NDlj
YjA5NmVhMTg1NmJiMmExMTg0MTBlZTQwYzU0NDRhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMjAtMDMtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IENoYW5nZSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoIHRvIG5vdCByZXF1aXJlIGEgbGl2ZSBy
YW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5
MjA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiBT
aGFyZWQvRWRpdGluZ1JhbmdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RWRpdGluZ1JhbmdlOjp0
b1JhbmdlKTogVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6aW5zZXJ0aW9u
UG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8KKyAgICAg
ICAgQ2hhcmFjdGVyQ291bnQgYW5kIHVzZSBjaGFyYWN0ZXJDb3VudC4KKyAgICAgICAgKFdlYktp
dDo6V2ViRWRpdG9yQ2xpZW50OjpzdXBwb3J0c0dsb2JhbFNlbGVjdGlvbik6IFR3ZWFrZWQgI2lm
LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6dGFyZ2V0RnJhbWVGb3JFZGl0aW5nKTogVXNlIGNoYXJhY3RlckNvdW50LgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZSBjb25zdCk6IERpdHRvLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6cmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dCk6IERpdHRvLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZSBjb25zdCk6IERpdHRvLgorCiAyMDIwLTAzLTIzICBQZXIg
QXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBEZW55IG1h
Y2ggbG9va3VwIGFjY2VzcyB0byBpY29uIHNlcnZpY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKaW5kZXggN2FhOWJkZDRmODM2YTkyMDc1MjcxMjI0MGRjZTdlMDU5YzA2NWVjYi4uMzM0ZDM3
MjBhZTA1NjA3ZWNhMDI0ZWU0Yzc3NmNlOTczNDcwMGYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIwLTAzLTIzICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBDaGFuZ2UgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCB0
byBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTIwNworCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtv
aXZpc3RvLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgor
ICAgICAgICAoaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbik6IFVzZSBjaGFyYWN0
ZXJDb3VudC4KKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JT
ZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAg
ICAoLVtXZWJGcmFtZSBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2VJc1JlbGF0aXZlVG86XSk6IERp
dHRvLgorCiAyMDIwLTAzLTIwICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAg
ICAgICAgIEVuc3VyZSBtZWRpYSBjYWNoZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCBiZWZvcmUgcGFz
c2luZyB0byBBVlVSTEFzc2V0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKaW5kZXggMjg4MDM0MDE5NmQxNjlhM2RmMWMwMGFkZmE4Zjk2Zjg0YzRk
ODJiMi4uNDRjMzM0ZDY3NGUwNDk2OWJlZjdiOTI1ZWZmYWVjMjkzYzgwZmVkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xOTM4LDE4
ICsxOTM4LDE2IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBBWE9iamVjdENhY2hlOjpyYW5nZU1h
dGNoZXNUZXh0TmVhclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlCiAgICAgdW5zaWduZWQgdGV4dExl
bmd0aCA9IG1hdGNoVGV4dC5sZW5ndGgoKTsKICAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNp
YmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZzZXQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKG9yaWdpbmFsUmFuZ2Uuc3RhcnQpLCAtdGV4dExlbmd0aCk7CiAgICAgYXV0byBlbmRQb3Np
dGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNldChjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24ob3JpZ2luYWxSYW5nZS5zdGFydCksIDIgKiB0ZXh0TGVuZ3RoKTsKLQog
ICAgIGlmIChzdGFydFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBzdGFydFBvc2l0aW9uID0g
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG9yaWdpbmFsUmFuZ2Uuc3RhcnQuY29udGFpbmVy
LnB0cigpKTsKICAgICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIGVuZFBvc2l0
aW9uID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShvcmlnaW5hbFJhbmdlLmVuZC5jb250YWlu
ZXIucHRyKCkpOwogCi0gICAgYXV0byBzZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1
bWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotICAgIGlmIChzZWFyY2hSYW5nZS0+
Y29sbGFwc2VkKCkpCisgICAgYXV0byBzZWFyY2hSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VC
b3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRp
b24pIH07CisgICAgaWYgKHNlYXJjaFJhbmdlLmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9kb2N1bWVu
dCwgc3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG9yaWdpbmFsUmFu
Z2Uuc3RhcnQpKTsKLSAgICB1bnNpZ25lZCB0YXJnZXRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVlKTsKKyAgICBhdXRvIHRhcmdldE9mZnNldCA9IGNo
YXJhY3RlckNvdW50KHsgc2VhcmNoUmFuZ2Uuc3RhcnQsIG9yaWdpbmFsUmFuZ2Uuc3RhcnQgfSwg
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwog
ICAgIHJldHVybiBmaW5kQ2xvc2VzdFBsYWluVGV4dChzZWFyY2hSYW5nZSwgbWF0Y2hUZXh0LCB7
IH0sIHRhcmdldE9mZnNldCk7CiB9CiAKQEAgLTE5OTIsMTIgKzE5OTAsMTEgQEAgc3RhdGljIGJv
b2wgY2hhcmFjdGVyT2Zmc2V0c0luT3JkZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0
ZXJPZmZzZXQxLCBjb24KIHN0YXRpYyBOb2RlKiByZXNldE5vZGVBbmRPZmZzZXRGb3JSZXBsYWNl
ZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlLCBpbnQmIG9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50
KQogewogICAgIC8vIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGluY2x1ZGUgdGhlIHJlcGxhY2VkIG5v
ZGUgaXRzZWxmIGluIHRoZSByYW5nZSB3ZSBhcmUgY3JlYXRpbmcuCi0gICAgaWYgKCFyZXBsYWNl
ZE5vZGUpCisgICAgYXV0byBub2RlUmFuZ2UgPSBBWE9iamVjdENhY2hlOjpyYW5nZUZvck5vZGVD
b250ZW50cyhyZXBsYWNlZE5vZGUpOworICAgIGlmICghbm9kZVJhbmdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IG5vZGVSYW5nZSA9IEFYT2JqZWN0
Q2FjaGU6OnJhbmdlRm9yTm9kZUNvbnRlbnRzKHJlcGxhY2VkTm9kZSk7Ci0gICAgaW50IG5vZGVM
ZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG5vZGVSYW5nZS5nZXQoKSk7Ci0gICAg
b2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQgPD0gbm9kZUxlbmd0aCA/IHJlcGxhY2VkTm9kZS0+Y29t
cHV0ZU5vZGVJbmRleCgpIDogcmVwbGFjZWROb2RlLT5jb21wdXRlTm9kZUluZGV4KCkgKyAxOwor
ICAgIGJvb2wgaXNJbk5vZGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhcmFjdGVyQ291bnQp
IDw9IFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KCpub2RlUmFuZ2UpOworICAgIG9mZnNldCA9IHJl
cGxhY2VkTm9kZS0+Y29tcHV0ZU5vZGVJbmRleCgpICsgKGlzSW5Ob2RlID8gMCA6IDEpOwogICAg
IHJldHVybiByZXBsYWNlZE5vZGUtPnBhcmVudE5vZGUoKTsKIH0KIApAQCAtMjQxMywxNCArMjQx
MCwxNiBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6bmV4dENoYXJhY3Rlck9mZnNl
dChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhYwogICAgICAgICByZXR1cm4gQ2hhcmFjdGVy
T2Zmc2V0KCk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3QgYWx3YXlzIG1vdmUgb25lICdjaGFyYWN0
ZXInIGF0IGEgdGltZSBzaW5jZSB0aGVyZSBtaWdodCBiZSBjb21wb3NlZCBjaGFyYWN0ZXJzLgot
ICAgIGludCBuZXh0T2Zmc2V0ID0gUG9zaXRpb246OnVuY2hlY2tlZE5leHRPZmZzZXQoY2hhcmFj
dGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQpOworICAgIHVuc2lnbmVkIG5l
eHRPZmZzZXQgPSBQb3NpdGlvbjo6dW5jaGVja2VkTmV4dE9mZnNldChjaGFyYWN0ZXJPZmZzZXQu
bm9kZSwgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHQg
PSBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwg
bmV4dE9mZnNldCk7CiAgICAgCiAgICAgLy8gVG8gYmUgY29uc2lzdGVudCB3aXRoIFZpc2libGVQ
b3NpdGlvbiwgd2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBjYXNlIHRoYXQgY3VycmVudCBub2RlIGVu
ZCB0byBuZXh0IG5vZGUgc3RhcnQgY291bnRzIDEgb2Zmc2V0LgogICAgIGlmICghaWdub3JlTmV4
dE5vZGVTdGFydCAmJiAhbmV4dC5pc051bGwoKSAmJiAhaXNSZXBsYWNlZE5vZGVPckJSKG5leHQu
bm9kZSkgJiYgbmV4dC5ub2RlICE9IGNoYXJhY3Rlck9mZnNldC5ub2RlKSB7Ci0gICAgICAgIGlu
dCBsZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlRm9yVW5vcmRlcmVkQ2hh
cmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIG5leHQpLmdldCgpKTsKLSAgICAgICAgaWYg
KGxlbmd0aCA+IG5leHRPZmZzZXQgLSBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0KQotICAgICAgICAg
ICAgbmV4dCA9IGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKm5leHQubm9kZSwgMCwg
VHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOworICAgICAgICBpZiAoYXV0byByYW5nZSA9IHJh
bmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIG5leHQpKSB7
CisgICAgICAgICAgICBhdXRvIGxlbmd0aCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZSk7CisgICAg
ICAgICAgICBpZiAobGVuZ3RoID4gbmV4dE9mZnNldCAtIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQp
CisgICAgICAgICAgICAgICAgbmV4dCA9IGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQo
Km5leHQubm9kZSwgMCwgVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOworICAgICAgICB9CiAg
ICAgfQogICAgIAogICAgIHJldHVybiBuZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRleCBmZTEyNjBkN2ZkY2Y2
ODg5OGFkODU1Nzg0YjA1MWQzZDcyMWQxMDZmLi5kMTU2YWVjZTg2ODVlZDM0NGM5NTVlZDI3YWQ5
MDkwMzYzNjFlODgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9BWE9iamVjdENhY2hlQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtMzU1LDcgKzM1NSw3IEBAIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplCiAgICAgICAgIC8vIHRoZSBjdXJyZW50IGFjY2Vzc2liaWxpdHkgb2JqZWN0
IHRvIGVuc3VyZSB3ZSBlbWl0IHRoZQogICAgICAgICAvLyByaWdodCBvZmZzZXQgKGUuZy4gbXVs
dGlsaW5lIHRleHQgYXJlYXMpLgogICAgICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCwgbm9kZS0+cGFyZW50Tm9kZSgpLCAwLCBub2RlLCAwKTsKLSAgICAgICAgb2Zmc2V0
VG9FbWl0ID0gb2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7
CisgICAgICAgIG9mZnNldFRvRW1pdCA9IG9mZnNldCArIGNoYXJhY3RlckNvdW50KHJhbmdlLmdl
dCgpKTsKICAgICB9CiAKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod3JhcHBlciwgZGV0YWls
LmRhdGEoKSwgb2Zmc2V0VG9FbWl0LCB0ZXh0VG9FbWl0Lmxlbmd0aCgpLCB0ZXh0VG9FbWl0LnV0
ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAppbmRleCBhNDYxYzFmYWRh
ZjhjNzI1ZGNkYjRmZTllNWY4MDBmYjhiNjgyOWVkLi45YWM4OTBiZjM1MWQ5ZmVjNTUwN2JjZjAy
MDRmNGI2YzUzYzRlMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcApAQCAtMTU0LDcg
KzE1NCw3IEBAIHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRP
YmplY3QoQXRrSHlwZXJsaW5rKiBsaW5rLCBnaW50IGluCiBzdGF0aWMgZ2ludCByYW5nZUxlbmd0
aEZvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmosIFJhbmdlKiByYW5nZSkKIHsKICAg
ICAvLyBUaGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBhY3R1YWwgbGVuZ3RoIGluIG1vc3Qgb2YgdGhl
IGNhc2VzCi0gICAgaW50IGJhc2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJh
bmdlLCB0cnVlKTsKKyAgICBpbnQgYmFzZUxlbmd0aCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZSwg
VGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwog
CiAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBoeXBlcmxpbmsgYmVsb25ncyB0byBh
IGxpc3QgaXRlbS4KICAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgbGVuZ3Ro
IG9mIHRoZSBpdGVtJ3MgbWFya2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAK
aW5kZXggYjI3MTVjN2M1M2NhZTlkMDRhZjNlNGMwZjkzYWY5NzVmNjNkYjUyNS4uZTA2NTZhZDQ2
MTM4NmVkZGIxZTRkY2JmMmVlNGIyYWYxNjEzODA1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUZXh0LmNwcApAQCAtNDEwLDkgKzQxMCw5IEBAIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlv
bk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJs
CiAKICAgICAvLyBTZXQgdmFsdWVzIGZvciBzdGFydCBvZmZzZXRzIGFuZCBjYWxjdWxhdGUgaW5p
dGlhbCByYW5nZSBsZW5ndGguCiAgICAgLy8gVGhlc2UgdmFsdWVzIG1pZ2h0IGJlIGFkanVzdGVk
IGxhdGVyIHRvIGNvdmVyIHNwZWNpYWwgY2FzZXMuCi0gICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3Jl
T2Zmc2V0VG9BdGtPZmZzZXQoY29yZU9iamVjdCwgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChy
YW5nZUluUGFyZW50LnB0cigpLCB0cnVlKSk7CisgICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3JlT2Zm
c2V0VG9BdGtPZmZzZXQoY29yZU9iamVjdCwgY2hhcmFjdGVyQ291bnQocmFuZ2VJblBhcmVudC5n
ZXQoKSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlv
bnMpKTsKICAgICBhdXRvIG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQo
KSwgbm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgaW50IHJhbmdlTGVuZ3RoID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChub2RlUmFuZ2UucHRyKCksIHRydWUpOworICAgIGlu
dCByYW5nZUxlbmd0aCA9IGNoYXJhY3RlckNvdW50KG5vZGVSYW5nZS5nZXQoKSwgVGV4dEl0ZXJh
dG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogCiAgICAgLy8g
U3BlY2lhbCBjYXNlcyB0aGF0IGFyZSBvbmx5IHJlbGV2YW50IHdoZW4gd29ya2luZyB3aXRoICpf
RU5EIGJvdW5kYXJpZXMuCiAgICAgaWYgKHNlbGVjdGlvbi5hZmZpbml0eSgpID09IFVQU1RSRUFN
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggNTYzOTJjMGJkODNkMWEyYTdjYjc2YTc1NGI5ZWI4
ODNmMjBjZmY1ZS4uODBmZDllYjIyNzM3YzdkYjNkMzk2M2EwMmYwMjcwOTE3ZWRhN2IzNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcApAQCAtMjQ3LDEwICsyNDcsMTAgQEAgQVhDb3JlT2JqZWN0KiBvYmpl
Y3RGb2N1c2VkQW5kQ2FyZXRPZmZzZXRVbmlnbm9yZWQoQVhDb3JlT2JqZWN0KiByZWZlcmVuY2VP
YmplY3QKICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICBlbHNlIGlmICghaXNTdGFydE9mTGluZShl
bmRQb3NpdGlvbikpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbi5wcmV2aW91cygpKTsKLSAgICAgICAgb2Zmc2V0ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSkgKyAxOworICAgICAg
ICBvZmZzZXQgPSAocmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVt
aXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKSA6IDApICsgMTsKICAgICB9
IGVsc2UgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9z
aXRpb24sIGVuZFBvc2l0aW9uKTsKLSAgICAgICAgb2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIG9mZnNldCA9IHJhbmdlID8gY2hh
cmFjdGVyQ291bnQoKnJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucykgOiAwOwogICAgIH0KIAogICAgIHJldHVybiBmaXJzdFVuaWdub3Jl
ZFBhcmVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KaW5kZXggMTAx
ZWIyZDgyNzk3OTRkYTkxMzRkMjgxMTgwZGVhNWNhYjgwZGM1ZC4uZDgzMTA3NWNkMzExZDk1MmMy
YjE4NjU5YmZlMzQ4NTRlYTE3Yzc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0KQEAgLTIzMTAsMzAgKzIzMTAsMzAgQEAgLSAoTlNBcnJheSAqKWFycmF5T2ZUZXh0
Rm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzIGF0dHJpYnV0ZWQ6KEJPT0wpYXR0cmkK
ICAgICByZXR1cm4gW2FycmF5IGF1dG9yZWxlYXNlXTsKIH0KIAotLSAoTlNSYW5nZSlfY29udmVy
dFRvTlNSYW5nZTooUmFuZ2UgKilyYW5nZQorLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZToo
UmFuZ2UgKilsaXZlUmFuZ2UKIHsKLSAgICBpZiAoIXJhbmdlKQorICAgIGlmICghbGl2ZVJhbmdl
KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBF
bGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBFbGVtZW50KiBzY29wZSA9IHNl
bGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
OworICAgIGF1dG8gcmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpsaXZlUmFuZ2UgfTsKKworICAgIGF1
dG8mIGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKTsKKyAgICBhdXRvKiBmcmFtZSA9
IGRvY3VtZW50LmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOworCisgICAgYXV0byogcm9vdEVkaXRhYmxlRWxlbWVudCA9
IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7Cisg
ICAgYXV0byogc2NvcGUgPSByb290RWRpdGFibGVFbGVtZW50ID8gcm9vdEVkaXRhYmxlRWxlbWVu
dCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOworICAgIGlmICghc2NvcGUpCisgICAgICAg
IHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAogICAgIC8vIE1vdXNlIGV2ZW50
cyBtYXkgY2F1c2UgVFNNIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGFuIE5TUmFuZ2UgZm9yIGEgcG9y
dGlvbiBvZiB0aGUgdmlldwotICAgIC8vIHRoYXQgaXMgbm90IGluc2lkZSB0aGUgY3VycmVudCBl
ZGl0YWJsZSByZWdpb24uICBUaGVzZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKKyAg
ICAvLyB0aGF0IGlzIG5vdCBpbnNpZGUgdGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9uLiBUaGVz
ZSBjaGVja3MgZW5zdXJlIHdlIGRvbid0IHByb2R1Y2UKICAgICAvLyBwb3RlbnRpYWxseSBpbnZh
bGlkIGRhdGEgd2hlbiByZXNwb25kaW5nIHRvIHN1Y2ggcmVxdWVzdHMuCi0gICAgaWYgKCZyYW5n
ZS0+c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RG
b3VuZCwgMCk7Ci0gICAgaWYgKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJh
bmdlLT5lbmRDb250YWluZXIoKS5pc0Rlc2NlbmRhbnRPZihzY29wZSkpCisgICAgaWYgKCFzY29w
ZS0+Y29udGFpbnMocmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpKSB8fCAhc2NvcGUtPmNvbnRh
aW5zKHJhbmdlLmVuZC5jb250YWluZXIucHRyKCkpKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFu
Z2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBhdXRvIHRlc3RSYW5nZSA9IFJhbmdlOjpjcmVhdGUo
c2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCAmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJh
bmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQoJnRlc3RSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKSA9PSBzY29wZSk7Ci0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSk7Ci0gICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2Ut
PmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOwotICAgIEFTU0VSVCgmdGVzdFJh
bmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSk7Ci0gICAgcmV0dXJuIE5T
TWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7Cisg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgeyAqc2NvcGUsIDAgfSwgcmFu
Z2Uuc3RhcnQgfSksIGNoYXJhY3RlckNvdW50KHJhbmdlKSk7CiB9CiAKIC0gKFJlZlB0cjxSYW5n
ZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmgKaW5kZXggMTI3ZjJmMTg5NDY0YzEwYzQ5YTU1NDQ4NjZlYWM0OTRkNGU4OGIyMy4uYWNk
OTg1NWE4OTE5YzM3NmUxNTdkMWNlZDljNWRlZWQ3YTE5NTcyNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBs
ZVJhbmdlLmgKQEAgLTQyLDcgKzQyLDcgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKIAogICAgIGJv
b2wgY29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gc3RhcnQgPT0gZW5kOyB9CiAKLSAgICBTaW1w
bGVSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOworICAg
IFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlKGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBC
b3VuZGFyeVBvaW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoQm91bmRhcnlQ
b2ludCYmLCBCb3VuZGFyeVBvaW50JiYpOwogCiAgICAgLy8gQ29udmVuaWVuY2Ugb3ZlcmxvYWRz
IHRvIGhlbHAgd2l0aCB0cmFuc2l0aW9uIGZyb20gdXNpbmcgYSBsb3Qgb2YgbGl2ZSByYW5nZXMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcAppbmRleCBlYzIyMTZkN2FkOWYyYzM5MTA4NmU4ZWUwNzE1N2QyZWNiYTA5NWQyLi5l
YmQ0Y2FiMzI2ZjJjMDk3NTU0MGNiMWQ2ZjllN2ExMjI3OWIyOTg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTU4
MCw1MiArNTgwLDM4IEBAIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrZXJE
ZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0CiAKIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFJhbmdl
JiByYW5nZSwgY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgQWx0ZXJuYXRpdmVUZXh0VHlwZSBh
bHRlcm5hdGl2ZVR5cGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFy
a2VyVHlwZXNUb0FkZCkKIHsKLSAgICBhdXRvIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJl
Y3Rpb24gPSByYW5nZS5jbG9uZVJhbmdlKCk7Ci0KLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5n
ZUNvbnRhaW5pbmdDb3JyZWN0aW9uLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKHJhbmdlLnN0YXJ0
UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0
aW9uLnB0cigpLCBlbmRPZlBhcmFncmFwaChyYW5nZS5lbmRQb3NpdGlvbigpKSk7Ci0KICAgICAv
LyBBZnRlciB3ZSByZXBsYWNlIHRoZSB3b3JkIGF0IHJhbmdlIHJhbmdlV2l0aEFsdGVybmF0aXZl
LCB3ZSBuZWVkIHRvIGFkZCBtYXJrZXJzIHRvIHRoYXQgcmFuZ2UuCi0gICAgLy8gSG93ZXZlciwg
b25jZSB0aGUgcmVwbGFjZW1lbnQgdG9vayBwbGFjZSwgdGhlIHZhbHVlIG9mIHJhbmdlV2l0aEFs
dGVybmF0aXZlIGlzIG5vdCB2YWxpZCBhbnltb3JlLgotICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJy
eSBvdXQgdGhlIHJlcGxhY2VtZW50LCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBzdGFydCBwb3NpdGlv
biBvZiByYW5nZVdpdGhBbHRlcm5hdGl2ZQotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBw
b3NpdGlvbiBvZiB0aGUgY29udGFpbmluZyBwYXJhZ3JhcGguIFdlIHVzZSBjb3JyZWN0aW9uU3Rh
cnRPZmZzZXRJblBhcmFncmFwaAotICAgIC8vIHRvIHN0b3JlIHRoaXMgdmFsdWUuIEluIG9yZGVy
IHRvIG9idGFpbiB0aGlzIG9mZnNldCwgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgYSByYW5nZQot
ICAgIC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3Rh
cnQgcG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCi0gICAgYXV0byBjb3JyZWN0aW9u
U3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFy
YWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwotCi0gICAgUG9z
aXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS5zdGFydFBv
c2l0aW9uKCk7Ci0gICAgaWYgKCFzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5j
b250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIHNldEVuZFJlc3VsdCA9
IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoQXNSYW5nZS0+c2V0RW5kKCpzdGFydFBv
c2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb250YWluZXJOb2RlKCksIHN0YXJ0UG9zaXRp
b25PZlJhbmdlV2l0aEFsdGVybmF0aXZlLmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
Ci0gICAgaWYgKHNldEVuZFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIC8vIFNvIGJlZm9yZSB3ZSBjYXJyeSBvdXQgdGhlIHJlcGxhY2VtZW50LHN0b3JlIHRoZSBz
dGFydCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgc3RhcnQgcG9zaXRpb24KKyAgICAvLyBvZiB0
aGUgY29udGFpbmluZyBwYXJhZ3JhcGguCiAKICAgICAvLyBUYWtlIG5vdGUgb2YgdGhlIGxvY2F0
aW9uIG9mIGF1dG9jb3JyZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGFkZCBtYXJrZXIgYWZ0ZXIgdGhl
IHJlcGxhY2VtZW50IHRvb2sgcGxhY2UuCi0gICAgaW50IGNvcnJlY3Rpb25TdGFydE9mZnNldElu
UGFyYWdyYXBoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChjb3JyZWN0aW9uU3RhcnRPZmZz
ZXRJblBhcmFncmFwaEFzUmFuZ2UucHRyKCkpOworICAgIGF1dG8gY29ycmVjdGlvblN0YXJ0UG9z
aXRpb24gPSByYW5nZS5zdGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBjb3JyZWN0aW9uU3RhcnQg
eyBtYWtlQm91bmRhcnlQb2ludChjb3JyZWN0aW9uU3RhcnRQb3NpdGlvbikgfTsKKyAgICBhdXRv
IHBhcmFncmFwaFN0YXJ0IHsgbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRPZlBhcmFncmFwaChjb3Jy
ZWN0aW9uU3RhcnRQb3NpdGlvbikpIH07CisgICAgaWYgKCFjb3JyZWN0aW9uU3RhcnQgfHwgIXBh
cmFncmFwaFN0YXJ0KQorICAgICAgICByZXR1cm47CisgICAgYXV0byB0cmVlU2NvcGVSb290ID0g
bWFrZVJlZihjb3JyZWN0aW9uU3RhcnQtPmNvbnRhaW5lci0+dHJlZVNjb3BlKCkucm9vdE5vZGUo
KSk7CisgICAgYXV0byB0cmVlU2NvcGVTdGFydCA9IEJvdW5kYXJ5UG9pbnQgeyB0cmVlU2NvcGVS
b290LmdldCgpLCAwIH07CisgICAgYXV0byBjb3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3JhcGggPSBj
aGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKmNvcnJlY3Rpb25TdGFydCB9KTsKKyAg
ICBhdXRvIHBhcmFncmFwaE9mZnNldEluVHJlZVNjb3BlID0gY2hhcmFjdGVyQ291bnQoeyB0cmVl
U2NvcGVTdGFydCwgKnBhcmFncmFwaFN0YXJ0IH0pOwogCi0gICAgLy8gQ2xvbmUgdGhlIHJhbmdl
LCBzaW5jZSB0aGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG1heSB3YW50IHRvIGtlZXAgdGhlIG9y
aWdpbmFsIHJhbmdlIGFyb3VuZC4KLSAgICBhdXRvIHJhbmdlV2l0aEFsdGVybmF0aXZlID0gcmFu
Z2UuY2xvbmVSYW5nZSgpOworICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxl
ciBvZiBtYXkga2VlcCBhIHJlZmVybmVjZSB0byB0aGUgb3JpZ2luYWwgcmFuZ2UgYW5kIG1vZGlm
eSBpdC4KKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2UuY2xvbmVS
YW5nZSgpLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CiAKLSAgICBDb250YWluZXJOb2RlJiByb290
Tm9kZSA9IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVy
KCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAgICBpbnQgcGFyYWdyYXBoU3RhcnRJbmRleCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoUmFuZ2U6OmNyZWF0ZShyb290Tm9kZS5kb2N1bWVu
dCgpLCAmcm9vdE5vZGUsIDAsICZwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5z
dGFydENvbnRhaW5lcigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFy
dE9mZnNldCgpKS5wdHIoKSk7Ci0gICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRl
KHJhbmdlV2l0aEFsdGVybmF0aXZlLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CiAgICAgLy8gUmVj
YWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLCBzaW5jZSBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00sIHN1Y2ggdGhhdCB0aGUgb3JpZ2lu
YWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQu
IFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKLSAgICBhdXRvIHVwZGF0ZWRQYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2Nh
dGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXgsIGNvcnJlY3Rpb25T
dGFydE9mZnNldEluUGFyYWdyYXBoICsgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOworICAgIGF1dG8g
dXBkYXRlZFBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24gPSBUZXh0SXRlcmF0b3I6
OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHRyZWVTY29wZVJvb3QucHRyKCksIHBhcmFncmFw
aE9mZnNldEluVHJlZVNjb3BlLCBjb3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3JhcGggKyBhbHRlcm5h
dGl2ZS5sZW5ndGgoKSk7CiAgICAgaWYgKCF1cGRhdGVkUGFyYWdyYXBoUmFuZ2VDb250YWluaW5n
Q29ycmVjdGlvbikKICAgICAgICAgcmV0dXJuOwotCiAgICAgc2V0RW5kKHVwZGF0ZWRQYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9
IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UoKnVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCwgYWx0ZXJuYXRpdmUu
bGVuZ3RoKCkpOwotICAgIFN0cmluZyBuZXdUZXh0ID0gcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFu
Z2UuZ2V0KCkpOworICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UoKnVwZGF0ZWRQYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLCBjb3JyZWN0
aW9uT2Zmc2V0SW5QYXJhZ3JhcGgsIGFsdGVybmF0aXZlLmxlbmd0aCgpKTsKIAogICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiByZXBsYWNlbWVudCBzdWNjZWVkZWQuCi0gICAgaWYgKG5ld1RleHQgIT0g
YWx0ZXJuYXRpdmUpCisgICAgaWYgKHBsYWluVGV4dChyZXBsYWNlbWVudFJhbmdlLmdldCgpKSAh
PSBhbHRlcm5hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZW1lbnRSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKTsKLQorICAgIGF1dG8mIG1hcmtlcnMgPSByZXBsYWNlbWVudFJhbmdl
LT5vd25lckRvY3VtZW50KCkubWFya2VycygpOwogICAgIGZvciAoYXV0byBtYXJrZXJUeXBlIDog
bWFya2VyVHlwZXNUb0FkZCkKLSAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIoKnJlcGxhY2VtZW50
UmFuZ2UsIG1hcmtlclR5cGUsIG1hcmtlckRlc2NyaXB0aW9uRm9yQXBwbGllZEFsdGVybmF0aXZl
VGV4dChhbHRlcm5hdGl2ZVR5cGUsIG1hcmtlclR5cGUpKTsKKyAgICAgICAgbWFya2Vycy5hZGRN
YXJrZXIocmVwbGFjZW1lbnRSYW5nZSwgbWFya2VyVHlwZSwgbWFya2VyRGVzY3JpcHRpb25Gb3JB
cHBsaWVkQWx0ZXJuYXRpdmVUZXh0KGFsdGVybmF0aXZlVHlwZSwgbWFya2VyVHlwZSkpOwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
aW5kZXggZmUwN2Y1NjE2MDk3MWIzMGNiODNlMTBiMzJjMjVkNzA2ZDAxYmMwYi4uYmI5MmMwMjEy
MWEzYjdiMzkyZjUyOWY4YWI3NmU1YmU0NjBiMjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTIyMywxOSArMjIzLDE0IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmRvQXBwbHkoKQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKIHsKLSAgICAvLyB1cGRhdGUgZG9jdW1l
bnQgbGF5b3V0IG9uY2UgYmVmb3JlIHJlbW92aW5nIHN0eWxlcwotICAgIC8vIHNvIHRoYXQgd2Ug
YXZvaWQgdGhlIGV4cGVuc2Ugb2YgdXBkYXRpbmcgYmVmb3JlIGVhY2ggYW5kIGV2ZXJ5IGNhbGwK
LSAgICAvLyB0byBjaGVjayBhIGNvbXB1dGVkIHN0eWxlCisgICAgLy8gVXBkYXRlIGRvY3VtZW50
IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMgc28gdGhhdCB3ZSBhdm9pZCB0aGUg
ZXhwZW5zZSBvZgorICAgIC8vIHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBldmVyeSBjYWxsIHRv
IGNoZWNrIGEgY29tcHV0ZWQgc3R5bGUuCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIC8vIGdldCBwb3NpdGlvbnMgd2Ugd2FudCB0
byB1c2UgZm9yIGFwcGx5aW5nIHN0eWxlCiAgICAgUG9zaXRpb24gc3RhcnQgPSBzdGFydFBvc2l0
aW9uKCk7CiAgICAgUG9zaXRpb24gZW5kID0gZW5kUG9zaXRpb24oKTsKLSAgICBpZiAoY29tcGFy
ZVBvc2l0aW9ucyhlbmQsIHN0YXJ0KSA8IDApIHsKLSAgICAgICAgUG9zaXRpb24gc3dhcCA9IHN0
YXJ0OwotICAgICAgICBzdGFydCA9IGVuZDsKLSAgICAgICAgZW5kID0gc3dhcDsKLSAgICB9Cisg
ICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBzdGFydCkgPCAwKQorICAgICAgICBzdGQ6OnN3
YXAoc3RhcnQsIGVuZCk7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHN0YXJ0
KTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZChlbmQpOwpAQCAtMjQ2LDE0ICsyNDEs
MTggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHls
ZSYgc3R5bGUpCiAgICAgLy8gU2F2ZSBhbmQgcmVzdG9yZSB0aGUgc2VsZWN0aW9uIGVuZHBvaW50
cyB1c2luZyB0aGVpciBpbmRpY2VzIGluIHRoZSBlZGl0YWJsZSByb290LCBzaW5jZQogICAgIC8v
IGFkZEJsb2NrU3R5bGVJZk5lZWRlZCBtYXkgbW92ZVBhcmFncmFwaHMsIHdoaWNoIGNhbiByZW1v
dmUgdGhlc2UgZW5kcG9pbnRzLgogICAgIC8vIENhbGN1bGF0ZSBzdGFydCBhbmQgZW5kIGluZGlj
ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHRyZWUgdGhhdCB0aGV5J3JlIGluLgotICAgIGF1dG8q
IHNjb3BlID0gaGlnaGVzdEVkaXRhYmxlUm9vdCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQo
KSk7CisgICAgYXV0byBzY29wZSA9IG1ha2VSZWZQdHIoaGlnaGVzdEVkaXRhYmxlUm9vdCh2aXNp
YmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkpOwogICAgIGlmICghc2NvcGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gc3RhcnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwg
Zmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBhdXRvIGVuZFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlKSwgdmlzaWJsZUVu
ZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBpbnQg
c3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5wdHIoKSwg
dHJ1ZSk7Ci0gICAgaW50IGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRS
YW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgYXV0byBzY29wZVN0YXJ0ID0gQm91bmRhcnlQb2ludCB7
ICpzY29wZSwgMCB9OworICAgIGF1dG8gc3RhcnRCb3VuZGFyeVBvaW50ID0gbWFrZUJvdW5kYXJ5
UG9pbnQodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCkpOworICAgIGF1dG8gZW5kQm91bmRhcnlQb2ludCA9IG1ha2VCb3VuZGFyeVBvaW50KHZp
c2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Cisg
ICAgaWYgKCFzdGFydEJvdW5kYXJ5UG9pbnQgfHwgIWVuZEJvdW5kYXJ5UG9pbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KHsgc2NvcGVT
dGFydCwgKnN0YXJ0Qm91bmRhcnlQb2ludCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNC
ZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgYXV0byBlbmRJbmRleCA9IGNoYXJhY3Rl
ckNvdW50KHsgc2NvcGVTdGFydCwgKmVuZEJvdW5kYXJ5UG9pbnQgfSwgVGV4dEl0ZXJhdG9yRW1p
dHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHBhcmFncmFwaFN0YXJ0KHN0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVN0YXJ0KSk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhTdGFydChlbmRPZlBhcmFncmFwaChwYXJh
Z3JhcGhTdGFydCkubmV4dCgpKTsKQEAgLTI4NSw4ICsyODQsOCBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKICAgICB9CiAgICAg
CiAgICAgewotICAgICAgICBhdXRvIHN0YXJ0UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJv
bUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBzdGFydEluZGV4LCAwLCB0cnVlKTsKLSAgICAgICAg
YXV0byBlbmRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgo
c2NvcGUsIGVuZEluZGV4LCAwLCB0cnVlKTsKKyAgICAgICAgYXV0byBzdGFydFJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZS5nZXQoKSwgc3RhcnRJ
bmRleCwgMCwgdHJ1ZSk7CisgICAgICAgIGF1dG8gZW5kUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJh
bmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLmdldCgpLCBlbmRJbmRleCwgMCwgdHJ1ZSk7
CiAgICAgICAgIGlmIChzdGFydFJhbmdlICYmIGVuZFJhbmdlKQogICAgICAgICAgICAgdXBkYXRl
U3RhcnRFbmQoc3RhcnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBlbmRSYW5nZS0+c3RhcnRQb3Np
dGlvbigpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCmluZGV4IDdkZGIwYWIyNTIxOTQ5MzIwNTU4ZWQ0MTE4NGI1MTBjYTk2MGVl
NTYuLjE1NGJiODdjMzMxZDQxZDkxNjE2MmU3ZDkxMTBkNDc4ODI3ZDFjNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0xNDE3LDcg
KzE0MTcsNiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAogICAgIAogICAgIGludCBzdGFydElu
ZGV4ID0gLTE7CiAgICAgaW50IGVuZEluZGV4ID0gLTE7Ci0gICAgaW50IGRlc3RpbmF0aW9uSW5k
ZXggPSAtMTsKICAgICBib29sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCA9IGVuZGluZ1NlbGVjdGlv
bigpLmlzRGlyZWN0aW9uYWwoKTsKICAgICBpZiAocHJlc2VydmVTZWxlY3Rpb24gJiYgIWVuZGlu
Z1NlbGVjdGlvbigpLmlzTm9uZSgpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
U3RhcnQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTE0MzIsMTggKzE0
MzEsMjIgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXAKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgICAgICBpZiAoc3RhcnRJblBhcmFncmFwaCkgewot
ICAgICAgICAgICAgICAgIGF1dG8gc3RhcnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQo
KSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpLCB2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg
YXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGhU
b01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHZpc2li
bGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQpCisgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhT
dGFydCwgKnNlbGVjdGlvblN0YXJ0IH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZW5k
SW5kZXggPSAwOwogICAgICAgICAgICAgaWYgKGVuZEluUGFyYWdyYXBoKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlBh
cmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
LCB2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkp
OwotICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChl
bmRSYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFy
dCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxl
bnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBz
ZWxlY3Rpb25FbmQgPSBtYWtlQm91bmRhcnlQb2ludCh2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50
KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOworICAgICAgICAgICAgICAgIGlmIChwYXJh
Z3JhcGhTdGFydCAmJiBzZWxlY3Rpb25FbmQpCisgICAgICAgICAgICAgICAgICAgIGVuZEluZGV4
ID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxlY3Rpb25FbmQgfSwgVGV4
dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgVmlzaWJsZVBvc2l0aW9u
IGJlZm9yZVBhcmFncmFwaCA9IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUucHJldmlvdXMoQ2Fubm90
Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgIFZpc2libGVQb3NpdGlvbiBhZnRlclBhcmFncmFw
aChlbmRPZlBhcmFncmFwaFRvTW92ZS5uZXh0KENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KSk7
CiAKQEAgLTE0NzgsOSArMTQ4MSw5IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFwCiAgICAgICAg
IC8vIFRoZSBtb3ZlZCBwYXJhZ3JhcGggc2hvdWxkIGFzc3VtZSB0aGUgYmxvY2sgc3R5bGUgb2Yg
dGhlIGRlc3RpbmF0aW9uLgogICAgICAgICBzdHlsZUluRW1wdHlQYXJhZ3JhcGgtPnJlbW92ZUJs
b2NrUHJvcGVydGllcygpOwogICAgIH0KLSAgICAKKwogICAgIC8vIEZJWE1FICg1MDk4OTMxKTog
V2Ugc2hvdWxkIGFkZCBhIG5ldyBpbnNlcnQgYWN0aW9uICJXZWJWaWV3SW5zZXJ0QWN0aW9uTW92
ZWQiIGFuZCBjYWxsIHNob3VsZEluc2VydEZyYWdtZW50IGhlcmUuCi0gICAgCisKICAgICBzZXRF
bmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihzdGFydCwgZW5kLCBET1dOU1RSRUFNKSk7
CiAgICAgZnJhbWUoKS5lZGl0b3IoKS5jbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5k
aW5nU2VsZWN0aW9uKCkpOwogICAgIGRlbGV0ZVNlbGVjdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSk7CkBAIC0xNTA5LDggKzE1MTIsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
Ojptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcAog
ICAgIGlmICghZWRpdGFibGVSb290KQogICAgICAgICBlZGl0YWJsZVJvb3QgPSAmZG9jdW1lbnQo
KTsKIAotICAgIGF1dG8gc3RhcnRUb0Rlc3RpbmF0aW9uUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoZWRpdGFibGVSb290LmdldCgpKSwgZGVzdGlu
YXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAg
ZGVzdGluYXRpb25JbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRUb0Rlc3Rp
bmF0aW9uUmFuZ2UucHRyKCksIHRydWUpOworICAgIGF1dG8gZGVzdGluYXRpb25JbmRleCA9IGNo
YXJhY3RlckNvdW50KHsgeyAqZWRpdGFibGVSb290LCAwIH0sICptYWtlQm91bmRhcnlQb2ludChk
ZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKSB9
LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7
CiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihkZXN0aW5hdGlvbiwg
b3JpZ2luYWxJc0RpcmVjdGlvbmFsKSk7CiAgICAgQVNTRVJUKGVuZGluZ1NlbGVjdGlvbigpLmlz
Q2FyZXRPclJhbmdlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggOGQ2YmRm
NDc4YWJmN2E4OWVlMDZkMWYwYzVjNzI5YzBlYTVhNzQwZC4uNjA0N2I5NDY0M2UzZDVlYTU3M2Fm
YmRjZjY3NmIyMDExYWM4NzVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0x
MDgzLDE1ICsxMDgzLDIzIEBAIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgUmVmUHRyPENvbnRhCiAgICAgICAgICAgICBz
Y29wZSA9ICZkb2N1bWVudDsKICAgICB9CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShkb2N1bWVudCwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZS5nZXQoKSksIHBvc2l0aW9uLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChyYW5nZS5wdHIoKSwgdHJ1ZSk7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFy
eVBvaW50KGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUuZ2V0KCkpKTsKKyAgICBhdXRvIGVuZCA9
IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
KyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFj
dGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIH0KIAogLy8gRklYTUU6IE1lcmdlIHRo
aXMgZnVuY3Rpb24gd2l0aCB0aGUgb25lIGFib3ZlLgogaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0
aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBi
b29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKIHsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShub2RlLmRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoJm5vZGUpLCB2aXNp
YmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7
Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UucHRyKCksIGZvclNl
bGVjdGlvblByZXNlcnZhdGlvbik7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50
KGZpcnN0UG9zaXRpb25Jbk5vZGUoJm5vZGUpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFy
eVBvaW50KHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpKTsKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0LCAqZW5kIH0sIGZvclNlbGVjdGlv
blByZXNlcnZhdGlvbiA/IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zIDogVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yKTsKIH0KIAogVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNldChjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHBvc2l0aW9uLCBpbnQgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IDhjMjM0YTRkOTE5NDA4ZGRhYTdkNzE1
MTA4Yjg0YzFmYzMwMmY2ZmEuLmFkODI3ODg5Y2FiNTg1ZDMwMTU5NmE2M2FiZGVjNmZmNGI3NWUz
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAK
QEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aW52YWxpZGF0
ZVBhcmFncmFwaFJhbmdlVmFsdWVzKCkKIAogaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6cmFu
Z2VMZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KCZwYXJhZ3JhcGhSYW5nZSgpKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBo
UmFuZ2UoKSk7CiB9CiAKIFJhbmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnBhcmFncmFwaFJh
bmdlKCkgY29uc3QKQEAgLTE2NSwxNCArMTY1LDExIEBAIFJlZjxSYW5nZT4gVGV4dENoZWNraW5n
UGFyYWdyYXBoOjpzdWJyYW5nZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291
CiAKIEV4Y2VwdGlvbk9yPGludD4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaWYgKCFwb3NpdGlvbi5jb250YWlu
ZXJOb2RlKCkpCisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJh
bmdlKCkuc3RhcnRQb3NpdGlvbigpKTsKKyAgICBhdXRvIGVuZCA9IG1ha2VCb3VuZGFyeVBvaW50
KHBvc2l0aW9uKTsKKyAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUeXBlRXJyb3IgfTsKLQotICAgIGF1dG8gcmFuZ2UgPSBvZmZzZXRBc1JhbmdlKCku
Y2xvbmVSYW5nZSgpOwotICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UtPnNldEVuZCgqcG9zaXRpb24u
Y29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
OwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KHJhbmdlLnB0cigpKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqc3RhcnQsICplbmQg
fSk7CiB9CiAKIGJvb2wgVGV4dENoZWNraW5nUGFyYWdyYXBoOjppc0VtcHR5KCkgY29uc3QKQEAg
LTIwMCwyMSArMTk3LDIxIEBAIGNvbnN0IFN0cmluZyYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjp0
ZXh0KCkgY29uc3QKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nU3RhcnQoKSBj
b25zdAogewogICAgIGlmICghbV9jaGVja2luZ1N0YXJ0KQotICAgICAgICBtX2NoZWNraW5nU3Rh
cnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKCZvZmZzZXRBc1JhbmdlKCkpOworICAgICAg
ICBtX2NoZWNraW5nU3RhcnQgPSBjaGFyYWN0ZXJDb3VudChvZmZzZXRBc1JhbmdlKCkpOwogICAg
IHJldHVybiAqbV9jaGVja2luZ1N0YXJ0OwogfQogCiBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBo
OjpjaGVja2luZ0VuZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NoZWNraW5nRW5kKQotICAgICAg
ICBtX2NoZWNraW5nRW5kID0gY2hlY2tpbmdTdGFydCgpICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChtX2NoZWNraW5nUmFuZ2UucHRyKCkpOworICAgICAgICBtX2NoZWNraW5nRW5kID0gY2hl
Y2tpbmdTdGFydCgpICsgY2hlY2tpbmdMZW5ndGgoKTsKICAgICByZXR1cm4gKm1fY2hlY2tpbmdF
bmQ7CiB9CiAKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nTGVuZ3RoKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fY2hlY2tpbmdMZW5ndGgpCi0gICAgICAgIG1fY2hlY2tpbmdMZW5n
dGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fY2hlY2tpbmdSYW5nZS5wdHIoKSk7Cisg
ICAgICAgIG1fY2hlY2tpbmdMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChtX2NoZWNraW5nUmFuZ2Up
OwogICAgIHJldHVybiAqbV9jaGVja2luZ0xlbmd0aDsKIH0KIApAQCAtMjIzLDggKzIyMCwxMiBA
QCBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KCkg
Y29uc3QKICAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudFN0YXJ0KQogICAgICAgICByZXR1
cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKIAotICAgIGF1dG8gc3RhcnRPZmZzZXRS
YW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLmRv
Y3VtZW50KCksIHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1Jl
cGxhY2VtZW50UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgbV9hdXRvbWF0aWNSZXBsYWNl
bWVudFN0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydE9mZnNldFJhbmdlLnB0
cigpKTsKKyAgICBhdXRvIHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2Uo
KS5zdGFydFBvc2l0aW9uKCkpOworICAgIGF1dG8gZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnQobV9h
dXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGlmICghc3Rh
cnQgfHwgIWVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2F1dG9tYXRpY1JlcGxhY2Vt
ZW50U3RhcnQgPSBjaGFyYWN0ZXJDb3VudCh7ICpzdGFydCwgKmVuZCB9KTsKICAgICByZXR1cm4g
Km1fYXV0b21hdGljUmVwbGFjZW1lbnRTdGFydDsKIH0KIApAQCAtMjMzLDggKzIzNCw3IEBAIGlu
dCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKCkgY29u
c3QKICAgICBpZiAobV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aCkKICAgICAgICAgcmV0dXJu
ICptX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwogCi0gICAgYXV0byBlbmRPZmZzZXRSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCksIHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpLCBtX2F1dG9tYXRpY1JlcGxh
Y2VtZW50UmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgIG1fYXV0b21hdGljUmVwbGFjZW1lbnRM
ZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldFJhbmdlLnB0cigpKSAt
IGF1dG9tYXRpY1JlcGxhY2VtZW50U3RhcnQoKTsKKyAgICBtX2F1dG9tYXRpY1JlcGxhY2VtZW50
TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobV9hdXRvbWF0aWNSZXBsYWNlbWVudFJhbmdlKTsKICAg
ICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7CiB9CiAKQEAgLTMyMywyNSAr
MzIzLDIzIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5n
T3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3
YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KICAgICBSZWY8UmFuZ2U+IHBhcmFn
cmFwaFJhbmdlID0gbV9yYW5nZS0+Y2xvbmVSYW5nZSgpOwogICAgIHNldFN0YXJ0KHBhcmFncmFw
aFJhbmdlLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkp
OwotICAgIGludCB0b3RhbFJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChw
YXJhZ3JhcGhSYW5nZS5wdHIoKSk7CisgICAgYXV0byB0b3RhbFJhbmdlTGVuZ3RoID0gY2hhcmFj
dGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwogICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIo
KSwgZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CiAgICAgCi0gICAg
UmVmPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlv
bigpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGludCByYW5nZVN0YXJ0T2Zmc2V0
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLnB0cigpKTsKLSAgICBp
bnQgdG90YWxMZW5ndGhQcm9jZXNzZWQgPSAwOworICAgIGF1dG8gcmFuZ2VTdGFydE9mZnNldCA9
IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigp
KSB9KTsKKyAgICBDaGFyYWN0ZXJDb3VudCB0b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7CiAgICAg
CiAgICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CiAgICAgYm9vbCBsYXN0SXRlcmF0aW9u
ID0gZmFsc2U7CiAgICAgd2hpbGUgKHRvdGFsTGVuZ3RoUHJvY2Vzc2VkIDwgdG90YWxSYW5nZUxl
bmd0aCkgewogICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNlYXJjaCByYW5nZSBieSBw
YXJhZ3JhcGhzLCBjaGVja2luZyBlYWNoIG9uZSBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIuCi0g
ICAgICAgIGludCBjdXJyZW50TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJh
Z3JhcGhSYW5nZS5wdHIoKSk7CisgICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IGNoYXJhY3Rl
ckNvdW50KHBhcmFncmFwaFJhbmdlKTsKICAgICAgICAgaW50IGN1cnJlbnRTdGFydE9mZnNldCA9
IGZpcnN0SXRlcmF0aW9uID8gcmFuZ2VTdGFydE9mZnNldCA6IDA7CiAgICAgICAgIGludCBjdXJy
ZW50RW5kT2Zmc2V0ID0gY3VycmVudExlbmd0aDsKICAgICAgICAgaWYgKGluU2FtZVBhcmFncmFw
aChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigp
KSkgewogICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20g
dGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBh
cmFncmFwaCwKICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVz
dWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgICAgICAgICBhdXRvIGVuZE9mZnNldEFzUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCks
IHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkp
OwotICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgoZW5kT2Zmc2V0QXNSYW5nZS5wdHIoKSk7CisgICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0
ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5lbmRQb3NpdGlvbigp
KSB9KTsKICAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5kT2Zmc2V0KSB7CkBAIC0zOTks
MTAgKzM5Nyw4IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAKICAgICAgICAgICAgICAgICBp
ZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1hciB8fCBiYWRHcmFt
bWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxM
b2NhdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHNwZWxsaW5nT2Zmc2V0ID0gc3Bl
bGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBwYXJh
Z3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFw
aFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxp
bmdPZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZzZXRBc1Jh
bmdlLnB0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZpcnN0SXRlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZz
ZXQgKz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpIH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zmc2V0Owog
ICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxsZWRXb3JkOwpAQCAt
NDEwLDEwICs0MDYsOCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNz
cGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhyYXNl
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNl
dCA9IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9u
KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBh
cmFncmFwaE9mZnNldEFzUmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAg
ICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFy
eVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0
SXNTcGVsbGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zm
c2V0ID0gZ3JhbW1hclBocmFzZU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3Vu
ZEl0ZW0gPSBiYWRHcmFtbWFyUGhyYXNlOwpAQCAtNTU2LDcgKzU1MCw3IEBAIGJvb2wgVGV4dENo
ZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCiAgICAgLy8gQmFkIGdyYW1tYXIgYXQgc3RhcnQgb2YgcmFuZ2UsIGJ1dCBlbmQg
b2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVuZCBvZiByYW5nZQotICAgIGlmIChn
cmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fcmFuZ2Uu
cHRyKCkpKQorICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3JhbW1hckRldGFpbC5sZW5n
dGgpICE9IGNoYXJhY3RlckNvdW50KG1fcmFuZ2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgLy8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRo
aXMgZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4p
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGU4NDQxMmIyNzY4
MzU2NmYzMDNhNmQxYjkyZTY3ZjMyMTJkOGQyZmQuLmJhMWI3MjBhZWYwMzQ4YmZhOWZlZGQ3ZDNk
NjY3MDI4NDA0MDY3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
QEAgLTIzNDMsMTIgKzIzNDMsMTAgQEAgc2l6ZV90IFNlYXJjaEJ1ZmZlcjo6bGVuZ3RoKCkgY29u
c3QKIAogLy8gLS0tLS0tLS0KIAotaW50IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29uc3Qg
UmFuZ2UqIHJhbmdlLCBib29sIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbikKK0NoYXJhY3RlckNv
dW50IGNoYXJhY3RlckNvdW50KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgVGV4dEl0ZXJhdG9y
QmVoYXZpb3IgYmVoYXZpb3IpCiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdCgqcmFu
Z2UsIGZvclNlbGVjdGlvblByZXNlcnZhdGlvbiA/IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zIDogVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9y
KTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkKKyAgICBDaGFyYWN0ZXJDb3VudCBsZW5ndGgg
PSAwOworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHJhbmdlLCBiZWhhdmlvcik7ICFpdC5hdEVu
ZCgpOyBpdC5hZHZhbmNlKCkpCiAgICAgICAgIGxlbmd0aCArPSBpdC50ZXh0KCkubGVuZ3RoKCk7
CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTI0NTYsMjEgKzI0NTQsMTYgQEAgYm9vbCBUZXh0
SXRlcmF0b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKE5vZGUqIHNjb3BlLCBjb25z
dCBSYW5nZSogcmFuZ2UKIAogICAgIC8vIFRoZSBjcml0aWNhbCBhc3N1bXB0aW9uIGlzIHRoYXQg
dGhpcyBvbmx5IGdldHMgY2FsbGVkIHdpdGggcmFuZ2VzIHRoYXQKICAgICAvLyBjb25jZW50cmF0
ZSBvbiBhIGdpdmVuIGFyZWEgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIHJvb3QuIFRoaXMgaXMg
ZG9uZQotICAgIC8vIGJlY2F1c2Ugb2YgdGV4dCBmaWVsZHMgYW5kIHRleHRhcmVhcy4gVGhlIERP
TSBmb3IgdGhvc2UgaXMgbm90Ci0gICAgLy8gZGlyZWN0bHkgaW4gdGhlIGRvY3VtZW50IERPTSwg
c28gZW5zdXJlIHRoYXQgdGhlIHJhbmdlIGRvZXMgbm90IGNyb3NzIGEKLSAgICAvLyBib3VuZGFy
eSBvZiBvbmUgb2YgdGhvc2UuCisgICAgLy8gYmVjYXVzZSBvZiB0ZXh0IGZpZWxkcyBhbmQgdGV4
dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBpcyBub3QgZGlyZWN0bHkKKyAgICAvLyBpbiB0aGUg
ZG9jdW1lbnQgRE9NLCBzbyBlbnN1cmUgdGhhdCB0aGUgcmFuZ2UgZG9lcyBub3QgY3Jvc3MgYSBi
b3VuZGFyeQorICAgIC8vIG9mIG9uZSBvZiB0aG9zZS4KICAgICBpZiAoJnJhbmdlLT5zdGFydENv
bnRhaW5lcigpICE9IHNjb3BlICYmICFyYW5nZS0+c3RhcnRDb250YWluZXIoKS5pc0Rlc2NlbmRh
bnRPZihzY29wZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoJnJhbmdlLT5lbmRD
b250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPmVuZENvbnRhaW5lcigpLmlzRGVzY2VuZGFu
dE9mKHNjb3BlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmPFJhbmdlPiB0ZXN0
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgJnJhbmdl
LT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0gICAgQVNTRVJUKCZ0
ZXN0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgPT0gc2NvcGUpOwotICAgIGxvY2F0aW9uID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UucHRyKCkpOwotCi0gICAgdGVzdFJhbmdl
LT5zZXRFbmQocmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOwotICAg
IEFTU0VSVCgmdGVzdFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBsZW5n
dGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5wdHIoKSkgLSBsb2NhdGlv
bjsKKyAgICBsb2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgeyAqc2NvcGUsIDAgfSwgeyByYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgfSB9KTsKKyAgICBsZW5n
dGggPSBjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAwIH0sIHsgcmFuZ2UtPmVuZENvbnRhaW5l
cigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkgfSB9KSAtIGxvY2F0aW9uOwogICAgIHJldHVybiB0cnVl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCAxNTdmMWRhMWQw
ZTZjOTUzZDlkZWRjNGVmYWNlMTNlOTgwZTMxMzRlLi4wOTE0ZjdiY2E2MTUwOWZiNWMzZGVlYWM5
ZDM4Y2U0ZDRjMzg5NjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKQEAg
LTM2LDcgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmFuZ2U7CiBjbGFzcyBS
ZW5kZXJUZXh0RnJhZ21lbnQ7CiAKKy8vIEZJWE1FOiBEZWxldGUgdGhpcyBvdmVybG9hZCBhZnRl
ciBtb3ZpbmcgYWxsIHRoZSBjYWxsZXJzIHRvIHRoZSBTaW1wbGVSYW5nZSB2ZXJzaW9uLgogV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dChjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJl
aGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmlu
ZyA9IGZhbHNlKTsKKwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dChjb25zdCBTaW1w
bGVSYW5nZSYsIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2
aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9IGZhbHNlKTsKIFdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBUZXh0
SXRlcmF0b3JCZWhhdmlvciA9IFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgYm9vbCBpc0Rp
c3BsYXlTdHJpbmcgPSBmYWxzZSk7CiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0VXNp
bmdCYWNrd2FyZHNUZXh0SXRlcmF0b3JGb3JUZXN0aW5nKGNvbnN0IFNpbXBsZVJhbmdlJik7CkBA
IC0xMDAsNyArMTAyLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFRleHRJdGVyYXRvckNvcHlhYmxl
VGV4dCYgY29weWFibGVUZXh0KCkgY29uc3QgeyBBU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9j
b3B5YWJsZVRleHQ7IH0KICAgICB2b2lkIGFwcGVuZFRleHRUb1N0cmluZ0J1aWxkZXIoU3RyaW5n
QnVpbGRlciYgYnVpbGRlcikgY29uc3QgeyBjb3B5YWJsZVRleHQoKS5hcHBlbmRUb1N0cmluZ0J1
aWxkZXIoYnVpbGRlcik7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBpbnQgcmFuZ2VM
ZW5ndGgoY29uc3QgUmFuZ2UqLCBib29sIHNwYWNlc0ZvclJlcGxhY2VkRWxlbWVudHMgPSBmYWxz
ZSk7CisgICAgLy8gRklYTUU6IE1vdmUgdGhlc2UgdG8gU2ltcGxlUmFuZ2UsIENoYXJhY3RlclJh
bmdlLCBhbmQgQ2hhcmFjdGVyQ291bnQgYW5kIG1vdmUgb3V0IG9mIHRoaXMgY2xhc3MgdG8gdGhl
IHRvcCBsZXZlbCAoYm90dG9tIG9mIHRoaXMgZmlsZSkuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoQ29udGFpbmVyTm9k
ZSogc2NvcGUsIGludCByYW5nZUxvY2F0aW9uLCBpbnQgcmFuZ2VMZW5ndGgsIGJvb2wgc3BhY2Vz
Rm9yUmVwbGFjZWRFbGVtZW50cyA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
Ym9vbCBnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZShOb2RlKiBzY29wZSwgY29uc3QgUmFu
Z2UqLCBzaXplX3QmIGxvY2F0aW9uLCBzaXplX3QmIGxlbmd0aCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZjxSYW5nZT4gc3VicmFuZ2UoUmFuZ2UmIGVudGlyZVJhbmdlLCBpbnQgY2hh
cmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpOwpAQCAtMjg3LDQgKzI4OSwxMyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9kaWRMb29rQWhlYWQgeyB0cnVlIH07CiB9OwogCit1c2luZyBD
aGFyYWN0ZXJDb3VudCA9IHN0ZDo6c2l6ZV90OworCitzdHJ1Y3QgQ2hhcmFjdGVyUmFuZ2Ugewor
ICAgIENoYXJhY3RlckNvdW50IGxvY2F0aW9uIHsgMCB9OworICAgIENoYXJhY3RlckNvdW50IGxl
bmd0aCB7IDAgfTsKK307CisKK1dFQkNPUkVfRVhQT1JUIENoYXJhY3RlckNvdW50IGNoYXJhY3Rl
ckNvdW50KGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3IpOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggNmI5MGZmZGJlNTRhZWNl
ODYzMzUxMzEyYTI1YjEyYWU4ZDJjZTFhMC4uOTczMDJjZjUyYTQzOWUwN2FkZjBjOGVjOWI4YTFk
Y2ViYWNjMTFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODE5LDYgKzgxOSwxMSBAQCBi
b29sIFZpc2libGVQb3NpdGlvbjo6ZXF1YWxzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3RoZXIp
IGNvbnN0CiAgICAgcmV0dXJuIG1fYWZmaW5pdHkgPT0gb3RoZXIubV9hZmZpbml0eSAmJiBtX2Rl
ZXBQb3NpdGlvbi5lcXVhbHMob3RoZXIubV9kZWVwUG9zaXRpb24pOwogfQogCitPcHRpb25hbDxC
b3VuZGFyeVBvaW50PiBtYWtlQm91bmRhcnlQb2ludChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBv
c2l0aW9uKQoreworICAgIHJldHVybiBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpKTsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJl
YW0sIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKICAgICBzd2l0Y2ggKGFmZmluaXR5KSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCA0ODU2NjgyNGVkNzNmZGFj
ZDI1NzA4ZGUzMTkzMTRlNjE5MmMwMmYwLi5mODRiY2RmZDcyZjViYzQ1NzYzM2RhNDgzMjcyMWU1
Mjc3YTI0ODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsMTAgKzI4LDYgQEAKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKICNpbmNsdWRl
ICJQb3NpdGlvbi5oIgogCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmFuZ2U7CkBAIC00OSw5ICs0NSw2IEBAIGNs
YXNzIFJhbmdlOwogLy8gcG9zaXRpb24gaXMgbm90IGF0IGEgbGluZSBicmVhay4KICNkZWZpbmUg
VlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgVVBTVFJFQU0KIAotY2xhc3MgSW5saW5lQm94OwotY2xh
c3MgTm9kZTsKLQogY2xhc3MgVmlzaWJsZVBvc2l0aW9uIHsKIHB1YmxpYzoKICAgICAvLyBOT1RF
OiBVUFNUUkVBTSBhZmZpbml0eSB3aWxsIGJlIHVzZWQgb25seSBpZiBwb3MgaXMgYXQgZW5kIG9m
IGEgd3JhcHBlZCBsaW5lLApAQCAtODUsMjEgKzc4LDE2IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGRvZXMgbm90IGhhbmRsZSBbdGFibGUsIDBdIGNvcnJlY3RseS4KICAgICBFbGVt
ZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24u
aXNOb3ROdWxsKCkgPyBtX2RlZXBQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCkgOiAwOyB9Ci0gICAgCi0gICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQo
SW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAotICAgIHsKLSAg
ICAgICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIGlu
bGluZUJveCwgY2FyZXRPZmZzZXQpOwotICAgIH0KIAotICAgIHZvaWQgZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYgaW5saW5l
Qm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAotICAgIHsKLSAgICAgICAgbV9kZWVwUG9zaXRp
b24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24sIGlu
bGluZUJveCwgY2FyZXRPZmZzZXQpOwotICAgIH0KKyAgICB2b2lkIGdldElubGluZUJveEFuZE9m
ZnNldChJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7CisgICAgdm9pZCBnZXRJ
bmxpbmVCb3hBbmRPZmZzZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVC
b3gqJiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7CiAKICAgICAvLyBSZWN0IGlzIGxvY2FsIHRv
IHRoZSByZXR1cm5lZCByZW5kZXJlcgogICAgIFdFQkNPUkVfRVhQT1JUIExheW91dFJlY3QgbG9j
YWxDYXJldFJlY3QoUmVuZGVyT2JqZWN0KiYpIGNvbnN0OworCiAgICAgLy8gQm91bmRzIG9mIChw
b3NzaWJseSB0cmFuc2Zvcm1lZCkgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRzCiAgICAgV0VCQ09S
RV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkID0g
bnVsbHB0cikgY29uc3Q7CisKICAgICAvLyBBYnMgeC95IHBvc2l0aW9uIG9mIHRoZSBjYXJldCBp
Z25vcmluZyB0cmFuc2Zvcm1zLgogICAgIC8vIEZJWE1FOiBuYXZpZ2F0aW9uIHdpdGggdHJhbnNm
b3JtcyBzaG91bGQgYmUgc21hcnRlci4KICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgbGluZURpcmVj
dGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKCkgY29uc3Q7CkBAIC0xMDcsNyAr
OTUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGFic29sdXRlU2Vs
ZWN0aW9uQm91bmRzRm9yTGluZSgpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBpcyBhIHRlbnRhdGl2
ZSBlbmhhbmNlbWVudCBvZiBvcGVyYXRvcj09IHRvIGFjY291bnQgZm9yIGFmZmluaXR5LgotICAg
IC8vIEZJWE1FOiBDb21iaW5lIHRoaXMgZnVuY3Rpb24gd2l0aCBvcGVyYXRvcj09CisgICAgLy8g
RklYTUU6IENvbWJpbmUgdGhpcyBmdW5jdGlvbiB3aXRoIG9wZXJhdG9yPT0uCiAgICAgYm9vbCBl
cXVhbHMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Q7CiAKICNpZiBFTkFCTEUoVFJFRV9E
RUJVR0dJTkcpCkBAIC0xMTUsNyArMTAzLDcgQEAgcHVibGljOgogICAgIHZvaWQgZm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwogICAgIHZvaWQg
c2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CiAjZW5kaWYKLSAgICAKKwogcHJpdmF0ZToKICAgICB2
b2lkIGluaXQoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHkpOwogICAgIFBvc2l0aW9uIGNhbm9u
aWNhbFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJik7CkBAIC0xMjcsMjMgKzExNSw1MCBAQCBwcml2
YXRlOgogICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OwogfTsKIAorYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwor
Ym9vbCBvcGVyYXRvcjwoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJik7Citib29sIG9wZXJhdG9yPihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0b3I8PShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2Jvb2wgb3BlcmF0b3I+PShjb25zdCBWaXNpYmxlUG9z
aXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKworV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5kYXJ5UG9pbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CisKK1dFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBzZXRTdGFydChSYW5n
ZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBzZXRFbmQoUmFuZ2UqLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mKTsKK1Zpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihj
b25zdCBSYW5nZSosIEVBZmZpbml0eSk7CitWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0
aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKKworV0VCQ09SRV9FWFBPUlQgRWxlbWVudCog
ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKworYm9v
bCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IE5vZGUqKTsKK2Jvb2wgaXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKKworYm9vbCBhcmVWaXNpYmxlUG9zaXRpb25zSW5T
YW1lVHJlZVNjb3BlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOworCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgRUFm
ZmluaXR5KTsKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKworLy8gaW5saW5lcworCiAv
LyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgaWdub3JlIGFmZmluaXR5LgogaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
YikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgpID09IGIuZGVlcEVxdWl2YWxlbnQo
KTsKIH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwog
fQotICAgIAorCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBh
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7CiAgICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxl
bnQoKSA8IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0KIAotaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKSAKK2lubGlu
ZSBib29sIG9wZXJhdG9yPihjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYikKIHsKICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgpID4gYi5kZWVwRXF1
aXZhbGVudCgpOwogfQpAQCAtMTUzLDI2ICsxNjgsMjAgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I8
PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKICAg
ICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgpIDw9IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0KIAot
aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgYikgCitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewogICAgIHJldHVybiBhLmRl
ZXBFcXVpdmFsZW50KCkgPj0gYi5kZWVwRXF1aXZhbGVudCgpOwotfSAgICAKLQotV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIHNldFN0YXJ0KFJhbmdlKiwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJik7Ci1ib29sIHNldEVuZChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OwotVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFm
ZmluaXR5KTsKLVZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2Uq
LCBFQWZmaW5pdHkpOwotCi1XRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBlbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotCi1ib29sIGlzRmlyc3RWaXNpYmxl
UG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOwotYm9v
bCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29u
c3QgTm9kZSopOworfQogCi1ib29sIGFyZVZpc2libGVQb3NpdGlvbnNJblNhbWVUcmVlU2NvcGUo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitpbmxpbmUg
dm9pZCBWaXNpYmxlUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChJbmxpbmVCb3gqJiBp
bmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0Cit7CisgICAgbV9kZWVwUG9zaXRpb24u
Z2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIGlubGluZUJveCwgY2FyZXRPZmZzZXQp
OworfQogCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgRUFm
ZmluaXR5KTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK2lubGluZSB2b2lkIFZpc2li
bGVQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURp
cmVjdGlvbiwgSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAor
eworICAgIG1fZGVlcFBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBw
cmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKK30KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5k
ZXggOTEwOWFiOTU0OTA2OWYzNjA0ZjA5ODZhYzk4ZThiOTk0NDlhMTRhZS4uZDZmNzE3ODllNGUx
Zjk5ZjhjNzQ1NTMwZjIxNTc3ZjQ4OTg2ODU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVVuaXRzLmNwcApAQCAtMTkwMSwyMCArMTkwMSwxMyBAQCBSZWZQdHI8UmFuZ2U+IGVuY2xv
c2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBUZXh0
R3JhbgogICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHByZXZCb3VuZGFyeS5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksIHByZXZCb3VuZGFyeSwgbmV4dEJvdW5k
YXJ5KTsKIH0KIAotaW50IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZwLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIG90aGVyKQorc3RkOjpwdHJkaWZmX3Qg
ZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBiKQogewotICAgIGlmICh2cC5pc051bGwoKSB8fCBvdGhlci5pc051
bGwoKSkKKyAgICBpZiAoYS5pc051bGwoKSB8fCBiLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
MDsKLQotICAgIGJvb2wgdGhpc0lzU3RhcnQgPSAodnAgPCBvdGhlcik7Ci0KLSAgICAvLyBTdGFy
dCBtdXN0IGNvbWUgZmlyc3QgaW4gdGhlIFJhbmdlIGNvbnN0cnVjdG9yLgotICAgIGF1dG8gcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKHZwLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+
ZG9jdW1lbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhp
c0lzU3RhcnQgPyB2cCA6IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodGhpc0lzU3RhcnQgPyBvdGhlciA6IHZwKSk7Ci0gICAgaW50IGRpc3RhbmNlID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5wdHIoKSk7Ci0KLSAgICByZXR1cm4gKHRo
aXNJc1N0YXJ0ID8gLWRpc3RhbmNlIDogZGlzdGFuY2UpOworICAgIHJldHVybiBhIDwgYgorICAg
ICAgICA/IC1jaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChhKSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KGIpIH0pCisgICAgICAgIDogY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5
UG9pbnQoYiksICptYWtlQm91bmRhcnlQb2ludChhKSB9KTsKIH0KIAogdm9pZCBjaGFyYWN0ZXJz
QXJvdW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgVUNoYXIzMiYg
b25lQWZ0ZXIsIFVDaGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggNjcxN2ViMTFkZGRiZDg2OGU0NDE0YzM5
ODAzMzUyYTAzMTZhZmUzZS4uYjBlMjgyN2JlY2VlNDQzZGU0MDdiNjVhODJlOGRkZGQ1OWY5MWM4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCkBAIC0xMDIsNyArMTAyLDcg
QEAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNp
YmxlUG9zaXRpb24mLCBUZXh0R3JhbnVsYXIKIFdFQkNPUkVfRVhQT1JUIGJvb2wgd2l0aGluVGV4
dFVuaXRPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRHcmFudWxhcml0
eSwgU2VsZWN0aW9uRGlyZWN0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8UmFuZ2U+IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShjb25zdCBWaXNpYmxl
UG9zaXRpb24mLCBUZXh0R3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbik7Ci1XRUJDT1JF
X0VYUE9SVCBpbnQgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgc3RkOjpwdHJkaWZm
X3QgZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB3b3JkUmFu
Z2VGcm9tUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBXRUJDT1JFX0VYUE9SVCBW
aXNpYmxlUG9zaXRpb24gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgcG9zaXRpb24pOwogV0VCQ09SRV9FWFBPUlQgdm9pZCBjaGFyYWN0ZXJzQXJv
dW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVUNoYXIzMiYgb25lQWZ0ZXIsIFVD
aGFyMzImIG9uZUJlZm9yZSwgVUNoYXIzMiYgdHdvQmVmb3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQppbmRleCAxMDNlNTUzYjIzN2E5MTk3YmMz
OGQyNDIxNjAyNDZjNmQyMzIyNjM1Li4yYjkzMTdiMTcxM2YyNjBhMmRhZjM4YzViMWZiYTRlMDg0
YWI3Y2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRl
Y3Rpb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCkBAIC03MSwxNSArNzEsMTggQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRp
YyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5n
ZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBG
bG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3Rl
ZERhdGFSYW5nZSkKIHsKICAgICBTdHJpbmcgZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4
dChjb250ZXh0UmFuZ2UuZ2V0KCkpOwotICAgIGludCBoaXRMb2NhdGlvbiA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBw
b3NpdGlvbikuZ2V0KCkpOworICAgIGF1dG8gc3RhcnQgPSBjb250ZXh0UmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKTsKKyAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgcG9zaXRpb24uaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgQ0ZJbmRleCBoaXRMb2NhdGlvbiA9IGNoYXJhY3RlckNv
dW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHBvc2l0
aW9uKSB9KTsKIAotICAgIFJldGFpblB0cjxERFNjYW5uZXJSZWY+IHNjYW5uZXIgPSBhZG9wdENG
KEREU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKLSAg
ICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVl
cnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJp
bmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0
cmluZy5sZW5ndGgoKSkpKTsKKyAgICBhdXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNy
ZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKKyAgICBhdXRvIHNjYW5R
dWVyeSA9IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGZ1bGxQbGFpblRleHRTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5n
ZU1ha2UoMCwgZnVsbFBsYWluVGV4dFN0cmluZy5sZW5ndGgoKSkpKTsKIAogICAgIGlmICghRERT
Y2FubmVyU2NhblF1ZXJ5KHNjYW5uZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IHJlc3VsdHMgPSBhZG9wdENGKEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlv
bnMoc2Nhbm5lci5nZXQoKSwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwKSk7
CisgICAgYXV0byByZXN1bHRzID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRp
b25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkp
OwogCiAgICAgLy8gRmluZCB0aGUgRERSZXN1bHRSZWYgdGhhdCBpbnRlcnNlY3RzIHRoZSBoaXRU
ZXN0UmVzdWx0J3MgVmlzaWJsZVBvc2l0aW9uLgogICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQg
PSBudWxscHRyOwpAQCAtMTAwLDcgKzEwMyw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25D
b250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24KICAg
ICB9CiAKICAgICBpZiAoIW1haW5SZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gbmlsOwogCiAgICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gYWN0aW9u
Q29udGV4dCA9IGFkb3B0TlMoW2FsbG9jRERBY3Rpb25Db250ZXh0SW5zdGFuY2UoKSBpbml0XSk7
CiAgICAgW2FjdGlvbkNvbnRleHQgc2V0QWxsUmVzdWx0czpAWyAoX19icmlkZ2UgaWQpbWFpblJl
c3VsdCBdXTsKQEAgLTExMiw5ICsxMTUsOSBAQCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29u
dGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uCiAgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52
aWV3KCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCiAgICAgICAgIGRldGVj
dGVkRGF0YUJvdW5kaW5nQm94LnVuaXRlKGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhxdWFk
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpKTsKLSAgICAKKwogICAgIGRldGVjdGVkRGF0YVJhbmdl
ID0gbWFpblJlc3VsdFJhbmdlOwotICAgIAorCiAgICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxv
b2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5t
bQppbmRleCA4Nzk3MjIwMjg0NjhmMDNlMDJlYWU1OWI1NWEyOWEyM2RlY2U5MmVlLi5kNjQ4ZmQ3
MGZjMzhmYzkyYzI0ZTUxNzg5MDQ3Y2VmNjI2M2ZhNTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY0LDEyICsyNjQsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rp
b25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICAKKwogICAgIGlmICghUmV2ZWFsTGlicmFyeSgpIHx8ICFSZXZlYWxDb3JlTGlicmFy
eSgpIHx8ICFnZXRSVkl0ZW1DbGFzcygpKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwg
fTsKLSAgICAKLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCisKKyAgICBpZiAoIXNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAog
ICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBu
ZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCkBAIC0yNzksMjAgKzI3OCwyMiBAQCBz
dGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3Vw
OjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAgIC8vIEFzIGNvbnRleHQsIHdlIGFyZSBnb2luZyB0
byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4dC4KICAgICBhdXRvIHBhcmFn
cmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25TdGFydCk7CiAgICAgYXV0byBw
YXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgIGlmIChwYXJh
Z3JhcGhTdGFydC5pc051bGwoKSB8fCBwYXJhZ3JhcGhFbmQuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiB7IG51bGxwdHIsIG5pbCB9OworCisgICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQpLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOworICAgIGF1dG8gc2VsZWN0aW9u
Q2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxl
Y3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH0pOworICAgIE5T
UmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0LCBz
ZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CiAKLSAgICBpbnQgbGVuZ3RoVG9TZWxlY3Rpb25TdGFy
dCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBz
ZWxlY3Rpb25TdGFydCkuZ2V0KCkpOwotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvbkVuZCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rp
b25FbmQpLmdldCgpKTsKLSAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UobGVu
Z3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1NlbGVj
dGlvblN0YXJ0KTsKLSAgICAKICAgICBSZWZQdHI8UmFuZ2U+IGZ1bGxDaGFyYWN0ZXJSYW5nZSA9
IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKICAgICBTdHJpbmcgaXRl
bVN0cmluZyA9IHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpOwogICAgIFJldGFp
blB0cjxSVkl0ZW0+IGl0ZW0gPSBhZG9wdE5TKFthbGxvY1JWSXRlbUluc3RhbmNlKCkgaW5pdFdp
dGhUZXh0Oml0ZW1TdHJpbmcgc2VsZWN0ZWRSYW5nZTpyYW5nZVRvUGFzc10pOwogICAgIE5TUmFu
Z2UgaGlnaGxpZ2h0UmFuZ2UgPSBpdGVtLmdldCgpLmhpZ2hsaWdodFJhbmdlOwotICAgIAorCiAg
ICAgcmV0dXJuIHsgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgqZnVsbENoYXJhY3RlclJhbmdlLCBo
aWdobGlnaHRSYW5nZS5sb2NhdGlvbiwgaGlnaGxpZ2h0UmFuZ2UubGVuZ3RoKSwgbmlsIH07Ci0g
ICAgCisKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAorCiAgICAgcmV0dXJu
IHsgbnVsbHB0ciwgbmlsIH07CiB9CiAKQEAgLTMyMiw0MyArMzIzLDQwIEBAIHN0ZDo6dHVwbGU8
UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlQXRI
aXRUZXN0UmVzdWx0CiAKICAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLT5wYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwogICAgIE5TUmFuZ2Ugc2VsZWN0aW9uUmFuZ2U7Ci0gICAgaW50IGhpdEluZGV4OworICAgIE5T
VUludGVnZXIgaGl0SW5kZXg7CiAgICAgUmVmUHRyPFJhbmdlPiBmdWxsQ2hhcmFjdGVyUmFuZ2U7
CiAgICAgCiAgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVj
dGlvbjo6UmFuZ2VTZWxlY3Rpb24pIHsKICAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxl
Y3Rpb24udmlzaWJsZUVuZCgpOwotICAgICAgICAKKwogICAgICAgICAvLyBBcyBjb250ZXh0LCB3
ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzIG9mIHRleHQuCiAg
ICAgICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0
YXJ0KTsKICAgICAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rp
b25FbmQpOwogICAgICAgICAKLSAgICAgICAgYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQgPSBt
YWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byBy
YW5nZVRvU2VsZWN0aW9uRW5kID0gbWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0LCBzZWxlY3Rpb25F
bmQpOwotICAgICAgICAKICAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gbWFrZVJhbmdlKHBh
cmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwogICAgICAgICBpZiAoIWZ1bGxDaGFyYWN0ZXJS
YW5nZSkKICAgICAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwogCi0gICAgICAgIHNl
bGVjdGlvblJhbmdlID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5n
ZVRvU2VsZWN0aW9uU3RhcnQuZ2V0KCkpLCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VS
YW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSkpOwotICAgICAgICAKLSAg
ICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJh
Z3JhcGhTdGFydCwgcG9zaXRpb24pLmdldCgpKTsKKyAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBO
U01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhT
dGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCkgfSksCisgICAgICAgICAg
ICBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICpt
YWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH0pKTsKKyAgICAgICAgaGl0SW5kZXggPSBj
aGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhTdGFydCksICptYWtl
Qm91bmRhcnlQb2ludChwb3NpdGlvbikgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb25BY2NvdW50aW5nRm9yTGluZVJ1bGVzIHsgcG9zaXRpb24gfTsK
ICAgICAgICAgc2VsZWN0aW9uQWNjb3VudGluZ0ZvckxpbmVSdWxlcy5leHBhbmRVc2luZ0dyYW51
bGFyaXR5KFdvcmRHcmFudWxhcml0eSk7CiAgICAgICAgIHBvc2l0aW9uID0gc2VsZWN0aW9uQWNj
b3VudGluZ0ZvckxpbmVSdWxlcy5zdGFydCgpOworCiAgICAgICAgIC8vIEFzIGNvbnRleHQsIHdl
IGFyZSBnb2luZyB0byB1c2UgMjUwIGNoYXJhY3RlcnMgb2YgdGV4dCBiZWZvcmUgYW5kIGFmdGVy
IHRoZSBwb2ludC4KICAgICAgICAgZnVsbENoYXJhY3RlclJhbmdlID0gcmFuZ2VFeHBhbmRlZEFy
b3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICAKICAgICAg
ICAgaWYgKCFmdWxsQ2hhcmFjdGVyUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4geyBudWxscHRy
LCBuaWwgfTsKLSAgICAgICAgCisKICAgICAgICAgc2VsZWN0aW9uUmFuZ2UgPSBOU01ha2VSYW5n
ZShOU05vdEZvdW5kLCAwKTsKLSAgICAgICAgaGl0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKG1ha2VSYW5nZShmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9z
aXRpb24pLmdldCgpKTsKKyAgICAgICAgaGl0SW5kZXggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChmdWxsQ2hhcmFjdGVyUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtl
Qm91bmRhcnlQb2ludChwb3NpdGlvbikgfSk7CiAgICAgfQotICAgIAorCiAgICAgTlNSYW5nZSBz
ZWxlY3RlZFJhbmdlID0gW2dldFJWU2VsZWN0aW9uQ2xhc3MoKSByZXZlYWxSYW5nZUF0SW5kZXg6
aGl0SW5kZXggc2VsZWN0ZWRSYW5nZXM6QFtbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpzZWxlY3Rp
b25SYW5nZV1dIHNob3VsZFVwZGF0ZVNlbGVjdGlvbjpuaWxdOwotICAgIAorCiAgICAgU3RyaW5n
IGl0ZW1TdHJpbmcgPSBwbGFpblRleHQoKmZ1bGxDaGFyYWN0ZXJSYW5nZSk7CiAgICAgUmV0YWlu
UHRyPFJWSXRlbT4gaXRlbSA9IGFkb3B0TlMoW2FsbG9jUlZJdGVtSW5zdGFuY2UoKSBpbml0V2l0
aFRleHQ6aXRlbVN0cmluZyBzZWxlY3RlZFJhbmdlOnNlbGVjdGVkUmFuZ2VdKTsKICAgICBOU1Jh
bmdlIGhpZ2hsaWdodFJhbmdlID0gaXRlbS5nZXQoKS5oaWdobGlnaHRSYW5nZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKaW5kZXgg
OWMxYWU4ODg5NTFmYjNiYjI1NmVkN2UwOWUyNDE3NmJjOGQzYzM4OS4uYTJiODE4Mjg3N2IyOGFm
MjljOGEwNjM5NTRkMzc0Y2Q1YWE1YTVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKQEAgLTQ4LDkgKzQ4LDcgQEAgRGljdGF0
aW9uQ29tbWFuZElPUzo6RGljdGF0aW9uQ29tbWFuZElPUyhEb2N1bWVudCYgZG9jdW1lbnQsIFZl
Y3RvcjxWZWN0b3I8U3RyaW4KIAogdm9pZCBEaWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KCkK
IHsKLSAgICBWaXNpYmxlUG9zaXRpb24gaW5zZXJ0aW9uUG9zaXRpb24oc3RhcnRpbmdTZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKSk7Ci0KLSAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSAwOwor
ICAgIENoYXJhY3RlckNvdW50IHJlc3VsdExlbmd0aCA9IDA7CiAgICAgZm9yIChhdXRvJiBpbnRl
cnByZXRhdGlvbnMgOiBtX2RpY3RhdGlvblBocmFzZXMpIHsKICAgICAgICAgY29uc3QgU3RyaW5n
JiBmaXJzdEludGVycHJldGF0aW9uID0gaW50ZXJwcmV0YXRpb25zWzBdOwogICAgICAgICByZXN1
bHRMZW5ndGggKz0gZmlyc3RJbnRlcnByZXRhdGlvbi5sZW5ndGgoKTsKQEAgLTYyLDIwICs2MCwy
MyBAQCB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5k
KCkpKTsKICAgICB9CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gYWZ0ZXJSZXN1bHRzKGVuZGluZ1Nl
bGVjdGlvbigpLnZpc2libGVFbmQoKSk7CisgICAgLy8gRklYTUU6IEFkZCB0aGUgcmVzdWx0IG1h
cmtlciB1c2luZyBhIFBvc2l0aW9uIGNhY2hlZCBiZWZvcmUgcmVzdWx0cyBhcmUgaW5zZXJ0ZWQs
IGluc3RlYWQgb2YgcmVseWluZyBvbiBjaGFyYWN0ZXIgY291bnRzLgogCi0gICAgRWxlbWVudCog
cm9vdCA9IGFmdGVyUmVzdWx0cy5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgYXV0byBlbmRQ
b3NpdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVFbmQoKTsKKyAgICBhdXRvIGVuZCA9
IG1ha2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKTsKKyAgICBhdXRvKiByb290ID0gZW5kUG9z
aXRpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIGlmICghZW5kIHx8ICFyb290KQorICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBGSVhNRTogQWRkIHRoZSByZXN1bHQgbWFya2VyIHVzaW5n
IGEgUG9zaXRpb24gY2FjaGVkIGJlZm9yZSByZXN1bHRzIGFyZSBpbnNlcnRlZCwgaW5zdGVhZCBv
ZiByZWx5aW5nIG9uIFRleHRJdGVyYXRvcnMuCi0gICAgYXV0byByYW5nZVRvRW5kID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oKE5vZGUgKily
b290LCAwKSwgYWZ0ZXJSZXN1bHRzLmRlZXBFcXVpdmFsZW50KCkpOwotICAgIGludCBlbmRJbmRl
eCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2VUb0VuZC5wdHIoKSwgdHJ1ZSk7Ci0g
ICAgaW50IHN0YXJ0SW5kZXggPSBlbmRJbmRleCAtIHJlc3VsdExlbmd0aDsKKyAgICBhdXRvIGVu
ZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgeyAqcm9vdCwgMCB9LCBXVEZNb3ZlKCplbmQpIH0p
OworICAgIGlmIChlbmRPZmZzZXQgPCByZXN1bHRMZW5ndGgpCisgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChzdGFydEluZGV4ID49IDApIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRS
YW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoZG9jdW1lbnQo
KS5kb2N1bWVudEVsZW1lbnQoKSwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRydWUpOwotICAgICAg
ICBBU1NFUlQocmVzdWx0UmFuZ2UpOyAvLyBGSVhNRTogV2hhdCBndWFyYW50ZWVzIHRoaXM/Ci0g
ICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcigqcmVz
dWx0UmFuZ2UsIG1fbWV0YWRhdGEpOwotICAgIH0KKyAgICBhdXRvIHJlc3VsdFJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChyb290LCBlbmRPZmZzZXQgLSBy
ZXN1bHRMZW5ndGgsIGVuZE9mZnNldCk7CisgICAgaWYgKCFyZXN1bHRSYW5nZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFy
a2VyKCpyZXN1bHRSYW5nZSwgbV9tZXRhZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
TGVnYWN5Lm1tCmluZGV4IDE2MTU5MDdkNjkxMTBjNjg1Zjc3MzA3MzE4YmIyYTU1NzE5NjhhNGUu
LjUxMzViOTA2ZGVlMThlMDE3NzllYzYxMTQ3NDMxYzc5NWUzOGE1OGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTg5LDEwICs4OSwxMiBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAq
PiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAgIC8vIEFzIGNvbnRl
eHQsIHdlIGFyZSBnb2luZyB0byB1c2UgdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMgb2YgdGV4
dC4KICAgICBhdXRvIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb25T
dGFydCk7CiAgICAgYXV0byBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaChzZWxlY3Rpb25F
bmQpOworICAgIGlmIChwYXJhZ3JhcGhTdGFydC5pc051bGwoKSB8fCBwYXJhZ3JhcGhFbmQuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwogCi0gICAgaW50IGxlbmd0
aFRvU2VsZWN0aW9uU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShw
YXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLSAgICBpbnQgbGVuZ3RoVG9T
ZWxlY3Rpb25FbmQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3Jh
cGhTdGFydCwgc2VsZWN0aW9uRW5kKS5nZXQoKSk7Ci0gICAgTlNSYW5nZSByYW5nZVRvUGFzcyA9
IE5TTWFrZVJhbmdlKGxlbmd0aFRvU2VsZWN0aW9uU3RhcnQsIGxlbmd0aFRvU2VsZWN0aW9uRW5k
IC0gbGVuZ3RoVG9TZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBsZW5ndGhUb1NlbGVjdGlvblN0
YXJ0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoU3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoc2VsZWN0aW9uU3RhcnQpIH0pOworICAgIGF1dG8gc2VsZWN0
aW9uQ2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChz
ZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25FbmQpIH0pOworICAg
IE5TUmFuZ2UgcmFuZ2VUb1Bhc3MgPSBOU01ha2VSYW5nZShsZW5ndGhUb1NlbGVjdGlvblN0YXJ0
LCBzZWxlY3Rpb25DaGFyYWN0ZXJDb3VudCk7CiAKICAgICBOU0RpY3Rpb25hcnkgKm9wdGlvbnMg
PSBuaWw7CiAgICAgdG9rZW5SYW5nZShwbGFpblRleHQobWFrZVJhbmdlKHBhcmFncmFwaFN0YXJ0
LCBwYXJhZ3JhcGhFbmQpLmdldCgpKSwgcmFuZ2VUb1Bhc3MsICZvcHRpb25zKTsKQEAgLTEzMyw3
ICsxMzUsMTIgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGlj
dGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQKICAgICBpZiAoIWZ1bGxDaGFyYWN0
ZXJSYW5nZSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAKLSAgICBOU1Jhbmdl
IHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtl
UmFuZ2UoZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uKS5nZXQo
KSksIDApOworICAgIGF1dG8gZnVsbENoYXJhY3RlclN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQo
ZnVsbENoYXJhY3RlclJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGF1dG8gcG9zaXRpb25C
b3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uKTsKKyAgICBpZiAoIWZ1bGxDaGFy
YWN0ZXJTdGFydCB8fCAhcG9zaXRpb25Cb3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CisKKyAgICBOU1JhbmdlIHJhbmdlVG9QYXNzID0gTlNNYWtlUmFuZ2UoY2hhcmFj
dGVyQ291bnQoeyAqZnVsbENoYXJhY3RlclN0YXJ0LCAqcG9zaXRpb25Cb3VuZGFyeSB9KSwgMCk7
CiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogICAgIE5TUmFuZ2UgZXh0cmFjdGVk
UmFuZ2UgPSB0b2tlblJhbmdlKHBsYWluVGV4dChmdWxsQ2hhcmFjdGVyUmFuZ2UuZ2V0KCkpLCBy
YW5nZVRvUGFzcywgJm9wdGlvbnMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
aW5kZXggZWRlMGI0YTAwOGFjOTk5YzA0YTRjYzY4ZjdhZWQ5YWEyZGI2Y2VhZi4uMTJjZDBkYjVl
YTBkNDM3NzY4MTJiNWI1NWY5NWYwYmJlYzUzZjc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcApAQCAtNjU0LDEwICs2NTQsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlUHJlc3NFdmVudFRyaXBsZUNsaWNrKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFIK
ICAgICByZXR1cm4gdXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEb3duRGlzcGF0Y2hpbmdTZWxlY3RT
dGFydCh0YXJnZXROb2RlLCBleHBhbmRTZWxlY3Rpb25Ub1Jlc3BlY3RTZWxlY3RPbk1vdXNlRG93
bigqdGFyZ2V0Tm9kZSwgbmV3U2VsZWN0aW9uKSwgUGFyYWdyYXBoR3JhbnVsYXJpdHkpOwogfQog
Ci1zdGF0aWMgaW50IHRleHREaXN0YW5jZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpCitzdGF0aWMgQ2hhcmFjdGVyQ291bnQgdGV4dERpc3RhbmNlKGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKLSAgICBhdXRvIHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShzdGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQp
OwotICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLnB0cigpLCB0cnVl
KTsKKyAgICBhdXRvIHN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydCk7Cisg
ICAgYXV0byBlbmRCb3VuZGFyeSA9IG1ha2VCb3VuZGFyeVBvaW50KGVuZCk7CisgICAgaWYgKCFz
dGFydEJvdW5kYXJ5IHx8ICFlbmRCb3VuZGFyeSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGNoYXJhY3RlckNvdW50KHsgKnN0YXJ0Qm91bmRhcnksICplbmRCb3VuZGFyeSB9LCBUZXh0
SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiB9CiAK
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9F
ZGl0aW5nUmFuZ2UuY3BwCmluZGV4IDFhZmFlNWViYmY1ZTYzZDliZWRmMzAzOWRmNDQ1MWM5YjU1
M2E2MzguLmI4OTkzM2ZmYTFiZjI4NDNjMjZmZGJkNjZkMjkyNmVkMDBjNWY2YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRpbmdSYW5nZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvRWRpdGluZ1JhbmdlLmNwcApAQCAtNTgsMTggKzU4LDE3IEBAIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gRWRpdGluZ1JhbmdlOjp0b1JhbmdlKFdlYkNvcmU6OkZyYW1lJiBmcmFt
ZSwgY29uc3QgRWRpdGluCiAKICAgICBBU1NFUlQoZWRpdGluZ1JhbmdlSXNSZWxhdGl2ZVRvID09
IEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbzo6UGFyYWdyYXBoKTsKIAotICAgIGNvbnN0IFdlYkNv
cmU6OlZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKKyAgICBh
dXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAo
IXNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtYWtlUmFuZ2Uo
c3RhcnRPZlBhcmFncmFwaChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpLCBzZWxlY3Rpb24udmlz
aWJsZUVuZCgpKTsKLSAgICBpZiAoIXBhcmFncmFwaFJhbmdlKQorICAgIGF1dG8gcGFyYWdyYXBo
U3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKSkpOworICAgIGlmICghcGFyYWdyYXBoU3RhcnQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBoU3RhcnQtPmNvbnRhaW5lci0+
dHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKIAotICAgIGF1dG8mIHJvb3ROb2RlID0gcGFyYWdyYXBo
UmFuZ2UuZ2V0KCktPnN0YXJ0Q29udGFpbmVyKCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKLSAg
ICBpbnQgcGFyYWdyYXBoU3RhcnRJbmRleCA9IFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZShyb290Tm9kZS5kb2N1bWVudCgpLCAmcm9vdE5v
ZGUsIDAsICZwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcGFyYWdyYXBoUmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCkpLnB0cigpKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJhdG9y
OjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5k
ZXggKyBzdGF0aWNfY2FzdDxpbnQ+KHJhbmdlLmxvY2F0aW9uKSwgbGVuZ3RoKTsKKyAgICBhdXRv
IHBhcmFncmFwaFN0YXJ0SW5kZXggPSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCh7IHsgcm9vdE5v
ZGUsIDAgfSwgKnBhcmFncmFwaFN0YXJ0IH0pOworICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRl
cmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3Rh
cnRJbmRleCArIHJhbmdlLmxvY2F0aW9uLCBsZW5ndGgpOwogfQogCiBFZGl0aW5nUmFuZ2UgRWRp
dGluZ1JhbmdlOjpmcm9tUmFuZ2UoV2ViQ29yZTo6RnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3Jl
OjpSYW5nZSogcmFuZ2UsIEVkaXRpbmdSYW5nZUlzUmVsYXRpdmVUbyBlZGl0aW5nUmFuZ2VJc1Jl
bGF0aXZlVG8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDllMjQ3NThjZDkyY2Y3NTA4NmZj
YzIxODI0YjM1Yzg4MDcxMjMyNzMuLjljZTVkYmFjMTE0YTQ5NWZlYTRhOWU5NTNkOWJmZmM4MWVi
ZDc2Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC0zNjEsNiArMzYxLDcgQEAgV2ViQ29y
ZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZSBXZWJFZGl0b3JDbGllbnQ6OnJlcXVlc3RET01QYXN0
ZUFjY2Vzcyhjb25zdCBTdHIKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVVTRShHTElC
KQorCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50JiBldmVudCkKIHsKICAgICBpZiAobV9wYWdlLT5oYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVu
dChldmVudCkpCkBAIC0zNzEsNiArMzcyLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRs
ZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50JikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQorCiAjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEdMSUIpCiAKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCogZWxl
bWVudCkKQEAgLTQyMCw2ICs0MjIsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dERpZENo
YW5nZUluVGV4dEFyZWEoRWxlbWVudCogZWxlbWVudCkKIH0KIAogI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQorCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNo
YW5nZWQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC00MjksNiArNDMyLDcgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnN1YkZyYW1lU2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQorCiAjZW5kaWYKIAogc3RhdGljIGJvb2wgZ2V0QWN0aW9u
VHlwZUZvcktleUV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50LCBXS0lucHV0RmllbGRBY3Rpb25U
eXBlJiB0eXBlKQpAQCAtNTQ5LDIwICs1NTMsMjUgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNo
ZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW0K
ICAgICAqYmFkR3JhbW1hckxlbmd0aCA9IHJlc3VsdExlbmd0aDsKIH0KIAotc3RhdGljIGludDMy
X3QgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKQorc3RhdGljIENoYXJhY3RlckNvdW50IGluc2VydGlvblBv
aW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVudFNl
bGVjdGlvbikKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBjdXJyZW50
U2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhT
dGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOwotICAgIHJldHVybiBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9u
U3RhcnQpLmdldCgpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVudFNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtl
Qm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9
IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKKyAg
ICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfHwgIXBhcmFncmFwaFN0YXJ0KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQs
ICpzZWxlY3Rpb25TdGFydEJvdW5kYXJ5IH0pOwogfQogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKKwogVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE9wdGlvblNldDxXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHJlc3VsdHM7CiAgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpD
aGVja1RleHRPZlBhcmFncmFwaChzdHJpbmdWaWV3LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwg
Y2hlY2tpbmdUeXBlcywgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50
U2VsZWN0aW9uKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBo
OjpSZXBseShyZXN1bHRzKSk7CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CisKICNlbmRpZgogCiB2
b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNv
bnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1h
ckRldGFpbCkKQEAgLTYxNiwxNSArNjI1LDEzIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJ
bnB1dE1ldGhvZFN0YXRlKEVsZW1lbnQqIGVsZW1lbnQpCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50
OjpzdXBwb3J0c0dsb2JhbFNlbGVjdGlvbigpCiB7Ci0jaWYgUExBVEZPUk0oR1RLKQotI2lmIFBM
QVRGT1JNKFgxMSkKKyNpZiBQTEFURk9STShHVEspICYmIFBMQVRGT1JNKFgxMSkKICAgICBpZiAo
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgpID09IFBsYXRmb3JtRGlzcGxh
eTo6VHlwZTo6WDExKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotI2lmIFBMQVRGT1JN
KFdBWUxBTkQpCisjaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShXQVlMQU5EKQogICAgIGlm
IChQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXkoKS50eXBlKCkgPT0gUGxhdGZvcm1EaXNw
bGF5OjpUeXBlOjpXYXlsYW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogI2VuZGlm
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAppbmRleCAxNzVhOWMxMDdhNWIyMjZlZTMxMDI5NmRmNDAyNzk1ZmJlZjc2
ZmM5Li5kNmYzOTYzNGEwNDEyZmQ5MTNmNWIyYmRhN2ZlYTc2NmQ0ZmQ5MzQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTQyOCw2ICs1NDI4
LDcgQEAgdm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb25Bc3luYygpCiAjZW5kaWYgLy8g
UExBVEZPUk0oQ09DT0EpCiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKwog
c3RhdGljIEZyYW1lKiB0YXJnZXRGcmFtZUZvckVkaXRpbmcoV2ViUGFnZSYgcGFnZSkKIHsKICAg
ICBGcmFtZSYgdGFyZ2V0RnJhbWUgPSBwYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwpAQCAtNTQ2Nyw3ICs1NDY4LDcgQEAgdm9pZCBXZWJQYWdl
OjpkZWxldGVTdXJyb3VuZGluZyhpbnQ2NF90IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVyQ291
bnQpCiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
OwogICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mRWRpdGFibGVD
b250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOwotICAgIGF1dG8gY3Vyc29y
UG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHN1cnJvdW5kaW5nUmFuZ2UuZ2V0
KCkpOworICAgIGF1dG8gY3Vyc29yUG9zaXRpb24gPSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCgq
c3Vycm91bmRpbmdSYW5nZSk7CiAgICAgYXV0byYgcm9vdE5vZGUgPSBzdXJyb3VuZGluZ1Jhbmdl
LT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAgICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJv
b3ROb2RlLCBjdXJzb3JQb3NpdGlvbiArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIGlm
ICghc2VsZWN0aW9uUmFuZ2UpCkBAIC01NDc5LDYgKzU0ODAsNyBAQCB2b2lkIFdlYlBhZ2U6OmRl
bGV0ZVN1cnJvdW5kaW5nKGludDY0X3Qgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudCkK
ICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxz
ZSk7CiAgICAgc2VuZEVkaXRvclN0YXRlVXBkYXRlKCk7CiB9CisKICNlbmRpZgogCiB2b2lkIFdl
YlBhZ2U6OmRpZEFwcGx5U3R5bGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAppbmRleCAzYTdiYWE2YzEwMmRkN2NmNjY1
ZWMzNmJiNGIxZmJjMThiMjIwZWNhLi5lMmFjMjNhZTU1N2Q3YTE3ZTk2N2MwM2JiODMwMWE3ODdk
N2NkNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGli
L1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9n
bGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTE2LDEyICsxMTYsMTIgQEAgdm9pZCBXZWJQYWdlOjpw
bGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCwgSW5j
bHVkZVBvc3QKICAgICAgICAgICAgIHN1cnJvdW5kaW5nUmFuZ2UtPnNldEVuZChjb21wb3NpdGlv
blJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgY2xvbmVkUmFuZ2UtPnNldFN0
YXJ0KGNvbXBvc2l0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgcG9zdExh
eW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KHN1cnJvdW5kaW5nUmFuZ2Uu
Z2V0KCkpICsgcGxhaW5UZXh0KGNsb25lZFJhbmdlLnB0cigpKTsKLSAgICAgICAgICAgIHBvc3RM
YXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChzdXJyb3VuZGluZ1JhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHBvc3RM
YXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uID0gY2hhcmFjdGVyQ291
bnQoKnN1cnJvdW5kaW5nUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91
bmRpbmdDb250ZXh0U2VsZWN0aW9uUG9zaXRpb24gPSBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGlu
Z0NvbnRleHRDdXJzb3JQb3NpdGlvbjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dCA9IHBsYWluVGV4dChzdXJyb3VuZGluZ1Jh
bmdlLmdldCgpKTsKLSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4
dEN1cnNvclBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc3Vy
cm91bmRpbmdTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdldCgpKTsKLSAgICAgICAgICAgIHBvc3RM
YXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBvc2l0aW9uID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgc2VsZWN0aW9uLnZp
c2libGVFbmQoKSkuZ2V0KCkpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRp
bmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVJhbmdlKHN1cnJv
dW5kaW5nU3RhcnQsIHNlbGVjdGlvblN0YXJ0KSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0
YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxlY3Rpb25Qb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50KCpt
YWtlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSkpOwogICAg
ICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCAzMTUyYzM3ZjRmNGRjZjJmZDEwNWE2NDRmZDFlMDcw
Yzk2ODE1YmYxLi5kODlhMGM0MDdhODE4YWJmYWQ2NzE4NWYzY2IyNTIwOWJiYjExZjFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQpAQCAtMTk4OSwxMyArMTk4OSwxNiBAQCB2b2lkIFdlYlBhZ2U6OnN0b3JlU2VsZWN0aW9uRm9y
QWNjZXNzaWJpbGl0eShib29sIHNob3VsZFN0b3JlKQogICAgIH0KIH0KIAotc3RhdGljIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiByYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgbWF0Y2hUZXh0LCBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvblJhbmdlKQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU5l
YXJQb3NpdGlvbk1hdGNoZXNUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNv
bnN0IFN0cmluZyYgbWF0Y2hUZXh0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
CiB7Ci0gICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRvIGxpdmVSYW5nZSA9IHNlbGVj
dGlvbi5maXJzdFJhbmdlKCk7CisgICAgaWYgKCFsaXZlUmFuZ2UpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2VsZWN0aW9uUmFu
Z2UtPm93bmVyRG9jdW1lbnQoKSwgc2VsZWN0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAg
dW5zaWduZWQgdGFyZ2V0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5w
dHIoKSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGZpbmRDbG9zZXN0UGxhaW5UZXh0KCpzZWxlY3Rpb25S
YW5nZSwgbWF0Y2hUZXh0LCB7IH0sIHRhcmdldE9mZnNldCk7CisgICAgU2ltcGxlUmFuZ2UgcmFu
Z2UgeyAqbGl2ZVJhbmdlIH07CisgICAgYXV0byBib3VuZGFyeVBvaW50ID0gbWFrZUJvdW5kYXJ5
UG9pbnQocG9zaXRpb24pOworICAgIGlmICghYm91bmRhcnlQb2ludCkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmluZENsb3Nlc3RQbGFpblRleHQocmFuZ2UsIG1h
dGNoVGV4dCwgeyB9LCBjaGFyYWN0ZXJDb3VudCh7IHJhbmdlLnN0YXJ0LCAqYm91bmRhcnlQb2lu
dCB9LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9u
cykpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4
dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCkBAIC0yMDIyLDcgKzIwMjUsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rp
b25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZQogCiAgICAg
aWYgKHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2UucHRyKCkpICE9IHRleHQpIHsKICAgICAgICAg
Ly8gVHJ5IHRvIHNlYXJjaCBmb3IgYSByYW5nZSB3aGljaCBpcyB0aGUgY2xvc2VzdCB0byB0aGUg
cG9zaXRpb24gd2l0aGluIHRoZSBzZWxlY3Rpb24gcmFuZ2UgdGhhdCBtYXRjaGVzIHRoZSBwYXNz
ZWQgaW4gdGV4dC4KLSAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gcmFuZ2VOZWFyUG9zaXRp
b25NYXRjaGVzVGV4dChzdGFydFBvc2l0aW9uLCB0ZXh0LCBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gcmFuZ2VOZWFyUG9zaXRp
b25NYXRjaGVzVGV4dChzdGFydFBvc2l0aW9uLCB0ZXh0LCBzZWxlY3Rpb24pKSB7CiAgICAgICAg
ICAgICBpZiAoIXdvcmRSYW5nZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgICAgICAgICAgcmFuZ2Ug
PSBjcmVhdGVMaXZlUmFuZ2UoKndvcmRSYW5nZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggM2EwZGM0
NTIwMTc2YzRjYjM5ZDE4Y2Q1MTAyMmEwNGViMDdjZDc4Mi4uMmM1ODk2ZGY3ODU3NTg2NjEwZDJh
M2E2NTU2ZDU4MTljZjZmZmU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE0MCwxOSArMTQwLDIyIEBAIHZvaWQgV2Vi
UGFnZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1
bHQsIEluY2x1ZGVQb3N0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8mIHBvc3RMYXlvdXREYXRhID0gcmVzdWx0LnBvc3RMYXlvdXREYXRhKCk7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAg
IFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwot
ICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoc2Vs
ZWN0aW9uU3RhcnQpOwotICAgIFZpc2libGVQb3NpdGlvbiBwYXJhZ3JhcGhFbmQgPSBlbmRPZlBh
cmFncmFwaChzZWxlY3Rpb25FbmQpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnRCb3VuZGFyeSA9
IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvblN0YXJ0KTsKKyAgICBhdXRvIHNlbGVjdGlvbkVu
ZCA9IG1ha2VCb3VuZGFyeVBvaW50KHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOworICAgIGF1dG8g
cGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKHNlbGVj
dGlvblN0YXJ0KSk7CisKKyAgICBpZiAoIXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfHwgIXNlbGVj
dGlvbkVuZCB8fCAhcGFyYWdyYXBoU3RhcnQpCisgICAgICAgIHJldHVybjsKIAotICAgIHBvc3RM
YXlvdXREYXRhLmNhbmRpZGF0ZVJlcXVlc3RTdGFydFBvc2l0aW9uID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvblN0YXJ0KS5nZXQo
KSk7Ci0gICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlvbkVuZCkuZ2V0
KCkpIC0gcG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb247CisgICAg
cG9zdExheW91dERhdGEuY2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24gPSBjaGFyYWN0ZXJD
b3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgKnNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfSk7CisgICAg
cG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoeyAqc2Vs
ZWN0aW9uU3RhcnRCb3VuZGFyeSwgKnNlbGVjdGlvbkVuZCB9KTsKICAgICBwb3N0TGF5b3V0RGF0
YS5wYXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9IHBsYWluVGV4dChmcmFtZS5l
ZGl0b3IoKS5jb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkuZ2V0KCkpOwogICAgIHBv
c3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFtZS5lZGl0b3IoKS5z
dHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA3YzUw
NmZjNmE3YTMxYmYzNzdjYTY1ZGM2NTEwNDRmNDFjZjlkZjEwLi5jYTQ3OTMxMDU0YjgwMjYyNjg3
M2UzZjUzZmI1ZWUzMDU0ZTk4NTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMDMxLDE2ICsx
MDMxLDE5IEBAIHN0YXRpYyBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjb3JlKE5TQXJyYXkg
KmluY29taW5nUmVzdWx0cywgT3B0aW9uU2V0PFRleHRDCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9
CiAKLXN0YXRpYyBpbnQgaW5zZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQorc3RhdGljIE5TVUludGVnZXIgaW5z
ZXJ0aW9uUG9pbnRGcm9tQ3VycmVudFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gY3VycmVu
dFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcGFyYWdyYXBo
U3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKLSAgICByZXR1cm4gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVjdGlv
blN0YXJ0KS5nZXQoKSk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgPSBtYWtlQm91bmRh
cnlQb2ludChzZWxlY3Rpb25TdGFydCk7CisgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VC
b3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpKTsKKyAgICBpZiAo
IXNlbGVjdGlvblN0YXJ0Qm91bmRhcnkgfHwgIXBhcmFncmFwaFN0YXJ0KQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBoU3RhcnQsICpzZWxl
Y3Rpb25TdGFydEJvdW5kYXJ5IH0pOwogfQogCiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBX
ZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaW5nLCBP
cHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY29yZUNoZWNraW5nVHlwZXMsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCiB7Ci0gICAgTlNEaWN0aW9uYXJ5ICpvcHRp
b25zID0gQHsgTlNUZXh0Q2hlY2tpbmdJbnNlcnRpb25Qb2ludEtleSA6ICBbTlNOdW1iZXIgbnVt
YmVyV2l0aFVuc2lnbmVkSW50ZWdlcjppbnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9u
KGN1cnJlbnRTZWxlY3Rpb24pXSB9OworICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5T
VGV4dENoZWNraW5nSW5zZXJ0aW9uUG9pbnRLZXkgOiBAKGluc2VydGlvblBvaW50RnJvbUN1cnJl
bnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikpIH07CiAgICAgcmV0dXJuIGNvcmUoW1tOU1Nw
ZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGNoZWNrU3RyaW5nOnN0cmluZy5jcmVhdGVO
U1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5n
Lmxlbmd0aCgpKSB0eXBlczoobnNUZXh0Q2hlY2tpbmdUeXBlcyhjb3JlQ2hlY2tpbmdUeXBlcykg
fCBOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSkgb3B0aW9uczpvcHRpb25zIGluU3BlbGxE
b2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTpOVUxM
IHdvcmRDb3VudDpOVUxMXSwgY29yZUNoZWNraW5nVHlwZXMpOwogfQogCkBAIC0xMDgzLDcgKzEw
ODYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleAogICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9
IG5pbDsKICAgICBOU09ydGhvZ3JhcGh5KiBvcnRob2dyYXBoeSA9IG5pbDsKICAgICBOU1NwZWxs
Q2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOwot
ICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7IE5TVGV4dENoZWNraW5nSW5zZXJ0aW9uUG9p
bnRLZXkgOiAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludGVnZXI6aW5zZXJ0aW9uUG9p
bnRGcm9tQ3VycmVudFNlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKV0gfTsKKyAgICBOU0RpY3Rp
b25hcnkgKm9wdGlvbnMgPSBAeyBOU1RleHRDaGVja2luZ0luc2VydGlvblBvaW50S2V5IDogQChp
bnNlcnRpb25Qb2ludEZyb21DdXJyZW50U2VsZWN0aW9uKGN1cnJlbnRTZWxlY3Rpb24pKSB9Owog
ICAgIGlmIChjb250ZXh0Lmxlbmd0aCgpKSB7CiAgICAgICAgIFtjaGVja2VyIGNoZWNrU3RyaW5n
OmNvbnRleHQgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgdHlwZXM6TlNU
ZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0aW9uczpvcHRpb25zIGluU3BlbGxEb2N1bWVu
dFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTomb3J0aG9ncmFw
aHkgd29yZENvdW50OjBdOwogICAgICAgICBsYW5ndWFnZSA9IFtjaGVja2VyIGxhbmd1YWdlRm9y
V29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIGluU3RyaW5nOmNvbnRl
eHQgb3J0aG9ncmFwaHk6b3J0aG9ncmFwaHldOwpAQCAtMTExNiwyNCArMTExOSwyMCBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6cmVxdWVzdENhbmRpZGF0ZXNGb3JTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZQogICAgIGlmICghW21fd2ViVmlldyBzaG91bGRSZXF1ZXN0Q2Fu
ZGlkYXRlc10pCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRS
YW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRS
YW5nZSkKKyAgICBpZiAoIXNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV93ZWJWaWV3IF9zZWxlY3Rl
ZE9yTWFpbkZyYW1lXSk7CisKKyAgICBhdXRvKiBmcmFtZSA9IGNvcmUoW21fd2ViVmlldyBfc2Vs
ZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fbGFzdFNlbGVjdGlvbkZvclJlcXVlc3RlZENhbmRpZGF0ZXMgPSBzZWxlY3Rpb247CiAK
LSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNp
YmxlRW5kKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBh
cmFncmFwaChzZWxlY3Rpb25TdGFydCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBhcmFncmFwaEVu
ZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvbkVuZCk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFy
dCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0T2Zm
c2V0SW5QYXJhZ3JhcGggPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzdGFy
dE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KSksICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rp
b25TdGFydCkgfSk7CisgICAgYXV0byBzZWxlY3Rpb25MZW5ndGggPSBjaGFyYWN0ZXJDb3VudCh7
ICptYWtlQm91bmRhcnlQb2ludChzZWxlY3Rpb25TdGFydCksICptYWtlQm91bmRhcnlQb2ludChz
ZWxlY3Rpb24udmlzaWJsZUVuZCgpKSB9KTsKIAotICAgIGludCBsZW5ndGhUb1NlbGVjdGlvblN0
YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQs
IHNlbGVjdGlvblN0YXJ0KS5nZXQoKSk7Ci0gICAgaW50IGxlbmd0aFRvU2VsZWN0aW9uRW5kID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtYWtlUmFuZ2UocGFyYWdyYXBoU3RhcnQsIHNlbGVj
dGlvbkVuZCkuZ2V0KCkpOwotICAgIG1fcmFuZ2VGb3JDYW5kaWRhdGVzID0gTlNNYWtlUmFuZ2Uo
bGVuZ3RoVG9TZWxlY3Rpb25TdGFydCwgbGVuZ3RoVG9TZWxlY3Rpb25FbmQgLSBsZW5ndGhUb1Nl
bGVjdGlvblN0YXJ0KTsKKyAgICBtX3JhbmdlRm9yQ2FuZGlkYXRlcyA9IE5TTWFrZVJhbmdlKHNl
bGVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgsIHNlbGVjdGlvbkxlbmd0aCk7CiAgICAgbV9w
YXJhZ3JhcGhDb250ZXh0Rm9yQ2FuZGlkYXRlUmVxdWVzdCA9IHBsYWluVGV4dChmcmFtZS0+ZWRp
dG9yKCkuY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpLmdldCgpKTsKIAogICAgIE5T
VGV4dENoZWNraW5nVHlwZXMgY2hlY2tpbmdUeXBlcyA9IE5TVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nIHwgTlNUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQgfCBOU1RleHRDaGVja2luZ1R5cGVD
b3JyZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
aW5kZXggYmMzYmViZGYyNjJmYTRlY2ZiMDE4NzhiM2MyYjBjNTVjM2VhOTAxNS4uZTRjNmFhMDA1
YjlmOWQ4OTlmODE2YTNhZGMxNDlmNTE0ZmIxYTM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC04MzUsMjQgKzgzNSwxOSBAQCAtIChSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlIHJhbmdl
SXNSZWxhdGl2ZVRvOgogICAgICAgICAvLyBUaGF0IGZpdHMgd2l0aCBBcHBLaXQncyBpZGVhIG9m
IGFuIGlucHV0IGNvbnRleHQuCiAgICAgICAgIGF1dG8qIGVsZW1lbnQgPSBfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQo
KTsKICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gV2ViQ29yZTo6VGV4dEl0ZXJh
dG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChlbGVtZW50LCBuc3JhbmdlLmxvY2F0aW9u
LCBuc3JhbmdlLmxlbmd0aCk7CiAgICAgfQogCiAgICAgQVNTRVJUKHJhbmdlSXNSZWxhdGl2ZVRv
ID09IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpQYXJhZ3JhcGgpOwogCi0gICAgY29uc3QgYXV0byYg
c2VsZWN0aW9uID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlKQorICAgIGF1dG8gcGFy
YWdyYXBoU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChzdGFydE9mUGFyYWdyYXBoKF9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSk7Cisg
ICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0
byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1h
a2VSYW5nZShzdGFydE9mUGFyYWdyYXBoKHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSksIHNlbGVj
dGlvbi52aXNpYmxlRW5kKCkpOwotICAgIGlmICghcGFyYWdyYXBoUmFuZ2UpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byYgcm9vdE5vZGUgPSBwYXJhZ3JhcGhSYW5nZS5nZXQo
KS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwotICAgIGludCBwYXJh
Z3JhcGhTdGFydEluZGV4ID0gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChXZWJD
b3JlOjpSYW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50KCksICZyb290Tm9kZSwgMCwgJnBh
cmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRPZmZz
ZXQoKSkucHRyKCkpOwotICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJv
bUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3RhcnRJbmRleCArIHN0YXRp
Y19jYXN0PGludD4obnNyYW5nZS5sb2NhdGlvbiksIG5zcmFuZ2UubGVuZ3RoKTsKKyAgICBhdXRv
IHBhcmFncmFwaFN0YXJ0SW5kZXggPSBXZWJDb3JlOjpjaGFyYWN0ZXJDb3VudCh7IHsgcm9vdE5v
ZGUsIDAgfSwgKnBhcmFncmFwaFN0YXJ0IH0pOworICAgIHJldHVybiBXZWJDb3JlOjpUZXh0SXRl
cmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwgcGFyYWdyYXBoU3Rh
cnRJbmRleCArIG5zcmFuZ2UubG9jYXRpb24sIG5zcmFuZ2UubGVuZ3RoKTsKIH0KIAogLSAoRE9N
UmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAwMDQ3ZWVhMzdhZjc5MmQ5ZWQzNzgzY2NjY2M5ZjQ4YjMwNjIzYzdmLi4yMGEyYmQ5ZTE5N2Nh
MjY0N2RlZDQzMjMxYzM2MWQxNDA5MTM2MDY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAt
MDMtMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIENoYW5nZSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoIHRvIG5vdCByZXF1aXJlIGEgbGl2ZSByYW5nZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5MjA3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiBlZGl0aW5nL21h
Yy9zcGVsbGluZy9hdXRvY29ycmVjdGlvbi1jb250cmFjdGlvbi1leHBlY3RlZC50eHQ6IFVwZGF0
ZSB0aGVzZSBleHBlY3RlZAorICAgICAgICByZXN1bHRzIGJlY2F1c2Ugb2YgY2hhbmdlcyB0byBk
ZWxlZ2F0ZSBjYWxsYmFja3MuIFRoZSB0ZXN0IGlzIHN0aWxsIHBhc3NpbmcgYW5kIHRoaXMKKyAg
ICAgICAgY2hhbmdlIGlzIG9ubHkgaW4gdGhlIGxlZ2FjeSBXZWJLaXQgY2FzZSAodGhlcmUgaXMg
YSBzZXBhcmF0ZSByZXN1bHQgZm9yIG1vZGVybiBXZWJLaXQpLgorICAgICAgICBUaGlzIHNlZW1z
IHRvIGJlIGEgcHJvZ3Jlc3Npb24sIG5vdCBldmlkZW5jZSBvZiBhIGJ1Zy4KKwogMjAyMC0wMy0y
MyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIGh0
dHAvd3B0L2Nzcy9jc3MtYW5pbWF0aW9ucy9zdGFydC1hbmltYXRpb24tMDAxLmh0bWwgaXMgZmFp
bGluZyBvbiBXaW5kb3dzIEVXUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9tYWMv
c3BlbGxpbmcvYXV0b2NvcnJlY3Rpb24tY29udHJhY3Rpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9tYWMvc3BlbGxpbmcvYXV0b2NvcnJlY3Rpb24tY29udHJhY3Rpb24tZXhw
ZWN0ZWQudHh0CmluZGV4IDYzODFlMjYzZGJkNGRhYzQwY2FlOTFlY2JlMmYxZmZiY2U5YTMxOWMu
LmFiZjNkNTUwYTA4N2RhYTkxYjA1YzkyOGY3NDgwODg5NzQwY2VmYmYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2VkaXRpbmcvbWFjL3NwZWxsaW5nL2F1dG9jb3JyZWN0aW9uLWNvbnRyYWN0aW9u
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL21hYy9zcGVsbGluZy9hdXRv
Y29ycmVjdGlvbi1jb250cmFjdGlvbi1leHBlY3RlZC50eHQKQEAgLTE1MSwyMSArMTUxLDggQEAg
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZp
Y2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJh
bmdlIGZyb20gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50
IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RP
TVJhbmdlOnJhbmdlIGZyb20gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1
bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGlu
ZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4g
RElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9m
ICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4
dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCi1FRElUSU5HIERFTEVH
QVRFOiBzaG91bGRJbnNlcnRUZXh0OndvdWxkIHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGZyb20g
MCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBnaXZlbkFjdGlvbjpX
ZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQKLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNl
bGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA3IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG8gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1M
ID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJP
RFkgPiBIVE1MID4gI2RvY3VtZW50IGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3Ry
ZWFtIHN0aWxsU2VsZWN0aW5nOkZBTFNFCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VT
ZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IHRvIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRN
TCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4dCA+IERJViA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0
cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENo
YW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCi1FRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VT
ZWxlY3Rpb25Ob3RpZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVj
dGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvIDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6
RkFMU0UKLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmll
d0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogd2ViVmll
d0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3Rp
ZmljYXRpb24KLUVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgotRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYgPiBE
SVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDcgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA3IG9mICN0ZXh0ID4gRElW
ID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKLUVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvbgotRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdl
Tm90aWZpY2F0aW9uCi1FRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJh
bmdlOnJhbmdlIGZyb20gNyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IHRvIDcgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVu
dCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gOCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+
ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNl
bGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZTpyYW5nZSBmcm9tIDYgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDggb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4g
SFRNTCA+ICNkb2N1bWVudCB0byA4IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxT
ZWxlY3Rpbmc6RkFMU0UKIEVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rp
b246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgogRURJVElORyBERUxFR0FU
RTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCiBFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGZyb20gOCBvZiAj
dGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDggb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZy
b20gOSBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDkg
b2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQpAQCAtMTg2
LDYgKzE3MywxOSBAQCBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdE
aWRDaGFuZ2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVj
dGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxMyBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBI
VE1MID4gI2RvY3VtZW50IHRvIDEzIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBESVYgPiBESVYgPiBC
T0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0
cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENo
YW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRp
b24KK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2Ug
ZnJvbSAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRv
IDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01S
YW5nZTpyYW5nZSBmcm9tIDAgb2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNk
b2N1bWVudCB0byA2IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1l
bnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6
RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydFRleHQ6d291bGQgcmVwbGFjaW5n
RE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2Rv
Y3VtZW50IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZAorRURJVElORyBERUxF
R0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20g
MCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYgb2Yg
I3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1Nl
bGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBE
RUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0
ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQg
PiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZy
b20gMCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDYg
b2YgI3RleHQgPiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2Vs
ZWN0aW9uOldlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVM
RUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAwIG9mIERJViA+
IERJViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgRElWID4gRElWID4gQk9EWSA+
IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDUgb2YgI3RleHQgPiBESVYg
PiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA1IG9mICN0ZXh0ID4gRElWID4gRElW
ID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURv
d25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgor
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdlTm90aWZp
Y2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZp
ZXdEaWRDaGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSAxMyBvZiAjdGV4dCA+IERJViA+IERJ
ViA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDEzIG9mICN0ZXh0ID4gRElWID4gRElWID4g
Qk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDE0IG9mICN0ZXh0
ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gMTQgb2YgI3RleHQgPiBE
SVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQorRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uTm90aWZp
Y2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFu
Z2VOb3RpZmljYXRpb24KIEVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6cmFuZ2UgZnJvbSAxNCBvZiAjdGV4dCA+IERJViA+IERJViA+IEJPRFkgPiBIVE1MID4g
I2RvY3VtZW50IHRvIDE0IG9mICN0ZXh0ID4gRElWID4gRElWID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG9ET01SYW5nZTpyYW5nZSBmcm9tIDAgb2YgRElWID4gRElWID4gQk9EWSA+IEhUTUwg
PiAjZG9jdW1lbnQgdG8gMCBvZiBESVYgPiBESVYgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBh
ZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxT
RQogRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCiBFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlk
Q2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24K
</data>

          </attachment>
      

    </bug>

</bugzilla>